运行

时间:2017-09-23 01:50:10

标签: python tkinter

当我尝试执行在python中创建的Tkinter应用程序时,它给了我一个空白的应用程序窗口。没有显示按钮/标签。可能是什么问题?

代码如下:

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()

它也没有给我任何错误。

1 个答案:

答案 0 :(得分:1)

__init__()的{​​{1}}方法定义中存在拼写错误:

VNMSapp

应该是

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

因此,您的def __init__(self, *args, **kwargs): 方法未被调用,因此不会创建您的小部件。

一旦你纠正了,你会发现使用列表的另一个问题,但我认为你打算使用字典:

__init__()

第二行将无法引发self.frames= [] ... self.frames[F] = frame 异常,因为列表索引必须是整数,而哪些框架对象不是。

通过将TypeError初始化为空字典来解决此问题:

self.frames