如何解决为什么在Tkinter中会出现一个额外的空白窗口?
这是我的代码:
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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。