我是新来的,我在使用Python Tkinter进行测验时遇到了问题。
所以这是代码:
b5 = Button(root, text="Next Question",command=question_2_output)
b5.configure(command = des)
b5.pack(side=BOTTOM)
使用此按钮即可尝试访问两个功能。 - >
def question_2_output():
lab7 = Label(root, text="Qestion 2 Qestion 2 Qestion 2 Qestion 2",
font="Verdana 11 italic")
lab7.pack()
lab7.place(x = 350, y = 60)
def des():
q1.destroy()
使用此代码,我尝试将lab7放在上一个问题q1所在的同一个地方,并销毁/删除旧的标签(问题)。但我收到此错误NameError:名称'q1'未定义。我不能破坏q1。 q1在此功能中。
def question_1_output():
q1 = Label(root, text="This is a very very very very very long question?", font="Verdana 11 italic")
q1.pack()
q1.place(x = 350, y = 60)
任何帮助?谢谢!
答案 0 :(得分:1)
我认为你可能会更新标签,而不是销毁标签并添加新标签。
我还会使用一个类来构建这个GUI,因为它更容易使用类属性和更清晰的阅读。避免使用global
是一种很好的做法,我们可以使用类属性来做到这一点。
以下是如何更新标签和按钮的简单示例。
import tkinter as tk
class GUI(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
self.parent=parent
self.question_label = tk.Label(self, text="Question 1", font="Verdana 11 italic")
self.question_label.pack()
self.b1 = tk.Button(self, text="Next Question",command=self.question_2_output)
self.b1.pack(side=tk.BOTTOM)
def question_1_output(self):
self.question_label.config(text="Question 1")
self.b1.configure(text="Next Question", command=self.question_2_output)
def question_2_output(self):
self.question_label.config(text="Question 2")
self.b1.configure(text="Previous Question", command=self.question_1_output)
if __name__ == "__main__":
root = tk.Tk()
GUI(root).pack()
tk.mainloop()
答案 1 :(得分:0)
在global variable q1
函数和question_1_output()
函数
des()
def des():
global q1
q1.destroy()
def question_1_output():
global q1
q1 = Label(root, text="This is a very very very very very long question?", font="Verdana 11 italic")
q1.pack()
让你button
执行两个功能,你可以这样做
b5 = Button(root, text="Next Question", command=lambda:[des(), question_2_output()])
b5.pack(side=BOTTOM)
答案 2 :(得分:0)
q1
位于函数question_1_output
的本地范围内,因此在函数des
中不可见。
重新排序定义或从函数返回对象,如下所示:
def question_1_output():
q1 = Label(root, text="This is a very very very very very long question?", font="Verdana 11 italic")
q1.pack()
q1.place(x = 350, y = 60)
return q1
def des(question):
question.destroy()
q1 = question_1_output()
des(q1)
虽然我没有看到函数des
的重点,如果它只是在对象上调用destroy
。