【问题标题】:QWidget created by Qt designer not recognized as QWidgetQt 设计器创建的 QWidget 不被识别为 QWidget
【发布时间】:2017-07-22 19:17:24
【问题描述】:

我使用的是 Qt Designer 4.8.7,从它开始。我创建了一个MainWindow,我想在其中加载一个布局。

我有一个小部件,由 Qt 设计器的pyuic4 生成。

我正在加载我的小部件

self.setCentralWidget(myWidget)

它会抛出这个错误:

AttributeError: 'Ui_myWidget' object has no attribute 'setObjectName'

它清楚地解释了传递的对象不被识别为QWidget。这个问题可以通过修改类定义来解决:

class Ui_myWidget(object):

到

class Ui_myWidget(QtGui.QWidget):

由于小部件将被更新,每次.py 将再次生成,我将不得不手动编辑。我想避免这种情况。我错过了一步吗?

【问题讨论】:

  • 如果可能,您根本不应该编辑由pyuic4 生成的 .py 文件。相反,您在它们旁边创建一个新的 .py 文件并导入这些文件以调用小部件:from pyfilename import Ui_myWidget
  • 这是为了测试目的。 @eyllanesc 提供的答案也解释了这一点。谢谢!

标签: python qt pyqt pyqt4 qt-designer


【解决方案1】:

Qt Designer 的目标是实现视图,所以它没有实现一个 QWidget,我们有责任通过一个小部件来使用那个实现,我建议这样做:

class MyWidget(QtGui.QWidget, Ui_myWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent=None)
        self.setupUi(self)

然后你创建这个类的对象并在你的其他小部件中使用它:

myWidget = MyWidget(self)
self.setCentralWidget(myWidget)

【讨论】:

  • 感谢您的回答和背后的解释。这就像一个魅力
  • 我需要等待至少 3 分钟。等一下
  • 对不起,我不知道那个规则。
  • 我也没有。不得不说,这么快就得到了完美的答案,真是令人惊讶
猜你喜欢
  • 2011-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
  • 2020-04-05
  • 1970-01-01
  • 2011-04-30
相关资源
最近更新 更多