我遇到以下代码的几个问题:
quit()
和destroy()
buttonAction()
以及master.mainloop()
之后 - 但两者都没有效果。代码将无休止地运行,窗口不会关闭。compGDB
变量赋值。此时,我想知道compGDB
变量是否因为销毁/退出代码失败而不能保留。import Tkinter, getpass
username = getpass.getuser()
def buttonAction():
compGDB = choice.get()
print compGDB
#master.quit()
#master.destroy()
vwrMinGDB = "C:\\Users\\" + username + "\\Desktop\\ViewerAttribution\\Viewer_minimum.gdb"
fullGDB = "C:\\Users\\" + username + "\\Desktop\\ViewerAttribution\\Full_geodatabase.gdb"
master = Tkinter.Tk()
master.title("Schema comparison")
master.geometry("250x100")
choice = Tkinter.StringVar()
choice.set(vwrMinGDB)
chooseOption = Tkinter.Label(master, text="Slect geodatabase for schema comparison")
rButton1 = Tkinter.Radiobutton(master, text="Viewer Minimum Attribution", variable=choice, value=vwrMinGDB)
rButton2 = Tkinter.Radiobutton(master, text="Full Geodatabase Attribution", variable=choice, value=fullGDB)
confirmButton = Tkinter.Button(master, text="OK", command=buttonAction)
chooseOption.grid(column="1", row="0")
rButton1.grid(column="1", row="1")
rButton2.grid(column="1", row="2")
confirmButton.grid(column="1", row="3")
master.mainloop()
#master.quit()
#master.destroy()
谢谢,你们!
答案 0 :(得分:0)
我无法重现您的第一个问题。您可以quit()
在master.quit()
内拨打def buttonAction():
,但是应该还有其他内容丢失。
你的第二个问题是因为compGDB
在函数buttonAction
中是locally created,所以一旦完成了这个功能,属性就不再存在了。
虽然更好的建议是将代码重建为class
并将compGDB
定义为实例/类属性(因此只要该类,您就可以调用它实例仍然在内存中),你可以看到它可能有点工作。一个简单的解决方法(IMO不是最佳实践)将是:
compGDB = ''
def buttonAction():
global compGDB
compGDB = choice.get()
master.quit()
这样,全局属性compGDB
仍然保留,即使在master.mainloop()
之后,您也可以在任何地方调用它。
但是,如果您之后使用了该信息,请考虑对tkinter
使用OOP方法。它可以帮助您更轻松地维护命名空间,尤其是对于复杂的脚本。