2017-01-13 2 views
1

У меня проблема. Я пытаюсь сделать программное обеспечение для мониторинга, которое контролирует несколько напряжений и другие вещи. Я использую QT 4 Designer и pyqt для создания моего пользовательского интерфейса.Динамическое обновление QLabel - pyqt

Мой код структурирована следующим образом (каждый из них представляет собой модуль):

Нажмите кнопку Go ---> начать ступицу ----> подключить к устройству и возвращает массив из информации --- > используйте информацию и отобразите соответствующие значения для различных QLabels.

Я устанавливаю QLabels, используя self.label.setText (данные здесь).

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

В качестве теста я вызывал функцию 3-4 раза подряд с помощью time.sleep (4) между ними. Я обнаружил, что пользовательский интерфейс обновляется только ПОСЛЕ последнего вызова для запуска концентратора.

Я уверен, что проблема в том, что пользовательский интерфейс обновляется только тогда, когда ничего не обрабатывается. Но я не уверен, как заставить все QLabels обновляться после каждой итерации. Я пробовал self.label.repaint(), но ничего не сделал.

Может ли кто-нибудь помочь?

ответ

0

Что я предполагаю, так это то, что вы, вероятно, поставили все задачи (3-4-часовой вызов модуля-концентратора, time.sleep и QLabels setText) в эту функцию обновления пользовательского интерфейса, вместо этого вы должны обернуть долговременную задачи в отдельную нить:

import threading 

def LongRunningTask(self): 
    for i in range(4): 
     hub_module_call   
     time.sleep(4) 
     self.label.setText 

def OnButton(self, event): 
    # Click go button 
    thread = threading.Thread(target=self.LongRunningTask) 
    thread.start() 
Смежные вопросы