python:Gui错误消息

python:Gui错误消息,python,pyside,Python,Pyside,我尝试学习GUI实现,并将ui文件包含到python脚本中: from PySide.QtGui import * import sys import MultiTool_widget_ui '''class MainDialog (QDialog, MultiTool_widget_ui.Ui_Form): def __init__(self): self.setupUi(MainDialog)''' app = QApplication(sys.argv) w =

我尝试学习GUI实现,并将ui文件包含到python脚本中:

from PySide.QtGui import *
import sys
import MultiTool_widget_ui

'''class MainDialog (QDialog, MultiTool_widget_ui.Ui_Form):
    def __init__(self):
        self.setupUi(MainDialog)'''

app = QApplication(sys.argv)
w = MultiTool_widget_ui.Ui_Form()
#w = MainDialog()
w.setupUi(QDialog)
w.show()
app.exec_()
执行时,我收到以下错误消息:

回溯(最近一次调用上次):文件 “C:\Users\jhofmann\workspace\Testumgebung\GUI.py”,第17行,在 w、 setupUi(QDialog)文件“C:\Users\jhofmann\workspace\Testumgebung\MultiTool\u widget\u ui.py”, 第14行,在setupUi中 Form.setObjectName(“Form”)类型错误:描述符“setObjectName”需要“PySide.QtCore.QObject”对象,但收到了“str”

在ui文件的“setupUi”-方法中指向此代码行:

from PySide import QtCore, QtGui

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form") <--HERE!
        Form.resize(400, 300)
        self.lcdNumber = QtGui.QLCDNumber(Form)
        self.lcdNumber.setGeometry(QtCore.QRect(0, 110, 64, 23))
        self.lcdNumber.setObjectName("lcdNumber")
        self.pushButton = QtGui.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(70, 110, 75, 23))
        self.pushButton.setObjectName("pushButton")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)
从PySide导入QtCore、QtGui
类Ui_表单(对象):
def setupUi(自我,表格):

Form.setObjectName(“Form”)您正试图将一个类对象传递给
setupUi
,而它需要该类的实例。请尝试以下方法:

from PySide.QtGui import *
import sys
import MultiTool_widget_ui

class MainDialog (QDialog, MultiTool_widget_ui.Ui_Form):
    def __init__(self):
        super(MainDialog, self).__init__()
        self.setupUi(self)

app = QApplication(sys.argv)
w = MainDialog()
w.show()
app.exec_()
注意:使用上述多重继承方法,Qt设计器中定义的所有小部件最终都会成为顶级小部件的属性。因此,如果您在Qt Designer中添加了一个名为
button
的按钮,您可以像这样将插槽连接到它:

class MainDialog (QDialog, MultiTool_widget_ui.Ui_Form):
    def __init__(self):
        ...
        self.pushButton.clicked.connect(self.handleButton)

    def handleButton(self):
        print('Hello World')

您正试图将一个类对象传递给
setupUi
,但它需要该类的实例。请尝试以下方法:

from PySide.QtGui import *
import sys
import MultiTool_widget_ui

class MainDialog (QDialog, MultiTool_widget_ui.Ui_Form):
    def __init__(self):
        super(MainDialog, self).__init__()
        self.setupUi(self)

app = QApplication(sys.argv)
w = MainDialog()
w.show()
app.exec_()
注意:使用上述多重继承方法,Qt设计器中定义的所有小部件最终都会成为顶级小部件的属性。因此,如果您在Qt Designer中添加了一个名为
button
的按钮,您可以像这样将插槽连接到它:

class MainDialog (QDialog, MultiTool_widget_ui.Ui_Form):
    def __init__(self):
        ...
        self.pushButton.clicked.connect(self.handleButton)

    def handleButton(self):
        print('Hello World')

请显示完整的错误消息回溯,并指出上面代码中它标记的行。我编辑了我的问题。你正在关注的教程的URL是什么?QDialog
来自哪里?它似乎认为这是一根弦。您是否正确地获取并实例化了它?@Garrethyde请显示完整的错误消息回溯,并指出上面代码中它标记的行。我编辑了我的问题。您正在关注的教程的URL是什么?QDialog来自哪里?它似乎认为这是一根弦。你是否恰当地获取和实例化了它?@Garrethyde好的,它缺少了那个超级链接。由于我是面向对象编程的新手,我必须学会这一点。在教程中没有解释“super”的用途,因此我尝试了它,但没有理解。为了正确理解,我尝试交换继承运算符super,但我无法理解所使用的init方法来自何处,因为Ui\u Form-Class没有此类方法。所以它一定属于QDialog。请帮帮我。@Creatronik。如果不重写
\uuuu init\uuuu
,python将自动调用所有基类的
\uuuu init\uuuu
。因此,当您重写
\uuuu init\uuuu
时,您必须自己显式地执行此步骤。使用
super
是最简单的方法。在python3中,它实际上更简单,因为您可以只使用
super()。\uuu init\uuu()
(为了向后兼容,我在示例中使用了长版本)。@Creatronik。没有使用
super
并不是您最初的示例的唯一错误。您还有:
self.setupUi(MainDialog)
。这是错误的,因为它在类中传递,而您需要传递实例(即
self
)时,它会传递。好的,它缺少那个超级。由于我是面向对象编程的新手,我必须学会这一点。在教程中没有解释“super”的用途,因此我尝试了它,但没有理解。为了正确理解,我尝试交换继承运算符super,但我无法理解所使用的init方法来自何处,因为Ui\u Form-Class没有此类方法。所以它一定属于QDialog。请帮帮我。@Creatronik。如果不重写
\uuuu init\uuuu
,python将自动调用所有基类的
\uuuu init\uuuu
。因此,当您重写
\uuuu init\uuuu
时,您必须自己显式地执行此步骤。使用
super
是最简单的方法。在python3中,它实际上更简单,因为您可以只使用
super()。\uuu init\uuu()
(为了向后兼容,我在示例中使用了长版本)。@Creatronik。没有使用
super
并不是您最初的示例的唯一错误。您还有:
self.setupUi(MainDialog)
。这是错误的,因为它在类中传递,而您需要传递实例(即
self
)。