Как убить работающие в данный момент функции в кадре tkinter при его закрытии? - PullRequest
1 голос
/ 27 марта 2019

У меня есть кнопка export в tkinter frame, когда я нажимаю, она экспортирует некоторые данные в файл CSV.У меня также есть кнопка logout в том же кадре.Я добавил функцию - кнопку logout , чтобы взять меня основным frame и убить текущий кадр.

Теперь, когда я нажимаю кнопку export , это займетминута для завершения.Перед этим, если я нажму кнопку logout , я перейду на главную frame.Но процесс экспорта отстает и не убивается.Я все еще получаю файл csv.

После того, как я нажму кнопку logout , я также хочу убить запущенный экспорт 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 голосов
/ 27 марта 2019

Однажды я столкнулся с той же проблемой. Моим решением было просто запустить задачу в отдельном потоке, который я пометил как deamon . Это привело к тому, что когда я уничтожил все остальные потоки (читай window.destroy), остался только этот поток задач, и, поскольку он был задан как поток deamon, программа была успешно завершена.

Редактировать:

Вам следует посмотреть этот ответ , если вы не хотите полностью завершать свою программу Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...