python:Gui错误消息
我尝试学习GUI实现,并将ui文件包含到python脚本中: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 =
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
)。