属性错误 PyQt4 没有属性 'setFrameShape'
Atribute Error PyQt4 no attribute 'setFrameShape'
您好,我对 PyQt4 有疑问。
我在 Qt 设计器中创建了一个简单的项目,但我不能 运行。
我尝试了一些代码并进行了很多更改,但每次都出现相同的错误:
AttributeError: 'MyApp' 对象没有属性 'setFrameShape'
这就是我从 .ui:
转换为 运行 .py 代码的代码
import sys
from PyQt4 import QtGui
from qt_test import Ui_Frame
class Example(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_Frame()
self.ui.setupUi(self)
def main():
app = QtGui.QApplication(sys.argv)
form = Example()
form.show()
sys.exit(app.exec_())
main()
这里是 qt_test.py 的代码,我从 .ui 文件转换而来:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'qt_test.ui'
#
# Created by: PyQt4 UI code generator 4.11.4
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_Frame(object):
def setupUi(self, Frame):
Frame.setObjectName(_fromUtf8("Frame"))
Frame.resize(493, 451)
Frame.setFrameShape(QtGui.QFrame.StyledPanel)
Frame.setFrameShadow(QtGui.QFrame.Raised)
self.verticalLayout = QtGui.QVBoxLayout(Frame)
self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
self.listWidget = QtGui.QListWidget(Frame)
self.listWidget.setObjectName(_fromUtf8("listWidget"))
self.verticalLayout.addWidget(self.listWidget)
self.pushButton = QtGui.QPushButton(Frame)
self.pushButton.setObjectName(_fromUtf8("pushButton"))
self.verticalLayout.addWidget(self.pushButton)
self.retranslateUi(Frame)
QtCore.QMetaObject.connectSlotsByName(Frame)
def retranslateUi(self, Frame):
Frame.setWindowTitle(_translate("Frame", "Frame", None))
self.pushButton.setText(_translate("Frame", "PushButton", None))
如果有人能帮助我,谢谢
贾斯图斯
根据其他答案,我会说您正试图将 QFrame 设计推入 QMainWindow。另外,"Example" class 继承自 QMainWindow 但调用的是 QWidget 构造函数,这很奇怪。
当您想使用 Qt Designer 工具创建设计时,请在对话框中使用以下命令。
在此对话框中,您可以选择 2 个块的元素:
- Templates/Forms
- 小部件
在这两种情况下,它提供的是设计而不是小部件,所以最后如果我们想使用它,这将可以通过小部件来实现,但是小部件取决于它的初始选择,我们必须有以下注意事项:
- 如果我选择一些Template / Forms,那么你必须根据以下table选择widget。
+-----------------------------+--------------+
| Template | Widget Class |
+-----------------------------+--------------+
| Dialog with Buttons Bottom | QDialog |
| Dialog with Buttons Right | QDialog |
| Dialog without Buttons | QDialog |
| MainWindow | QMainWindow |
| Widget | QWidget |
+-----------------------------+--------------+
- 相反,如果您选择第二个块的设计,则必须使用在那里命名的小部件。
在您的情况下,我认为您选择了 QFrame
作为设计,因此您应该使用如下所示的小部件:
import sys
from PyQt4 import QtGui
from qt_test import Ui_Frame
class Example(QtGui.QFrame):
def __init__(self, parent=None):
QtGui.QFrame.__init__(self, parent)
self.ui = Ui_Frame()
self.ui.setupUi(self)
def main():
app = QtGui.QApplication(sys.argv)
form = Example()
form.show()
sys.exit(app.exec_())
main()
注:
如果你要继承一些 class 你必须调用那个 class 的构造函数,例如在你的初始代码中你继承自 QMainWindow
但你正在调用 QWidget
构造函数。可能会产生问题,因为构造函数执行某些基本任务来配置,因此如果您不调用它,您可能会出现意外行为。
要获得您通过 Qt Designer 配置的行为,当您将其转换为 .py 时,这会调用某些方法,例如在您的情况下:
Frame.setFrameShape(QtGui.QFrame.StyledPanel)
Frame.setFrameShadow(QtGui.QFrame.Raised)
所以如果你使用另一个小部件,它不会有这些方法并产生你得到的错误。
您好,我对 PyQt4 有疑问。
我在 Qt 设计器中创建了一个简单的项目,但我不能 运行。 我尝试了一些代码并进行了很多更改,但每次都出现相同的错误: AttributeError: 'MyApp' 对象没有属性 'setFrameShape'
这就是我从 .ui:
转换为 运行 .py 代码的代码import sys
from PyQt4 import QtGui
from qt_test import Ui_Frame
class Example(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_Frame()
self.ui.setupUi(self)
def main():
app = QtGui.QApplication(sys.argv)
form = Example()
form.show()
sys.exit(app.exec_())
main()
这里是 qt_test.py 的代码,我从 .ui 文件转换而来:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'qt_test.ui'
#
# Created by: PyQt4 UI code generator 4.11.4
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_Frame(object):
def setupUi(self, Frame):
Frame.setObjectName(_fromUtf8("Frame"))
Frame.resize(493, 451)
Frame.setFrameShape(QtGui.QFrame.StyledPanel)
Frame.setFrameShadow(QtGui.QFrame.Raised)
self.verticalLayout = QtGui.QVBoxLayout(Frame)
self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
self.listWidget = QtGui.QListWidget(Frame)
self.listWidget.setObjectName(_fromUtf8("listWidget"))
self.verticalLayout.addWidget(self.listWidget)
self.pushButton = QtGui.QPushButton(Frame)
self.pushButton.setObjectName(_fromUtf8("pushButton"))
self.verticalLayout.addWidget(self.pushButton)
self.retranslateUi(Frame)
QtCore.QMetaObject.connectSlotsByName(Frame)
def retranslateUi(self, Frame):
Frame.setWindowTitle(_translate("Frame", "Frame", None))
self.pushButton.setText(_translate("Frame", "PushButton", None))
如果有人能帮助我,谢谢 贾斯图斯
根据其他答案
当您想使用 Qt Designer 工具创建设计时,请在对话框中使用以下命令。
在此对话框中,您可以选择 2 个块的元素:
- Templates/Forms
- 小部件
在这两种情况下,它提供的是设计而不是小部件,所以最后如果我们想使用它,这将可以通过小部件来实现,但是小部件取决于它的初始选择,我们必须有以下注意事项:
- 如果我选择一些Template / Forms,那么你必须根据以下table选择widget。
+-----------------------------+--------------+
| Template | Widget Class |
+-----------------------------+--------------+
| Dialog with Buttons Bottom | QDialog |
| Dialog with Buttons Right | QDialog |
| Dialog without Buttons | QDialog |
| MainWindow | QMainWindow |
| Widget | QWidget |
+-----------------------------+--------------+
- 相反,如果您选择第二个块的设计,则必须使用在那里命名的小部件。
在您的情况下,我认为您选择了 QFrame
作为设计,因此您应该使用如下所示的小部件:
import sys
from PyQt4 import QtGui
from qt_test import Ui_Frame
class Example(QtGui.QFrame):
def __init__(self, parent=None):
QtGui.QFrame.__init__(self, parent)
self.ui = Ui_Frame()
self.ui.setupUi(self)
def main():
app = QtGui.QApplication(sys.argv)
form = Example()
form.show()
sys.exit(app.exec_())
main()
注:
如果你要继承一些 class 你必须调用那个 class 的构造函数,例如在你的初始代码中你继承自
QMainWindow
但你正在调用QWidget
构造函数。可能会产生问题,因为构造函数执行某些基本任务来配置,因此如果您不调用它,您可能会出现意外行为。要获得您通过 Qt Designer 配置的行为,当您将其转换为 .py 时,这会调用某些方法,例如在您的情况下:
Frame.setFrameShape(QtGui.QFrame.StyledPanel)
Frame.setFrameShadow(QtGui.QFrame.Raised)
所以如果你使用另一个小部件,它不会有这些方法并产生你得到的错误。