<p>确实有很多事情需要纠正。首先也是最重要的一点是,您多次引用了<code>self.frame</code>,但它并不存在,因为您的类不是从<code>tk.Frame</code>继承的。下面我使用<code>master</code>而不是self.frame修复了您的代码:</p>
<pre><code>from tkinter import *
class Starting:
def __init__(self, master):
self.usern = Label(master ,text="Please enter a username:", font=("16"))
self.usern.grid(row=1, padx=20, pady=20)
self.userentry = Entry(master, width=50)
self.userentry.grid(row=2)
self.name = StringVar()
self.name.set(self.userentry.get())
self.usercont = Button(master, text="Continue", command=lambda: self.startcheck(master))
self.usercont.grid(row=3)
def startcheck(self, master):
if self.name.get() == None:
nameerror = Label(master, text="Please enter a username")
nameerror.grid(row=5)
else:
self.clear1(master)
def clear1(self, master):
master.destroy()
Question1(root)
if __name__ == "__main__":
root = Tk()
root.title = ("Maths Quiz")
instance = Starting(root)
root.mainloop()
</code></pre>
<p>另外,command=self.startcheck()由于括号(它调用函数,而不是将其指定为回调函数)而不起作用。
上面我将master传递给函数,但您也可以在<code>__init__()</code>中包含<code>self.master = master</code>,然后改为引用<code>self.master</code>。在这种情况下,您不必将master作为参数传递</p>
<pre><code># Obviously it throws an error when arriving at Question1
</code></pre>