我正在尝试使用 PyQt5 将一个小型 Qt C++ 应用程序移植到 Python,但我现在在最基本的东西上遇到了麻烦。
我使用 pyuic 实用程序将 .ui 文件转换为其相应的 .py 文件,表示对话框的静态定义的 UI 和两个信号/槽对(两个按钮)。确切的错误是“'QDialog'对象没有属性'pushButtonStartClick'”,虽然我理解它所描述的内容,但我不知道如何准确修复它。我什至不确定是否可以在 Ui 类中定义自定义插槽。如果这是真的,那就代表了一个相当大的限制。我在 Windows 计算机上使用 PyQt 5.4 和 Python 2.7。
附加信息 - 简单 tutorial我一直在阅读并尝试模仿。
提前谢谢您。
生成的包含 UI 类的 .py 文件(其中一部分,源 .ui 文件为 here ):
class Ui_NewGameDialog(object):
def setupUi(self, NewGameDialog):
NewGameDialog.setObjectName("NewGameDialog")
NewGameDialog.setWindowModality(QtCore.Qt.ApplicationModal)
NewGameDialog.resize(265, 200)
#
# ...
#
self.retranslateUi(NewGameDialog)
# part where it breaks apart
self.pushButtonStart.clicked.connect(NewGameDialog.pushButtonStartClick)
self.pushButtonCancel.clicked.connect(NewGameDialog.pushButtonCancelClick)
QtCore.QMetaObject.connectSlotsByName(NewGameDialog)
继承它的类:
class NewGameDialog(Ui_NewGameDialog):
def __init__(self, dialog):
Ui_NewGameDialog.__init__(self)
self.setupUi(dialog)
dialog.setFixedSize(dialog.size())
dialog.setWindowFlags(
dialog.windowFlags() ^ QtCore.Qt.WindowContextHelpButtonHint
)
@pyqtSlot(name="pushButtonStartClick")
def pushButtonStartClick(self):
pass
@pyqtSlot(name="pushButtonCancelClick")
def pushButtonCancelClick(self):
pass
初始化:
if __name__ == "__main__":
app = QApplication(sys.argv)
dialog = QtWidgets.QDialog()
ui = NewGameDialog(dialog)
dialog.show()
sys.exit(app.exec_())
最佳答案
我认为 setupUi 方法获取了错误类型的对象,因为 QDialog 没有这些 pushButtonStartClick
和 pushButtonCancelClick
。
class NewGameDialog(QtGui.QDialog, Ui_NewGameDialog):
def __init__(self):
QtGui.QDialog.__init__(self)
Ui_NewGameDialog.__init__(self)
self.setupUi(self)
self.setFixedSize(self.size())
self.setWindowFlags(
self.windowFlags() ^ QtCore.Qt.WindowContextHelpButtonHint
)
@pyqtSlot(name="pushButtonStartClick")
def pushButtonStartClick(self):
pass
@pyqtSlot(name="pushButtonCancelClick")
def pushButtonCancelClick(self):
pass
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
dialog = NewGameDialog()
dialog.show()
sys.exit(app.exec_())
没有多重继承:
class NewGameDialog(QtGui.QDialog):
def __init__(self):
super(NewGameDialog, self).__init__()
self.ui = Ui_NewGameDialog()
self.ui.setupUi(self)
...
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
dialog = NewGameDialog()
关于python - PyQt5 - 无法解析对话框的插槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34845041/