如何关闭tkinter框架中当前正在运行的功能?

时间:2019-03-27 16:11:31

标签: python tkinter

单击tkinter frame后,我有一个 export 按钮,单击该按钮会将一些数据导出到CSV文件。我在同一帧中也有一个 logout 按钮。我在 logout 按钮上添加了一个功能,以带我主frame并杀死当前帧。

现在,当我单击 export 按钮时,将需要一分钟才能完成。在此之前,如果单击登出按钮,它将带我进入主frame。但是导出过程正在落后并且不会被杀死。我仍在获取csv文件。

一旦我单击注销按钮,我也想终止正在运行的导出function。我该怎么办?

我使用了self.destroy(),但是导出功能没有被终止。 下面的几行是我的代码的一部分,主要代码有400多行。 PageOne是我具有 export Logout 按钮的框架。

class PageOne(ttk.Frame):
    def __init__(self, master):
        ttk.Frame.__init__(self, master, height=800, width=1400)

        self.logOut_btn = ttk.Button(self, text="Logout", command=self.logOut)
        self.logOut_btn.place(x=1280, y=15)
        self.export = ttk.Button(self, text="Export", command=self.export_cubeData)
        self.export.place(x=620, y=y1+50)
        self.exportPath = ttk.Label(self, text="Export Path", font='Helvetica 12 bold')
        self.exportPath.place(x=430, y=y1+100)
        self.entry_exportPath = ttk.Entry(self)
        self.entry_exportPath.place(x=540, y=y1+100, width=450)
        final_df = pd.Dataframe()


    def logOut(self):
        self.destroy()
        self.master.switch_frame(StartPage)
        with TM1Service(**config['TM1']) as tm1:
            tm1.logout()


    def setFlag(self):
        self.flag = 1

    def export_cubeData(self):
        exportPath = self.entry_exportPath.get()
        for i in range(10):
            self.update()
            final_df.to_csv(exportPath)

1 个答案:

答案 0 :(得分:0)

我曾经遇到过同样的问题。我的解决方案只是让我的任务在单独的线程上运行,我将其标记为deamon。这样做是当我销毁所有其他线程(读取window.destroy)时,仅剩下此任务线程,并且由于将其设置为守护进程线程,因此程序成功终止。

编辑:

如果您不想完全结束Python程序,则应该查看this answer