Skip to main content
 首页 » 编程设计

Python:tkinter askyesno 方法打开一个空窗口

2025年05月04日16www_RR

我用它来从用户那里得到是/否,但它会打开一个空窗口:

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 实例,并且您的程序应该设计为在该窗口被销毁时退出。