我使用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冻结相同,并且不允许我执行任何其他活动。我必须关闭完整程序才能再次访问。
我至少没有得到错误,要知道出了什么问题。
请帮助我找出问题所在/解决此问题。
谢谢您的时间。
答案 0 :(得分:3)
让我更正您的代码
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
从控制台退出
答案 1 :(得分:3)
您必须使用的方法是destroy
。例如:
def onExit(self):
self.root.destroy()
答案 2 :(得分:2)
使用destroy()
方法代替quit
。
答案 3 :(得分:0)
您可以使用方法 tk.destroy()
关闭窗口。内置函数 exit()
和 quit()
关闭 Python 控制台。
工作示例
from tkinter import *
tk = Tk()
tk.title("Closing window demonstration")
def close_window():
tk.destroy()
quit = Button(tk, text = "Quit", command = close_window)
quit.pack()
tk.mainloop()