2013-11-18 2 views
1

Я использую Python 2.4.3 и Qt Designer для создания графического интерфейса. Когда я нажимаю одну из своих кнопок, она отключается и выполняет несколько последовательных процессов. После каждого процесса я хочу обновить пользователя, выведя текст в графический интерфейс, однако, этот текст не появляется, пока я не завершил все мои процессы. Я видел другие вопросы по этой же проблеме, где рекомендуется processEvents(). Тупой вопрос, какой модуль мне нужно импортировать, чтобы получить функцию processEvents(), которая сделает эту работу, или есть ли для Python 2.4.3? Я работаю на компьютере Red Hat Linux. Заранее спасибо.Прерывание процесса в Qt для обновления GUI

+2

Последовательные процессы должны выполняться в другом потоке; 'processEvents()' является обходным в этом случае. –

+0

вам лучше было бы расщепить каждый процесс и заставить их запускать друг друга через слоты, чтобы цикл событий мог запускаться между ними или использовать другой поток, который сигнализирует о потоке gui. –

+0

Ratchet Freak - мне нравится эта идея. Я просто попробовал, но я не мог понять, как соединить слоты вместе; поэтому я создал 3 слота и вызвал их все, чтобы произойти, когда была нажата кнопка запуска. К счастью, он выполнил все три в том порядке, в котором они указаны в QT Designer. Однако он не обновлял графический интерфейс до тех пор, пока последний не был закончен, поэтому он не работал. Поэтому, я думаю, мне все равно нужно знать, как запустить слот, как только он закончит. – user3005501

ответ

0

Я работаю в C++, то этот ответ не готов к использованию, но я решил моя похожая проблема крафта маленький помощник для вызова из цикла

#include <QTimer> 
#include <QEventLoop> 

inline void do_events(int delay = 1) { 
    QEventLoop lp; 
    QTimer::singleShot(delay, &lp, SLOT(quit())); 
    lp.exec(); 
} 

это позволяет Qt для обработки его события. Его название опасно ностальгия VB раза ...

0

Qt.qApp или QApplication.instance() дает QApplication объекта, который имеет processEvents, что вы можете позвонить.

+0

СПАСИБО. Это работает. Я поставил «import qt» в верхней части подпрограммы, а затем поместил «qt.qApp.processEvents()» после каждого из моих элементов, которые я хотел распечатать. – user3005501

+0

@ user3005501: Рад, что это помогло! Здесь, в Stack Overflow, мы ожидаем, что вы пометите ответ как принятый, если он решит вашу проблему, и ответы на голосование, которые вы считаете полезными и информативными. – Macke

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