Pycharm:Python Qt代码代码补全

Posted

技术标签:

【中文标题】Pycharm:Python Qt代码代码补全【英文标题】:Pycharm: Python Qt code code completion 【发布时间】:2015-02-02 01:15:35 【问题描述】:

我是 Python 中 Qt 的初学者。

我使用 Qt Designer 创建简单。

我需要什么 - 用户点击按钮后,应用程序将文本从编辑复制到标签。

我有来自 Qt Designer 的文件 example.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>308</width>
    <height>143</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="QLabel" name="label">
    <property name="geometry">
     <rect>
      <x>10</x>
      <y>20</y>
      <width>121</width>
      <height>17</height>
     </rect>
    </property>
    <property name="text">
     <string>Enter name</string>
    </property>
   </widget>
   <widget class="QLineEdit" name="lineEdit">
    <property name="geometry">
     <rect>
      <x>100</x>
      <y>20</y>
      <width>113</width>
      <height>27</height>
     </rect>
    </property>
   </widget>
   <widget class="QPushButton" name="pushButton">
    <property name="geometry">
     <rect>
      <x>80</x>
      <y>60</y>
      <width>85</width>
      <height>27</height>
     </rect>
    </property>
    <property name="text">
     <string>Display</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_2">
    <property name="geometry">
     <rect>
      <x>10</x>
      <y>90</y>
      <width>261</width>
      <height>21</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <weight>75</weight>
      <bold>true</bold>
     </font>
    </property>
    <property name="text">
     <string>TextLabel</string>
    </property>
   </widget>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

如何在我的 Python 代码中使用它?

我修改了一些教程中的代码,它可以工作:

import sys
from PyQt4 import QtCore, QtGui, uic

form_class = uic.loadUiType("example.ui")[0] 

class MyWindowClass(QtGui.QMainWindow, form_class):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)
        self.setupUi(self)
        self.pushButton.clicked.connect(self.pushButton_clicked) 

    def pushButton_clicked(self):
        input = self.lineEdit.text()
        self.label_2.setText(input)


app = QtGui.QApplication(sys.argv)
myWindow = MyWindowClass(None)
myWindow.show()
app.exec_()

但是代码完成不起作用!所以它对我来说是不可用的:-(

我正在使用 JetBrains Pycharm

在 Python 代码中使用 Qt 设计器输出与 IDE 中的工作代码竞争的正确方法是什么?

【问题讨论】:

我也在使用 Pycharm 进行 Python 和 PyQT 开发,效果很好。当你的意思是自动完成不起作用时,你能提供一些细节吗? PyQt模块自动完成失败还是UI部分失败? 好的,我明白了。使用“loadUiType”时不应期望自动完成,因为“loadUiType”发生在运行时,但自动完成依赖于静态分析,因此正确的方法是使用“pyuic”将 UI 文件生成为 .py 文件,然后在您的项目中,导入并使用它,然后自动完成将起作用 示例:我想将 QLabelname="label_2" 一起使用。在 Pycharm 中,我开始编写“labe”并按 ctrl+space 并得到 no建议 dl.dropboxusercontent.com/u/6943408/pyqt_completion_err.png 是的,看我上一篇文章,利用pyuic生成的文件,而不是调用“loadUiType”,然后使用setupUi安装生成的python文件,这样的话,自动补全会工作正常! 仅供参考,因为 pyuic 默认会输出到 stdout,所以您需要将输出重定向到 python 文件,然后导入。 【参考方案1】:

不是一个完整的答案,但肯定可以提及:代码完成不适用于动态对象。你当然仍然可以使用

self.pushButton.clicked.connect(self.abc)

而不是

QtCore.QObject.connect(self.ui.pushButton, QtCore.SIGNAL("clicked()"), self.abc)

self.pushButton.clicked.* 不会有任何代码完成

(这也回答了问题https://***.com/a/28270242/4537483)

【讨论】:

【参考方案2】:

1) 生成python代码:pyuic4 -o mygui.py mygui.ui

2) 编写代码:

import sys
from PyQt4 import QtCore, QtGui
from mygui import Ui_MainWindow

class StartQT4(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        QtCore.QObject.connect(self.ui.pushButton, QtCore.SIGNAL("clicked()"), self.abc)

    def abc(self):
        input = self.ui.lineEdit.text()
        self.ui.label_2.setText(input)

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    myapp = StartQT4()
    myapp.show()
    sys.exit(app.exec_())

可以,但是可以写QtCore.QObject.connect(self.ui.pushButton, QtCore.SIGNAL("clicked()"), self.abc)更简单吗?

【讨论】:

以上是关于Pycharm:Python Qt代码代码补全的主要内容,如果未能解决你的问题,请参考以下文章

pycharm输入代码后,没有补全提示

pycharm代码无法自动补全

为啥有时PyCharm会无法完成代码补全或代码提示

pycharm import不自动补全怎么办?

pycharm代码自动补全功能

pycharm代码错误提示不见了怎么办