python - PyDev 无法识别 PyQt5

标签 python eclipse qt pyqt pydev

我正在学习有关 pyqt 的教程,并获得了这段代码:

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class Example(QWidget):

    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

    def initUI(self):
        cb = QCheckBox('Show title', self)
        cb.move(20, 20)
        cb.toggle()
        cb.stateChanged.connect(self.changeTitle)

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Checkbox')
        self.show()

    def changeTitle(self, state):
        if state == Qt.Checked:
            self.setWindowTitle('Checkbox')
        else: self.setWindowTitle('Unchecked!')

def main():
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

我在 Eclipse 上使用 PyDev。可以说代码运行良好就足够了,但令人尴尬的是 PyDev 用红线在任何 Qt/Q 下划线,当鼠标悬停在红线时会显示 Undefined variable: <..>。 .如果它未定义,那么我的代码如何运行而没有错误?显然这应该是 PyDev 的问题。我删除了 python 解释器(它指向 python2.7 而不是 3.4)并将其重新添加为正确的版本;但这没有用。有趣的是,它识别 PyQt4 并坚持使用 PyQt4 而不是 PyQt5 的小部件。

请注意,上面的代码示例来自另一台也装有 PyQt5 的笔记本电脑。这两个项目都来自 PyDev,并且都有 Ubuntu 15.04。有可能是我在当前机器上导入的项目搞砸了 PyDev 解析所需库的过程。有谁能解决为什么 PyDev 无法识别 PyQt5?

最佳答案

我遇到了同样的问题。这些步骤对我有用。

  1. 设置环境变量:export QT_API=pyqt5(或任何合适的)
  2. 重新启动 eclipse 以便选择新的环境设置,然后将 PyQt5 添加到解释器的强制内置列表中(Window->preferences->pydev->interpreters->python interpreters)或查看此处 http://www.pydev.org/manual_101_interpreter.html了解更多详情。

以下 SO 问题提示我存在变量:Setting up IPython Qtconsole with PyQt5 .在我设置它之前,我可以通过将“PyQt5”添加到内置函数来完成一些工作,但它不会,例如,提供完整的完成列表,比如 from PyQt5.QtGui import,即使独立的 ipython 也可以。此外,pydev 中的 python 控制台也有同样的问题,从 Ipython.core.completerlib 调用 module_completion("from PyQt5.QtGui import Q") 产生了相同的不完整列表。最后,我猜想因为 pydev 正在为 gui 事件循环加载 PyQt4(也可以在解释器设置中配置),所以当它试图内省(introspection) Qt5 模块时存在 namespace 冲突,导致它在构建之前退出完成的完整列表。设置环境变量会导致 pydev 加载 pyqt5 而不是默认的 pyqt4。我没有检查过,但似乎以这种方式设置 pydev 会在完成 pyqt4 引用时遇到问题。

关于python - PyDev 无法识别 PyQt5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31101925/

相关文章:

python - Django:使用过滤器随机查询一条记录的最快方法

python - tree.xpath() 使用 lxml 库在 Webscraping 中返回空列表

python - Python 标志是什么意思?

eclipse - Eclipse 中行号旁边的蓝色突出显示列?

c++ - Qt 无法在 Windows 上打开包含文件

c++ - Qt 包含来自不同项目的库

python - 遇到同时连接到多个设备的多线程问题

eclipse - 提交项目时我应该包含 .project 和 .classpath 吗?

java - Eclipse 包资源管理器中的文件名旁边的 >(大于括号)是什么意思?

sql-server - 如何在Qt中使用ADODB.Connection并查询数据库?