tkinter窗口一无所有

时间:2013-07-24 19:34:42

标签: python tkinter

我很担心为什么这段代码无法在窗口中生成任何内容。标签,文本条目和按钮都已在类中创建。他们的主框架是root,它通过 init 传递。我知道这是一个非常琐碎的问题,但它与我正在阅读的书中的内容非常相似,但这本书已经有14年了。任何人都可以向我解释我忽略了什么吗?

from tkinter import *
import hashlib

class Login:

    def __init__(self, master):

        ##Set frame as root window
        frame = Frame(master)
        frame.pack()

        Label(top, text="Username").pack()

        ##Enter Username
        self.username = Entry(frame)
        self.username.pack()
        self.username.set_focus() #keyboard entry starts here

        Label(top, text="Password").pack()

        ##Enter Password
        self.password = Entry(frame)
        self.password.pack()

        ##Login
        self.login = Button(frame, text="Login", width=10)
        self.login.pack()

def main():
    root = Tk()
    root.geometry("400X400+300+300")
    app = Login(root)
    root.mainloop()

main()

2 个答案:

答案 0 :(得分:1)

所以我在Python 2下测试了这个,并且必须修复四件事:

  1. tkinter更改为Tkinter(但Python 3使用tkinter,因此我认为这就是您正在使用的内容)
  2. 修复几何字符串(使用小写x)以避免TclError: bad geometry specifier
  3. top更改为frame,以避免NameError
  4. set_focus更改为focus_set,以避免AttributeError
  5. 通过这些更改,脚本可以按预期工作。

    (我刚刚确认它在Python 3下工作,如果我跳过第一次更改)

    您是否在某些IDE中运行此操作但未向您显示例外情况?

答案 1 :(得分:0)

您在创建类的实例时使用root但是在类中位于顶部;

这就是我为它起作用所做的事情:

from Tkinter import *
import hashlib

class Login:

    def __init__(self, master):

        ##Set frame as root window
        frame = Frame(master)
        frame.pack()


        Label(frame, text="Username").pack()

        ##Enter Username
        self.username = Entry(frame)
        self.username.pack()


        Label(frame, text="Password").pack()

        ##Enter Password
        self.password = Entry(frame)
        self.password.pack()

        ##Login
        self.login = Button(frame, text="Login", width=10)
        self.login.pack()

def main():
    root = Tk()

    app = Login(root)
    root.mainloop()

main()