2015-06-28 22 views
3

我下面的PyQt的教程,并得到这个代码:的PyDev不承认PyQt5

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() 

我使用的PyDev Eclipse的。只需说代码运行良好,但是有些尴尬的是,PyDev强调任何带有红线的Qt/Q,当它悬停时说Undefined variable: <..>。如果它是未定义的,那么我的代码如何无误地运行?显然这应该是PyDev的一个问题。我已经删除了python解释器(它指向python2.7而不是3.4),并将其作为正确的版本读取;但那不起作用。有趣的是,它承认PyQt4并坚持使用它来代替PyQt5。

只是让你们知道,上面的代码示例来自另一台具有PyQt5的笔记本电脑。这两个项目都来自PyDev,并且都有Ubuntu 15.04。有可能我在当前的机器上导入项目会导致PyDev解析所需的库。有没有人有解决方案,为什么PyDev不认识PyQt5?

回答

3

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

  1. 设置环境变量:出口QT_API = pyqt5(或其他适当的)
  2. 重新启动Eclipse,以便拿起新的环境设置,然后添加PyQt5强迫内建的列表解释(窗口 - > 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(也可以在解释器设置中配置),所以当它试图反思Qt5模块时会发生名称空间冲突,导致它在构建完整清单的完整列表。设置环境变量会导致pydev加载pyqt5而不是默认的pyqt4。我没有检查,但似乎有可能以这种方式设置pydev在完成pyqt4引用时会遇到问题。