![](/img/trans.png)
[英]Python and tkinter: NameError: name 'askyesno' is not defined
[英]Python: tkinter askyesno method opens an empty window
我用它来从用户获得是/否,但它打开一个空窗口:
from Tkinter import *
from tkMessageBox import *
if askyesno('Verify', 'Really quit?'):
print "ok"
而且这个空的窗户不会消失。 我该如何预防?
这行不通:
Tk().withdraw()
showinfo('OK', 'Select month')
print "line 677"
root = Tk()
root.title("Report month")
months = ["Jan","Feb","Mar"]
sel_list = []
print "line 682"
def get_sel():
sel_list.append(Lb1.curselection())
root.destroy()
def cancel():
root.destroy()
B = Button(root, text ="OK", command = get_sel)
C = Button(root, text ="Cancel", command = cancel)
Lb1 = Listbox(root, selectmode=SINGLE)
for i,j in enumerate(months):
Lb1.insert(i,j)
Lb1.pack()
B.pack()
C.pack()
print "line 702"
root.mainloop()
for i in sel_list[0]:
print months[int(i)]
return months[int(sel_list[0][0])]
在创建任何其他小部件,窗口或对话框之前,Tkinter要求存在一个根窗口。 如果您尝试在创建根窗口之前创建对话框,则tkinter将自动为您创建根窗口。
解决方案是显式创建一个根窗口,然后在不希望它可见的情况下将其撤出。
您应该始终只创建一个Tk
实例,并且应该将您的程序设计为在销毁该窗口时退出。
显式创建根窗口,然后退出。
from Tkinter import *
from tkMessageBox import *
Tk().withdraw()
askyesno('Verify', 'Really quit?')
不是很漂亮的解决方案,但是可以。
更新
不要创建第二个Tk窗口。
from Tkinter import *
from tkMessageBox import *
root = Tk()
root.withdraw()
showinfo('OK', 'Please choose')
root.deiconify()
# Do not create another Tk window. reuse root.
root.title("Report month")
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.