用tkinter 写了一个窗口的程序,然后这个窗口的程序的按钮指向了另一个函数,我想在点击这个按钮的同时另一个函数开始执行,然后本函数的窗口自动关闭。
由于本窗口有三个类似按钮,用在被指向函数中写destroy()的方法行不通,(会提示不能被关闭因为已经destroyed ),且伴随空白窗口出现。
请问如何解决?
python 如何执行下一个函数时自动停止现在的函数?
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
配电网和matlab 2023-05-24 21:18关注以下内容引用自GPT:
可以在被指向函数中使用Top-level窗口来代替本窗口,并在点击按钮时直接销毁本窗口,同时启动另一个线程来执行需要的函数。具体实现可以参考以下示例代码:import tkinter as tk import threading class MainFrame(tk.Frame): def __init__(self, master=None): super().__init__(master) self.master = master self.create_widgets() def create_widgets(self): self.button1 = tk.Button(self, text="按钮1", command=self.button1_clicked) self.button1.pack() self.button2 = tk.Button(self, text="按钮2", command=self.button2_clicked) self.button2.pack() self.button3 = tk.Button(self, text="按钮3", command=self.button3_clicked) self.button3.pack() def button1_clicked(self): self.start_function_thread(self.function1) self.master.destroy() def button2_clicked(self): self.start_function_thread(self.function2) self.master.destroy() def button3_clicked(self): self.start_function_thread(self.function3) self.master.destroy() def start_function_thread(self, function): thread = threading.Thread(target=function) thread.start() def function1(self): print("执行函数1") def function2(self): print("执行函数2") def function3(self): print("执行函数3") root = tk.Tk() app = MainFrame(master=root) app.pack() app.mainloop()这里创建了一个MainFrame类作为主窗口,其中包含三个按钮和三个被指向的函数。在点击按钮时,先用
start_function_thread()方法开启一个新线程来执行相应的函数,然后调用master.destroy()方法销毁本窗口。这样可以避免空白窗口出现以及不能使用destroy()方法的问题。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报