我很担心为什么这段代码无法在窗口中生成任何内容。标签,文本条目和按钮都已在类中创建。他们的主框架是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()
答案 0 :(得分:1)
所以我在Python 2下测试了这个,并且必须修复四件事:
tkinter
更改为Tkinter
(但Python 3使用tkinter
,因此我认为这就是您正在使用的内容)TclError: bad geometry specifier
。top
更改为frame
,以避免NameError
。set_focus
更改为focus_set
,以避免AttributeError
。通过这些更改,脚本可以按预期工作。
(我刚刚确认它在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()