Skip to content Skip to sidebar Skip to footer

Pyqt Class Inheritance

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 self.label1 of the MainWindow after the

Solution 1:

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

import sys
from PyQt4.Qt import *

classMyPopup(QWidget):
    def__init__(self, mainWindow):
        QWidget.__init__(self)

        # use the mainWindow passed as parameter
        mainWindow.label1.setText('hello')


classMainWindow(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 = Nonedefdoit(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_())

Solution 2:

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

import sys
from PyQt5.Qt import *

classMyPopup(QWidget):
    def__init__(self, mainwin):
        QWidget.__init__(self)

        # I want to change the lable1 of MainWindow
        mainwin.label1.setText('hello')


classMainWindow(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 = Nonedefdoit(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_())

Post a Comment for "Pyqt Class Inheritance"