为什么我在 Tkinter 中得到一个额外的空 window?
Why do I get an extra empty window in 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()
虽然 运行 上面的代码与 window(我想要的)一起出现了另一个空的 window。谁能找出这段代码中的错误?
这里的now = Toplevel()
应该换成Tk()
,比如:
now = Tk()
当您使用 Toplevel()
时,会在后台生成 Tk()
window,如果它尚未生成(您的情况),这就是您得到空白的原因新 window。实际上那个空白 window 是你的主要 window.
Toplevel()
用于为父 Tk()
windows 创建子 windows,即,如果你想在你的主 window(now
),你会用到Toplevel()
。因为你的代码中不止一个 Tk()
会导致后面出现一些错误。
空白 window 实际上是 tkinter 默认创建的应用程序的根目录 window。您可能想要明确,并创建一个 tk.Tk()
根,并保留对它的引用。
新的 windows 可以随意生成和销毁;只要您保持 root 处于活动状态,您的应用就会继续存在。
也许是这样的:
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()
这是我的代码:
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()
虽然 运行 上面的代码与 window(我想要的)一起出现了另一个空的 window。谁能找出这段代码中的错误?
这里的now = Toplevel()
应该换成Tk()
,比如:
now = Tk()
当您使用 Toplevel()
时,会在后台生成 Tk()
window,如果它尚未生成(您的情况),这就是您得到空白的原因新 window。实际上那个空白 window 是你的主要 window.
Toplevel()
用于为父 Tk()
windows 创建子 windows,即,如果你想在你的主 window(now
),你会用到Toplevel()
。因为你的代码中不止一个 Tk()
会导致后面出现一些错误。
空白 window 实际上是 tkinter 默认创建的应用程序的根目录 window。您可能想要明确,并创建一个 tk.Tk()
根,并保留对它的引用。
新的 windows 可以随意生成和销毁;只要您保持 root 处于活动状态,您的应用就会继续存在。
也许是这样的:
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()