2015-01-31 2 views
2

Не хочу, чтобы мой графический интерфейс зависал, я решил использовать поток для операции с файлом. В настоящее время я использую thread.start_new_thread(self.openFile, (filepath, self.openedFile)), чтобы сделать это, с self.openedFile, являющимся моим методом обратного вызова. Внутри self.openFile он просто вызывается с использованием callback(success).Python: Выполнить метод обратного вызова в основном потоке

Но, к сожалению, я не мог понять, как выполнить мой обратный вызов в основном потоке вместо вновь созданного. Это необходимо, так как GUI не может быть изменен из другого потока.

Я очень ценю вашу помощь!

ответ

4

Поток, владеющий GUI, должен периодически проверять экземпляр Queue.Queue, на который другие потоки могут помещать рабочие запросы (например, функцию обратного вызова и аргументы для нее).

Как легко или сложно вставлять такие проверки в основной цикл графического интерфейса пользователя, на 100% зависит от того, какой графический интерфейс вы используете.

Например, если вы используете Tkinter, метод виджетов after позволяет выполнять такие периодические проверки, как описано, например, в Run an infinite loop in the backgroung in Tkinter.

+0

Спасибо! Знаете ли вы эквивалент PyQT для Tkinter? Я не мог найти его в документации. – Stoeffn

+1

Я считаю, что QTimer - это то, что вы бы использовали, http://srinikom.github.io/pyside-docs/PySide/QtCore/QTimer.html. –

Смежные вопросы