Ошибка атрибута pyqt при попытке испускать целочисленный сигнал - PullRequest
0 голосов
/ 28 июня 2018

Это, наверное, глупая ошибка где-то с моей стороны; когда я пытаюсь реализовать этот код многопоточности для обновления уровня индикатора выполнения графического интерфейса PyQt5, я получаю следующую ошибку:

Traceback (most recent call last):
  File "threadtest.py", line 62, in <module>
    app=MainWindow()
  File "threadtest.py", line 35, in __init__
    self.threadclass = ThreadClass()
  File "threadtest.py", line 49, in __init__
    self.getLevels()
  File "threadtest.py", line 53, in getLevels
    self.battery.emit()
AttributeError: 'int' object has no attribute 'emit'
[1:1:0100/000000.677780:ERROR:broker_posix.cc(43)] Invalid node channel message

код:

class MainWindow(QtWidgets.QMainWindow, gs.Ui_MainWindow):
    def __init__(self, parent = None):
        super(MainWindow, self).__init__(parent = parent)

        self.setupUi(self)
        self.threadclass = ThreadClass()
        self.threadclass.start()
        self.threadclass.battery.connect(self.updateLevels)

    def updateLevels(self, val):
        self.battery1bar.setValue(val)    

class ThreadClass(QtCore.QThread):
    battery = pyqtSignal(int)
    def __init__(self, parent = None):
        super(ThreadClass, self).__init__(parent = parent)

        self.getLevels()

    def getLevels(self):
        self.battery=7
        self.battery.emit()

gs.Ui_MainWindow.setupUi - это автоматически сгенерированный пользовательский интерфейс из qt designer. Со временем getLevels будет динамически извлекать уровни заряда батареи.

1 Ответ

0 голосов
/ 28 июня 2018

Вы скрываете сигнал, так как присваиваете ему значение:

self.battery = 7

Что вам нужно сделать, это передать это значение в качестве параметра в emit():

def getLevels(self):
    self.battery.emit(7)
...