Динамическое обновление QLabel — pyqt

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

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

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

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

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

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

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

Кто-нибудь может помочь?


person jgv115    schedule 13.01.2017    source источник


Ответы (1)


Я предполагаю, что вы, вероятно, поместили все задачи (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()
person Shane    schedule 13.01.2017