【问题标题】:PyQt4 MainWindow object has no attributePyQt4 MainWindow 对象没有属性
【发布时间】:2018-07-03 16:24:22
【问题描述】:

我正在编写一些 GUI,然后我想将文本添加到 listView。现在我只想添加“你好”来弄清楚,然后我会从那里成长。

这是我的代码示例:

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_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(584, 461)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.lineEdit_6 = QtGui.QLineEdit(self.centralwidget)
        self.lineEdit_6.setGeometry(QtCore.QRect(72, 210, 171, 20))
        ....
        self.retranslateUi(MainWindow)
        QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), MainWindow.addEntry)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        ....

    def addEntry(self):
        listView.Items.Add("Hello")

然后打开它:

from PyQt4 import *
import signal
import sys
from PyQt4.QtGui import QApplication, QMessageBox
from inv_window import *
def main():
    app = QtGui.QApplication(sys.argv)
    MainWindow = QtGui.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

当我尝试运行它时,我得到:

AttributeError: 'QMainWindow' object has no attribute 'addEntry'

关于如何纠正这个问题的任何想法?我试过谷歌搜索,但我很难确定解决方案

【问题讨论】:

    标签: python pyqt4


    【解决方案1】:

    问题似乎出在这一行:

            QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), MainWindow.addEntry)
    

    您的 MainWindow 变量是一个 QMainWindow 实例,因此它没有属于您的 Ui_MainWindow 类的 addEntry 方法。因此,您会看到错误。

    如果可以的话,我想指出您的代码的风格问题。在 Python 中,局部变量和方法/函数参数的名称通常以小写字母开头。您有一个名为MainWindow 的变量(和方法参数)。当我第一次阅读您的代码时,我感到很困惑,因为 MainWindow 在我看来就像一个类的名称。我建议将此变量/方法参数的名称更改为 mainWindowmain_windowmainwin 或类似名称。

    【讨论】:

      【解决方案2】:

      当您为main() 方法编写from PyQt4 import * 时,您还需要导入QtCore 并将QtGui 视为一个全局变量。要使其具体化,您需要编写您的主要方法,例如:

      from PyQt4 import QtCore, QtGui
      import signal
      from PyQt4 import *
      from Ui_MainWindow import Ui_MainWindow
      from inv_window import *
      import sys
      def main():
                  app = QtGui.QApplication(sys.argv)
                  MainWindow = QtGui.QMainWindow()
                  ui = Ui_MainWindow()
                  ui.setupUi(MainWindow)
                  MainWindow.show()
                  sys.exit(app.exec_())
      if __name__ == "__main__":
          main()
      

      【讨论】:

        【解决方案3】:

        您从错误的模块导入。不是 100% 确定是哪一个,但我建议下载 Pycharm,因为它有助于自动完成并找出哪些模块在哪里可用,而无需每次都在站点包配置中手动查找它。我建议下载 PyQt5。这是一个很好的入门教程:http://zetcode.com/gui/pyqt5/ 另请查看:https://pythonspot.com/en/pyqt5/

        【讨论】:

          猜你喜欢
          • 2014-08-14
          • 1970-01-01
          • 1970-01-01
          • 2023-03-08
          • 2011-02-27
          • 2019-01-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多