Skip to main content
 首页 » 编程设计

python之单击 "Exit"时 Tkinter 窗口没有响应

2025年05月04日9birdshome

我使用 Python、Tkinter 创建了一个 GUI。一切似乎都很好。我在“菜单”选项卡中添加了几个选项。在文件部分,我添加了一个功能,通过单击退出按钮(虽然不是按钮,而是一个菜单选项)来退出 GUI。这是我编写的代码。

from tkinter import * 
from tkinter import filedialog, RIGHT 
 
class Filedialog: 
    def directory(self): 
        content = filedialog.askdirectory() 
        return content 
 
 
 
class Main(Frame): 
 
 
    def __init__(self): 
        self.opening_times = 0 
        self.current_image = 0 
        self.images = [] 
        self.root = Tk() 
        self.root.title("Y") 
        self.root.configure(bg='pale turquoise') 
        self.root.geometry("800x800") 
        self.frame = Frame(self.root) 
        self.frame.pack(side=RIGHT) 
        self.frame = Frame.__init__(self, self.root) 
        self.widgets() 
        self.root.mainloop() 
 
 
    def widgets(self): 
 
        self.menu = Menu(self.root) 
        self.root.config(menu=self.menu) 
        self.filemenu = Menu(self.menu, tearoff=False) 
        self.menu.add_cascade(label="File", menu=self.filemenu) 
        self.filemenu.add_separator() 
        self.filemenu.add_command(label="Save") 
        self.filemenu.add_separator() 
        self.filemenu.add_command(label="Exit", command=self.onExit) 
        #self.editmenu = Menu(self.menu, tearoff=0) 
        #self.menu.add_cascade(label='Edit', menu=self.editmenu) 
        #self.editmenu.add_command(label="Undo") 
        #self.editmenu.add_command(label="Redo") 
 
 
    def onExit(self): 
        self.root.quit() 
 
 
 
if __name__ == "__main__": 
    Main() 

我快成功了。但是当我点击退出时,问题就出现了。该函数执行它必须执行的操作。但是 GUI 窗口没有关闭,它也卡住在那里。直到我在外部强制关闭窗口之前,根本没有任何反应。

我也试过:

self.quit() 

/

self.exit() 

但响应与 GUI 卡住一样,不让我进行任何其他事件。我必须关闭完整的程序才能再次获得访问权限。

至少我没有收到错误,知道出了什么问题。

请帮我找出问题所在/解决这个问题。

感谢您的宝贵时间。

请您参考如下方法:

让我修改你的代码

from sys import exit 
from tkinter import * 
from tkinter import filedialog, RIGHT 
 
class Filedialog: 
    def directory(self): 
        content = filedialog.askdirectory() 
        return content 
 
 
 
class Main(Frame): 
 
 
    def __init__(self): 
        self.opening_times = 0 
        self.current_image = 0 
        self.images = [] 
        self.root = Tk() 
        self.root.title("Y") 
        self.root.configure(bg='pale turquoise') 
        self.root.geometry("800x800") 
        self.frame = Frame(self.root) 
        self.frame.pack(side=RIGHT) 
        self.frame = Frame.__init__(self, self.root) 
        self.widgets() 
        self.root.mainloop() 
 
 
    def widgets(self): 
 
        self.menu = Menu(self.root) 
        self.root.config(menu=self.menu) 
        self.filemenu = Menu(self.menu, tearoff=False) 
        self.menu.add_cascade(label="File", menu=self.filemenu) 
        self.filemenu.add_separator() 
        self.filemenu.add_command(label="Save") 
        self.filemenu.add_separator() 
        self.filemenu.add_command(label="Exit", command=self.onExit) 
        #self.editmenu = Menu(self.menu, tearoff=0) 
        #self.menu.add_cascade(label='Edit', menu=self.editmenu) 
        #self.editmenu.add_command(label="Undo") 
        #self.editmenu.add_command(label="Redo") 
 
 
    def onExit(self): 
        self.root.destroy() 
        exit() 
 
 
 
if __name__ == "__main__": 
    Main() 
 

您需要使用 destroy() 而不是 quit() 并且您应该使用 exit 从控制台退出