Tkinter-为什么我必须在窗口关闭前单击十字2次

Tkinter-为什么我必须在窗口关闭前单击十字2次,tkinter,toplevel,tkmessagebox,Tkinter,Toplevel,Tkmessagebox,当我创建子窗口(顶级)时,我不能一次单击就关闭主窗口。我必须单击交叉键并确定我调用函数的次数(+1): import tkMessageBox from Tkinter import * def cross(): if tkMessageBox.askokcancel(u"Quit ATTA Convertor ?", "Are you sure you want to close the window ?"): mainwin.quit() def about()

当我创建
子窗口(顶级)
时,我不能一次单击就关闭主窗口。我必须单击交叉键并确定我调用函数的次数(+1):

import tkMessageBox
from Tkinter import *


def cross():
    if tkMessageBox.askokcancel(u"Quit ATTA Convertor ?", "Are you sure you want to close the window ?"):
        mainwin.quit()

def about():
    subwin = Toplevel(mainwin)
    subwin.mainloop()

mainwin = Tk()
mainwin.protocol("WM_DELETE_WINDOW", cross)

mainMenu = Menu(mainwin)
mainMenu.add_command(label="about...", command=about)
mainwin.config(menu=mainMenu)

mainwin.mainloop()

这是因为您调用了
mainloop()
两次。删除对subwin.mainloop()的调用,您不需要它。正确的tkinter程序应该只调用一次
mainloop()

您正在运行两个mainloop事件。您应该删除
about()
方法中的一个

def about():
    subwin = Toplevel(mainwin)
    #subwin.mainloop() <- Remove this
def about():
subwin=顶级(mainwin)
#subwin.mainloop()