如何关闭Tkinter窗口并保留StringVar值?

2024-10-03 15:33:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我对以下代码有几个问题:

  1. 选择单选按钮和确定按钮后,Tkinter窗口不会关闭。我尝试过各种方法来关闭Tkinter窗口quit()和{},它们都在buttonAction()内部和之后{},但都没有奏效。代码将无休止地运行,窗口不会关闭。在
  2. 在代码运行后,compGDB变量赋值不被保留。此时,我想知道compGDB变量是否仅仅因为destroy/quit代码失败而被保留。在

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()

谢谢你们!在


Tags: 代码textmastertkinterusernamecolumndatabasequit
1条回答
网友
1楼 · 发布于 2024-10-03 15:33:37

我不能复制你的第一期。您可以quit()通过在def buttonAction():内调用master.quit(),应该还缺少其他内容。在

第二个问题是,这是因为compGDB是函数buttonAction内的{a1},所以一旦函数完成,属性就不再是。在

虽然更好的建议是将代码重建为class,并将compGDB定义为实例/类属性(因此只要类实例仍在内存中,就可以调用它),但是您可以看到这是一项很费劲的工作。一个简单的解决方法(IMO不是最佳实践)是:

compGDB = ''

def buttonAction():
    global compGDB
    compGDB = choice.get()
    master.quit()

这样一来,global属性compGDB仍然保留,并且您甚至可以在master.mainloop()之后的任何地方调用它。在

但是,如果您以后需要使用这些信息,请考虑对您的tkinter使用OOP方法。它将有助于更容易地维护命名空间,尤其是对于复杂的脚本。在

相关问题 更多 >