【问题标题】:ImportError: cannot import name QtGuiImportError:无法导入名称 QtGui
【发布时间】:2014-12-10 11:19:01
【问题描述】:

我在我的 linux 32 位计算机上安装了 Qt5.3(32 位)安装程序。

  • 然后我安装了最新版本的 sip - sip4.16.4

  • 然后我从http://www.riverbankcomputing.co.uk/software/pyqt/download安装了最新版本的pyqt - PyQt-x11-gpl-4.11.3.tar.gz

  • 在我的电脑上安装了python2.7和python3.2版本。当我尝试使用 python2.7 安装时,我遇到了一些错误。然后我尝试用 pthon3.2 安装它。没有发生错误,我使用python3.2正确安装了它

  • 我安装了 py2.7-dev 和 py3.2-dev 包。

  • gdb,gcc,g++,python2.7,python3.2,build-essential all 都安装在我的电脑里了。

  • 我从软件中心安装了 Qt Designer。

  • 然后我按照教程的说明放置一个简单的按钮:http://www.youtube.com/watch?v=GLqrzLIIW2E

  • 然后,我保存example.ui

  • 然后,我在终端中输入以下命令: pyuic4 example.ui > example.py 。它将 .ui 文件转换为 .py 文件。然后我在上面提到的 youtube 教程中进行了必要的修改。

- 当我用 python3.2 运行 python 文件的最终版本时,它给出了错误:

Traceback (most recent call last):
  File "outFile_ui.py", line 12, in <module>
    from PyQt4 import QtCore, QtGui
ImportError: cannot import name QtGui

- 为什么我会出现这个错误?我认为问题出在不匹配的版本或安装等上。但我一次又一次地安装。不幸的是,什么都没有改变。我在网上搜索了有关该问题的所有信息。存在类似的问题,但没有一个对我有用。

  • 如果你想查看我在终端上运行的 python 文件,它是:

    from PyQt4 import QtCore, QtGui
    
    import sys
    
    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_Form(QtGui.QWidget):
        def __init__(self):
            QtGui.QWidget.__init__(self)
            self.setupUi(self)
        def setupUi(self, Form):
            Form.setObjectName(_fromUtf8("Form"))
            Form.resize(400, 300)
            self.horizontalLayout = QtGui.QHBoxLayout(Form)
            self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
            self.verticalLayout = QtGui.QVBoxLayout()
            self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
            self.printHam_btn = QtGui.QPushButton(Form)
            self.printHam_btn.setObjectName(_fromUtf8("printHam_btn"))
            self.verticalLayout.addWidget(self.printHam_btn)
            self.horizontalLayout.addLayout(self.verticalLayout)
    
            self.retranslateUi(Form)
            QtCore.QMetaObject.connectSlotsByName(Form)
    
        def retranslateUi(self, Form):
            Form.setWindowTitle(_translate("Form", "Super Ham", None))
            self.printHam_btn.setText(_translate("Form", "Print HAm", None))
            self.printHam_btn.clicked.connect(self.printHam)
    
        def printHam(self):
            print ("Ham!")
    
    
        if __name__ == '__main__':
            app = QtGui.QApplication(sys.argv)
            ex = Ui_Form()
            ex.show()
            sys.exit(app.exec_())
    

【问题讨论】:

  • 似乎您可以将代码缩短为导入语句?您是否尝试在两个单独的行中导入 QtCore 和 QtGui?
  • 你为什么不直接安装你的发行版(我假设是 ubuntu)提供的二进制包?您可能将 PyQt 安装到了错误的位置,现在正尝试使用错误的 Python 运行您的脚本。
  • @ekhumoro ,我同意你的看法。我认为问题与你提到的主题有关。但我无法解决。你说“你为什么不安装发行版提供的二进制包”是什么意思?你说的是软件中心之类的吗?我不明白
  • @oiyio。我的意思是 ubuntu 提供的 pre-compiled packages:即您通过 apt-get 安装的东西。
  • @ekhumoro。我没有这样做,因为这些软件包太旧了。

标签: python linux qt pyqt


【解决方案1】:

.ui转.py代码后,需要添加main函数。正确添加main函数后,完美运行。

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 2016-03-31
    • 2014-10-10
    • 2014-09-20
    • 2014-08-28
    • 2014-06-10
    • 2016-05-16
    • 2019-05-25
    相关资源
    最近更新 更多