(Python Tkinter) Нажмите кнопку, затем запускайте различные функции одну за другой и отображайте результаты в реальном времени в моем графическом интерфейсе. - PullRequest
0 голосов
/ 28 мая 2018

следующая проблема.Я создал графический интерфейс Tkinter.Есть кнопка, текстовый виджет и метка, которая показывает мой статус прогресса.Есть функция, которая очищает текстовый виджет, функция, которая пишет в текстовом виджете, и функция, которая обновляет статус прогресса.

Сначала метка состояния говорит: «-» Когда я нажимаю кнопку.Я хочу, чтобы на этикетке было написано «Работа в процессе», пока работает функция, которая пишет в текстовом виджете.после того, как текст отображается в виджете (занимает некоторое время), статус должен сказать: «готово».

Проблема в том, что в данный момент я нажимаю кнопку.через несколько секунд текст отображается в текстовом виджете, и статус просто переключается с «-» на «готово».

def show_working_status(self):
    self.status["text"] = "Work in progress"

def show_done_status(self):
    self.status["text"] = "Done"

def cleartext(self):
    .......

def write(self, columns)
    .......


def write_text(self, columns)
    self.cleartext()
    self.show_working_status()
    self.write(columns)
    self.show_done_status()

Надеюсь, я сделал свою проблему максимально понятной :)

Привет, Том

1 Ответ

0 голосов
/ 28 мая 2018

Вы должны использовать многопоточность:

import threading

t1 = threading.Thread(target=your_first_function)
t1.start()
t2 = threading.Thread(target=your_second_function)
t2.start()
t3 = threading.Thread(target=your_third_function)
t3.start()

Это позволит функциям your_first_function, your_second_function и your_third_function работать параллельно.Это делает так, чтобы ваше окно не зависало, поскольку основной цикл Tkinter - это просто бесконечный цикл while.

Вы также можете создать одну функцию, которая будет вызывать все ваши по порядку.

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