我正在使用Python中的tkinter程序,该程序使用四个radiobuttons和一个checkbutton。该项目利用GUI窗口和命令行窗口。代码应该创建按钮,在框中显示一个命令,等待几秒钟,然后根据已经按下的按钮做什么或者没有按下。
以下是我创建按钮的代码 -
def __button1__(self):
radiovar = tkinter.IntVar()
check1var = tkinter.IntVar()
radiovar.set(0)
check1var.set(0)
self.frame1 = tkinter.Frame(self.main_window)
radio1 = tkinter.Radiobutton(self.frame1, text = 'Fire', variable = radiovar, value = 1)
radio2 = tkinter.Radiobutton(self.frame1, text = 'Earth', variable = radiovar, value = 2)
radio3 = tkinter.Radiobutton(self.frame1, text = 'Air', variable = radiovar, value = 3)
radio4 = tkinter.Radiobutton(self.frame1, text = 'Water', variable = radiovar, value = 4)
check1 = tkinter.Checkbutton(self.frame1, text = 'Shadow', variable = check1var,)
radio1.pack()
radio2.pack()
radio3.pack()
check1.pack()
radio4.pack()
self.frame1.pack(side = 'left')
self.frame1.after(100, self.__game__)
这是创建GUI的类的一部分。最后一行等待一秒钟,然后启动执行程序其余部分的功能。功能是 -
def __game__(self):
print('Select Shadow, then click on Water.')
self.frame1.after(500)
if check1var.get() == 1 and radiovar.get() == 4:
print('Nicely done!')
窗口被创建,第二个窗口被传递,然后我得到一个异常,说check1var(与复选框一起的IntVar)是未定义的。我看到我在设置或检查IntVar时出错了 - 我做错了什么,我该如何解决?
答案 0 :(得分:1)
假设这些方法是同一个类的一部分,使用self
使它们成为实例的属性,因此可以在所有方法中访问它们。
def __button1__(self):
self.radiovar = tkinter.IntVar()
self.check1var = tkinter.IntVar()
self.radiovar.set(0)
self.check1var.set(0)
# ... define buttons using self.checkvar and self.radiovar
def __game__(self):
print('Select Shadow, then click on Water.')
self.frame1.after(500)
if self.check1var.get() == 1 and self.radiovar.get() == 4:
print('Nicely done!')
答案 1 :(得分:1)
在一个类的多个函数中使用一个变量,你必须将它们声明为类的属性,这意味着用self.varname = var
定义它们
让他们像self.varname
:
def __button1__(self):
self.radiovar = tkinter.IntVar()
self.check1var = tkinter.IntVar()
self.radiovar.set(0)
self.check1var.set(0)
self.frame1 = tkinter.Frame(self.main_window)
radio1 = tkinter.Radiobutton(self.frame1, text = 'Fire', variable = self.radiovar, value = 1)
radio2 = tkinter.Radiobutton(self.frame1, text = 'Earth', variable = self.radiovar, value = 2)
radio3 = tkinter.Radiobutton(self.frame1, text = 'Air', variable = self.radiovar, value = 3)
radio4 = tkinter.Radiobutton(self.frame1, text = 'Water', variable = self.radiovar, value = 4)
check1 = tkinter.Checkbutton(self.frame1, text = 'Shadow', variable = check1var,)
radio1.pack()
radio2.pack()
radio3.pack()
check1.pack()
radio4.pack()
self.frame1.pack(side = 'left')
self.frame1.after(100, self.__game__)
和
def __game__(self):
print('Select Shadow, then click on Water.')
self.frame1.after(500)
if self.check1var.get() == 1 and self.radiovar.get() == 4:
print('Nicely done!')