子 class 和父 class 之间的 PyQt 连接信号

PyQt connecting signal between sub class and parent class

我想创建一个简单的按钮来触发一些任务。我正在使用 PyQt 设计器构建 GUI 并尝试遵循不直接编辑 UI 模块但将我的自定义代码放在单独的模块中然后继承所有 GUI 方面的建议.

这是我的GUI class:

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(507, 424)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(220, 350, 75, 23))
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)


        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", "PushButton"))

这是我的自定义模块:

from PyQt5 import QtCore,QtGui,QtWidgets

# main.py is the GUI module
import main 


class mainWindow(mainTest.Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        # I want click this button and print something
        self.pushButton.clicked.connect(self.connectionTest)


    def connectionTest(self):
        print('connected')

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

现在我的问题是当我 运行 模块并单击按钮时,它没有触发打印方法。但是,如果我直接在 GUI 模块中添加我的自定义代码,它将起作用。我认为继承有问题,我确实对 that.So 有什么问题?

感到有点困惑

您根本没有使用 mainWindow subclass,即使您使用了,它也应该 从 QMainWindow 继承。

class MainWindow(<b>QtWidgets.QMainWindow</b>, mainTest.Ui_MainWindow):
    def __init__(self):
        # ...

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    <b>window = MainWindow()
    window.show()</b>
    sys.exit(app.exec_())

请注意我为 MainWindow class 更改的 大小写:用大写名称命名所有 class 是标准惯例,因为只有变量和函数应该有小写的名称(阅读官方 Style Guide for Python Code)。