我使用Python的TkInter模块作为GUI。下面是一个简单的复选框代码。在
def getCheckVal():
print cbVar.get()
windowTime=Tk.Tk()
cbVar = Tk.IntVar()
btnC = Tk.Checkbutton(windowTime, text="Save", variable = cbVar, command=getCheckVal)
btnC.grid()
windowTime.mainloop()
这个代码工作正常。每次我勾选复选框,我得到1,否则为0。在
但是,当我在从另一个TkInter命令调用的函数中运行相同的代码时(当按下按钮时),它将停止工作。我总是取0作为值。在
^{pr2}$这很不寻常。会出什么问题?在
编辑:我使用了2个主循环,因为我希望在单击“显示绘图”按钮时打开一个单独的窗口(windowTime
)。这个新窗口应该有复选框。在
您的
windowTime
、cbVar
等变量在函数的局部作用域中定义。当askUser()
完成执行时,这些值将被丢弃。在它们前面加上self.
,将它们保存为实例变量。在程序中应该只有一个
mainloop()
,以运行主Tkinter
根对象。试着把它放在程序的最后一行。我建议您阅读一下Effbot,了解如何设置Tkinter
应用程序。在我不确定您要做什么,但有一个问题是,您在
askUser()
方法中创建的名为cbVar
的TK.IntVar
将在函数返回时被删除,因此您需要将其附加到某个在该函数返回后仍然存在的东西上。虽然可以将其作为全局变量,但更好的选择是使其成为更持久的属性,并且“寿命”更长。在另一个可能的问题是,在一个
Tkinter
应用程序中,通常只应该有一个对mainloop()
的调用。看来您要做的是显示通常称为对话框窗口,Tkinter也支持它。有一些标准的内置类,加上一些更通用的类来简化自定义类的创建。这里有一些我发现的documentation详细描述了它们。您可能还发现查看它们的源代码很有帮助。 在python2中,它位于/Lib/lib-tk/tkSimpleDialog.py文件中,并且 在python3中,代码位于一个名为/Lib/tkinter/simpledialog.py的文件中。在下面的代码采用后一种方法,并从包含Tkinter库的通用类派生一个名为
GUIButtonDialog
的自定义对话框类,该类仅名为Dialog
。在相关问题 更多 >
编程相关推荐