2015-02-02 2 views
1

Я начинаю с Qt в Python.Pycharm: Python Qt code code

Я создаю простой из использования Qt Designer.

enter image description here

Что мне нужно - после нажатия пользователя на кнопку, приложение копирование текста с правки этикетки.

У меня есть файл example.ui из Qt Designer:

<?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.

Что такое правильный способ использовать Qt выход дизайнера в питоне кода с рабочим кодом конкуренции в IDE?

+0

Я нахожусь также используя Pycharm для разработки Python & PyQT, он отлично работает. Когда вы имеете в виду автозаполнение, не работает, можете ли вы дать некоторые подробности? Ошибка автоматического завершения модуля PyQt или сбоя части пользовательского интерфейса? –

+2

Хорошо, я понял. Вы не должны ожидать автоматического завершения при использовании «loadUiType», поскольку «loadUiType» происходит во время выполнения, но автозаполнение зависит от статического анализа, поэтому правильный способ - использовать «pyuic» для создания файлов пользовательского интерфейса в файл .py , то в вашем проекте, импортировать его и использовать его, тогда автозаполнение будет работать –

+0

Пример: Я хочу использовать * QLabel * с ** name = "label_2" **. В Pycharm я начинаю писать «labe» и нажимаю ctrl + space и получаю * никаких предложений * https://dl.dropboxusercontent.com/u/6943408/pyqt_completion_err.png – martin

ответ

1

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) проще?

4

Не полный ответ, но, безусловно, упоминаемый: завершение кода не работает для динамических объектов. Конечно, вы можете все еще использовать

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

вместо

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

но не будет завершение кода для self.pushButton.clicked.*

(Это также отвечает на вопрос https://stackoverflow.com/a/28270242/4537483)