-1

我很困惑为什么这段代码不能在窗口中产生任何东西。标签、文本条目和按钮都已在类中创建。他们的主框架是通过init传递的 root 。我知道这是一个非常琐碎的问题,但它与我正在阅读的书中的内容非常相似,但是这本书是 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()
4

2 回答 2

1

所以我在 Python 2 下对此进行了测试,并且必须修复四件事:

  1. 更改tkinterTkinter(不过,Python 3 使用tkinter,所以我认为这就是您正在使用的)
  2. 修复几何字符串(使用小写 x)以避免TclError: bad geometry specifier.
  3. 改成topframe避免了NameError
  4. 更改set_focusfocus_set, 避免AttributeError.

有了这些更改,脚本就可以按预期工作了。

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

您是否在某些不显示异常的 IDE 下运行它?

于 2013-07-24T19:51:48.260 回答
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()
于 2013-07-24T19:41:46.857 回答