0

Got stuck with accessing to outer class functions, it'll be great to receive some advice or solution how can i get access to another class method in Python.

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):

    def setupUi(self, MainWindow):

        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(480, 640)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(320, 520, 114, 32))
        self.pushButton.setObjectName("pushButton")
        #self.pushButton.clicked.connect(self.btnCheck)

        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(190, 520, 114, 32))
        self.pushButton_2.setObjectName("pushButton_2")

        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(40, 150, 411, 311))
        font = QtGui.QFont()
        font.setPointSize(66)
        self.label.setFont(font)
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setObjectName("label")

        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "PushButton1"))
        self.pushButton_2.setText(_translate("MainWindow", "PushButton2"))
        self.label.setText(_translate("MainWindow", "TextLabel"))

class Ui_Support(object):

    def __init__(self):
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

    def btnCheck(self):
        self.ui.label.setText(a)

    def closeBtn(self):
        QtCore.QCoreApplication.instance().quit()

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

This is my test form, i'd like to call button event from another class, it's easy to call it from inner class function, but it's better to contain multiple functions in another class, thank you for the reply!

eyllanesc
  • 235,170
  • 19
  • 170
  • 241
Alex Shaw
  • 13
  • 5

1 Answers1

2

The setupUi() function requires an object of type QMainWindow, in your case the optimum would be that Ui_Support should inherit from QMainWindow.

class Ui_Support(QtWidgets.QMainWindow):

    def __init__(self):
        QtWidgets.QMainWindow.__init__(self, parent=None)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.pushButton.clicked.connect(self.btnCheck)

    def btnCheck(self):
        self.ui.label.setText("a")

    def closeBtn(self):
        QtCore.QCoreApplication.instance().quit()


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = Ui_Support()
    MainWindow.show()
    sys.exit(app.exec_())
eyllanesc
  • 235,170
  • 19
  • 170
  • 241