问题描述
这是我的代码:
from tkinter import *
OPTIONS = ["Available","Busy","Invisible","Away"]
Now = Toplevel()
variable = StringVar(Now)
variable.set(OPTIONS[0]) # default value
details = {"U_status":""}
def verify():
global u_status
details["U_status"]=variable.get()
print ("value is:" + variable.get())
Now.destroy()
def status():
w = OptionMenu(Now,variable,*OPTIONS)
w.pack()
button = Button(Now,text="OK",command=verify,relief='flat')
button.pack()
if __name__=='__main__':
status()
mainloop()
在运行上面的代码时,连同窗口(我想要)一起出现了另一个空窗口。有人能找出这段代码有什么问题吗?
解决方法
此处now = Toplevel()
应替换为Tk()
,例如:
now = Tk()
当您使用Toplevel()
时,如果尚未创建Tk()
窗口(在您的情况下),则会在后台创建一个Toplevel()
窗口,这就是您得到空白新窗口的原因。实际上,空白窗口是您的主窗口。
Tk()
用于为父窗口now
创建子窗口,即,如果您希望主窗口(Toplevel()
)中有子窗口,则将使用{{1} }。因为代码中的多个Tk()
稍后会导致一些错误。
空白窗口实际上是tkinter默认创建的应用程序的根窗口。您可能想要明确,并创建一个tk.Tk()
根,并保留对其的引用。
可以随意刷新并销毁新窗户;只要保持根目录处于活动状态,您的应用程序就会继续存在。
也许是这样的:
import tkinter as tk
def verify():
now = tk.Toplevel(root)
details["U_status"] = variable.get()
txt = f'value is: {details["U_status"]}'
tk.Label(now,text=txt).pack()
now.after(3000,now.destroy)
def status():
tk.OptionMenu(root,variable,*OPTIONS).pack()
tk.Button(root,text="OK",command=verify,relief='flat').pack()
if __name__=='__main__':
OPTIONS = ["Available","Busy","Invisible","Away"]
root = tk.Tk()
variable = tk.StringVar(root)
variable.set(OPTIONS[0])
details = {"U_status": ""}
status()
root.mainloop()