【问题标题】:pyside, Qt Designer, encapsulated code, and AttributeError: 'MainWindow' object has no attribute 'QtGui'pyside、Qt Designer、封装代码和AttributeError: 'MainWindow' object has no attribute 'QtGui'
【发布时间】:2017-06-20 08:58:54
【问题描述】:

我使用 Qt Designer 创建了一个 .ui 文件,然后使用 pyside-uic 转换为一个 .py 文件(ui_mainWindow.py 类 Ui_MainWindow)。我注意到不要编辑 .ui 或 .py 的警告,因为在 Qt Designer 中保存更新时,任何更改都会被覆盖。所以我有自己的单独代码,应该使用 python 的super 功能从它继承。

class MainWindow(QMainWindow, Ui_MainWindow):
  def __init__(self):
    super(MainWindow, self).__init__()
    self.setupUi(self)
    self.assignWidgets()
    self.show()

我能够更新标签和响应按钮等,但我无法使用本地化翻译的东西。上述类的一部分就是这个函数:

def connecetSerialPushed(self):
  self.label_connected.setText(self.QtGui.QApplication.translate(self, "Connected: Yes", None, self.QtGui.QApplication.UnicodeUTF8))

如果我只做一个纯 setText 和 "Connected: Yes" 字符串,我不会出错。但是执行该翻译会导致错误:AttributeError: 'MainWindow' object has no attribute 'QtGui'。我不明白.. 我以为我继承了 Ui_MainWindow 的所有内容,包括它对 QtGui 的导入。我错过了什么?

【问题讨论】:

  • self 是对 MainWindow 类型的对象实例的引用,QtGui 是包的名称...不是您所在的 QMainWindow 的属性继承。
  • 嗯...该行几乎是 Qt Designer / pyside-uic 生成代码的直接副本:self.label_connected.setText(QtGui.QApplication.translate("MainWindow", "Connected: No", None, QtGui.QApplication.UnicodeUTF8)) 但"MainWindow" 也给我带来了问题,所以我切换到自己。为什么它在那里工作?
  • “差不多”,但不完全。请注意,他们没有使用self.QtGui,而是使用QtGui 来访问包内容。我推荐一个基本的 Python 教程 b/c 你在这里遇到的问题并不是真的基于 Qt;这是缺乏对 Python 特定的理解。

标签: python qt pyqt pyside qt-designer


【解决方案1】:

在我的单独代码中,我做了

from PySide import QtGui

然后将翻译行改为

self.label_connected.setText(QtGui.QApplication.translate("MainWindow", "Connected: Yes", None, QtGui.QApplication.UnicodeUTF8))

感谢ray 解决了我的困惑。

【讨论】:

    猜你喜欢
    • 2022-12-01
    • 2017-05-10
    • 2020-04-26
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 2022-12-27
    • 2013-07-26
    相关资源
    最近更新 更多