子 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)。
我想创建一个简单的按钮来触发一些任务。我正在使用 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)。