Skip to content

[问题]为什么pyqt5中使用多继承时候会报错? #60

@wangyexiang

Description

@wangyexiang

如问题所述,代码如下:

from threading import Thread
from time import sleep

from PyQt5.QtCore import QObject, pyqtSignal, QTimer, Qt
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QProgressBar, QApplication

class A:
    def __init__(self):
        print('I am A')

class _Signals(A, QObject):
    updateProgress = pyqtSignal(int)
    def __init__(self):
        super().__init__()   #如果采用这种初始化方式就会报错:RuntimeError: super-class __init__() of type _Signals was never called

        A.__init__(self)#如果采用这种初始化方式不会报任何错误,为什么呢?
        QObject.__init__(self)

        
Signals = _Signals()

class UpdateThread(Thread):

    def run(self):
        self.i = 0
        for i in range(101):
            self.i += 1
            Signals.updateProgress.emit(i)
            # print(f'current value is: {i}')
            sleep(1)
        self.i = 0
        Signals.updateProgress.emit(i)


class Window(QWidget):

    def __init__(self, *args, **kwargs):
        super(Window, self).__init__(*args, **kwargs)
        self.resize(400, 400)
        layout = QVBoxLayout(self)
        self.progressBar = QProgressBar(self)
        layout.addWidget(self.progressBar)
        Signals.updateProgress.connect(
            self.updatep, type=Qt.QueuedConnection)

        QTimer.singleShot(2000, self.doStart)

    def updatep(self, i):
        self.progressBar.setValue(i)
        QApplication.processEvents()

    def doStart(self):
        self.updateThread = UpdateThread(daemon=True)
        self.updateThread.start()
        

if __name__ == '__main__':
    import sys
    from PyQt5.QtWidgets import QApplication
    app = QApplication(sys.argv)
    w = Window()
    w.show()
    sys.exit(app.exec_())

Metadata

Metadata

Assignees

No one assigned

    Labels

    新手问题一些基础语法和api问题

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions