PyQt class inheritance

前端 未结 2 647
小蘑菇
小蘑菇 2021-01-13 12:52

I am having troubles to understand class inheritance with Python/PyQt. I have a MainWindow and a Popup QWidget. I want to interact with the s

相关标签:
2条回答
  • 2021-01-13 13:04

    You need to pass the main window as a parameter to the constructor of MyPopup, try this:

    import sys
    from PyQt4.Qt import *
    
    class MyPopup(QWidget):
        def __init__(self, mainWindow):
            QWidget.__init__(self)
    
            # use the mainWindow passed as parameter
            mainWindow.label1.setText('hello')
    
    
    class MainWindow(QMainWindow):
        def __init__(self, *args):
            QMainWindow.__init__(self, *args)
            self.cw = QWidget(self)
            self.setCentralWidget(self.cw)
            self.btn1 = QPushButton("Click me", self.cw)
            self.btn1.setGeometry(QRect(50, 50, 100, 30))
            self.label1 = QLabel("No Commands running", self.cw)
            self.connect(self.btn1, SIGNAL("clicked()"), self.doit)
            self.w = None
    
        def doit(self):
            self.w = MyPopup(self) #when creating the popup pass in the main window
            self.w.setGeometry(QRect(100, 100, 400, 200))
            self.w.show()
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        myapp = MainWindow()
        myapp.show()
        sys.exit(app.exec_())
    
    0 讨论(0)
  • 2021-01-13 13:27

    This is the prior answer from Alvaro Fuentes, with the minor updates necessary for PyQt5.

    import sys
    from PyQt5.Qt import *
    
    class MyPopup(QWidget):
        def __init__(self, mainwin):
            QWidget.__init__(self)
    
            # I want to change the lable1 of MainWindow
            mainwin.label1.setText('hello')
    
    
    class MainWindow(QMainWindow):
        def __init__(self, *args):
            QMainWindow.__init__(self, *args)
            self.cw = QWidget(self)
            self.setCentralWidget(self.cw)
            self.btn1 = QPushButton("Click me", self.cw)
            self.btn1.setGeometry(QRect(50, 50, 100, 30))
            self.label1 = QLabel("No Commands running", self.cw)
            self.btn1.clicked.connect(self.doit)
            self.w = None
    
        def doit(self):
            self.w = MyPopup(self)
            self.w.setGeometry(QRect(100, 100, 400, 200))
            self.w.show()
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        myapp = MainWindow()
        myapp.show()
        sys.exit(app.exec_())
    
    0 讨论(0)
提交回复
热议问题