使用Qt Designer 5.8和PyQt5:来自PyQt v3的有问题的例子

时间:2017-04-06 09:01:55

标签: python qt pyqt pyqt5 qt-designer

我理解(或多或少)official documentation 页面的内容,除 最终示例之外,其实质上如下(我不在乎)按钮):

from ui_imagedialog import ImageDialog

class MyImageDialog(ImageDialog):
    def __init__(self):
      super(MyImageDialog, self).__init__()

    # Connect up the buttons.
      self.okButton.clicked.connect(self.accept)

问题:我有点试图了解如何使这个代码段工作。它出现错误:'cannon import name ImageDialog'。

我应该从上述文档页面的第一个示例添加什么来使此代码显示对话窗口?

我尝试了什么: 我已经使用名为ui_imagedialog.py的生成的Python代码创建了该文件。它具有以下内容,显然可以单独使用:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_ImageDialog(object):
    def setupUi(self, ImageDialog):
        ImageDialog.setObjectName("ImageDialog")
        ImageDialog.resize(303, 204)
        self.pushButton = QtWidgets.QPushButton(ImageDialog)
        self.pushButton.setGeometry(QtCore.QRect(200, 160, 75, 23))
        self.pushButton.setObjectName("pushButton")

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

    def retranslateUi(self, ImageDialog):
        _translate = QtCore.QCoreApplication.translate
        ImageDialog.setWindowTitle(_translate("ImageDialog", "Dialog"))
        self.pushButton.setText(_translate("ImageDialog", "PushButton"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    ImageDialog = QtWidgets.QDialog()
    ui = Ui_ImageDialog()
    ui.setupUi(ImageDialog)
    ImageDialog.show()
    sys.exit(app.exec_())

感谢任何建设性的帮助。

1 个答案:

答案 0 :(得分:1)

Qt Designer用于创建图形部分,但不用于逻辑,您必须根据您在设计中使用的窗口小部件创建逻辑部分。在你的情况下,我认为它是QDialog

from ui_imagedialog import Ui_ImageDialog

from PyQt5 import QtCore, QtGui, QtWidgets

class ImageDialog(QtWidgets.QDialog, Ui_ImageDialog):
    def __init__(self, parent=None):
      super(ImageDialog, self).__init__(parent=parent)
      self.setupUi(self)

      self.pushButton.clicked.connect(self.accept)

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = ImageDialog()
    w.show()
    sys.exit(app.exec_())

观察:ui_imagedialog.py文件中没有ImageDialog类,只有Ui_ImageDialog类,所以我生成了错误。同样在设计中,该按钮被称为self.pushButton,,因此您无法将其称为self.okButton