m0_68500628 2023-05-24 20:48 采纳率: 92.3%
浏览 40
已结题

python 如何执行下一个函数时自动停止现在的函数?

用tkinter 写了一个窗口的程序,然后这个窗口的程序的按钮指向了另一个函数,我想在点击这个按钮的同时另一个函数开始执行,然后本函数的窗口自动关闭。
由于本窗口有三个类似按钮,用在被指向函数中写destroy()的方法行不通,(会提示不能被关闭因为已经destroyed ),且伴随空白窗口出现。
请问如何解决?

  • 写回答

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()方法的问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月25日
  • 已采纳回答 5月25日
  • 创建了问题 5月24日

悬赏问题

  • ¥50 我在一个购物网站的排队系统排队,这个排队到号后重新定向到目标网站进行购物,但是有技术牛通过技术方法直接跳过排队系统进入目标网址购物,有没有什么软件或者脚本可以用
  • ¥15 ios可以实现ymodem-1k协议 1024字节传输吗?
  • ¥300 寻抓云闪付tn组成网页付款链接
  • ¥15 请问Ubuntu要怎么安装chrome呀?
  • ¥15 视频编码 十六进制问题
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题