2013-07-24 70 views
-1

我很困惑为什么这段代码无法在窗口中产生任何东西。标签,文本条目和按钮都是在课程中创建的。他们的主框架是通过init传递的根。我知道这是一个超级微不足道的问题,但它与我正在阅读的书中的内容非常相似,但是这本书已经14岁了。任何人都可以向我解释我忽略了什么?tkinter窗口什么都没有出现

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

什么是标签(top,text =“Username”)。pack()'中的“top”。你在这里错过了一些代码吗? – Fredrik

+0

这应该是“框架”。我换了它,但没有什么区别,没有出现在窗口中。 – pandeee

回答

1

所以我测试了这条巨蟒2之下,不得不修复四件事情:

  1. 变化tkinterTkinter(Python 3种的用途tkinter,不过,我想这就是你正在使用的)
  2. 修复几何字符串(使用小写x)以避免TclError: bad geometry specifier
  3. top更改为frame,以避免NameError
  4. set_focus更改为focus_set,以避免AttributeError

随着这些更改的到位,脚本按预期工作。

(我刚刚确认,它的作品的Python 3下为好,如果我跳过第一个变化)

你在某些IDE,这并不表明你的异常运行呢?

+0

我有两个意外开启的实例。 “顶”是原因。我曾经假设,如果窗口出现了,那么没有发生错误,但是在我发布之后,我注意到了语法错误。 – pandeee

0

您在创建类的实例但在类的顶部时使用了根;

这里是我做过什么,它的工作:

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

感谢您的帮助 – pandeee