0

When I try to execute my Tkinter application created in python, it is giving me a blank application window. No Buttons/Labels are displaying. What may be the Issue ?

Codes are as follows:

import tkinter as tk
from tkinter import ttk

LARGE_FONT=("Verdana", 18)

class VNMSapp(tk.Tk):

    def __int__(self, *args, **kwargs):

        tk.Tk.__init__(self, *args, **kwargs)
        container=tk.Frame(self)
        container.pack(side="top", fill="both", expand=True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames= []
        for F in (StartPage, AdminPage):

            frame = F(container, self)

            self.frames[F] = frame

            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame(StartPage)

    def show_frame(self, cont):

        frame = self.frames[cont]
        frame.tkraise()

class StartPage(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        label = tk.Label(text="THIS IS HOME PAGE", font=LARGE_FONT)
        label.pack()

        btn1 = tk.Button(self, text="Enter ADMIN PAGE",
                         command=lambda: controller.show_frame(AdminPage))
        btn1.pack()

class AdminPage(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        label = tk.Label(text="THIS IS ADMIN PAGE", font=LARGE_FONT)
        label.pack()

        btn1 = tk.Button(self, text="Enter HOME PAGE",
                         command=lambda: controller.show_frame(StartPage))
        btn1.pack()


app = VNMSapp()
app.mainloop()

It is not giving me any error also.

1 Answer 1

1

There is a typo in the definition of the __init__() method for class VNMSapp:

def __int__(self, *args, **kwargs):

should be

def __init__(self, *args, **kwargs):

As a result your __init__() method is not being called, so your widgets are not created.

Once you correct that you will find an additional problem where you are using a list, but I think that you meant to use a dictionary:

self.frames= []
...
self.frames[F] = frame

the second line will fail raising a TypeError exception because list indices must be integers, which frame objects are not.

Fix that by initialising self.frames to an empty dict:

self.frames= {}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.