2014-09-26 2 views
0

Я новенькая PyQt так медведь со мной здесь ...Компиляция/обновление PyQt .py файл

создать виджет с помощью Qt Designer, а затем скомпилировать его и сохранить его в .py. Я редактирую файл .py, чтобы добавить некоторые дополнительные функции. Но затем скажите, что мне нужно вернуться к Qt Designer и обновить макет GUI. Есть ли способ скомпилировать это, а затем обновить исходный .py-файл с изменениями вместо того, чтобы вручную копировать/вставлять свой код?

ответ

0

Если вы посмотрите на комментарии в верхней части созданного файла, вы увидите строку:

# WARNING! All changes made in this file will be lost! 

Это делает его совершенно ясно, что файл не предназначен для редактирования. Но это не проблема, потому что это просто обычный модуль python, и поэтому достаточно легко импортировать его в основное приложение и получить доступ к нему оттуда.

Все, что вам нужно сделать, это создать подкласс объекта верхнего уровня с помощью Qt Designer (который будет QMainWindow, QDialog или QWidget), а затем использовать setupUi метод, предоставленный сгенерированного модулем для сложения всех виджеты к экземпляру этого подкласса.

Таким образом, если объект верхнего уровня с помощью Qt Designer был назван «MainWindow», pyuic создаст соответствующий Ui_MainWindow класс, который может быть импортирован в main.py сценарий и используется что-то вроде этого:

from PyQt4 import QtCore, QtGui 
from myui import Ui_MainWindow 

class Window(QtGui.QMainWindow): 
    def __init__(self): 
     QtGui.QMainWindow.__init__(self) 
     self.ui = Ui_MainWindow() 
     self.ui.setupUi(self) 
     self.ui.button.clicked.connect(self.handleButton) 

    def handleButton(self): 
     print('Hello World!') 

if __name__ == '__main__': 

    import sys 
    app = QtGui.QApplication(sys.argv) 
    window = Window() 
    window.show() 
    sys.exit(app.exec_()) 

См Using Qt Designer в PyQt Documentation для более подробной информации.

+0

Можете ли вы достичь того же самого, непосредственно подклассифицируя 'Ui_MainWindow' и вызывая' Ui_MainWindow .__ init __ (self) ', поскольку он вызывает' setupUi() 'в любом случае? –

+0

@three_pineapples. Да, существует несколько разных способов достижения той же цели, которые описаны в документации PyQt (к которой я теперь связан в своем ответе). Я думаю, что метод в моем ответе более чисто композиционный, но я на самом деле его не очень много использую в своем собственном коде (это все просто вопрос вкуса, действительно). – ekhumoro

0

Лично я ненавижу компилировать его. Но, как сказал эхуморо, вы можете импортировать класс. Мне все же это не нравится. pyuic иногда импортирует неприятные вещи example_rc, что еще раз снижает уровень производительности. Если вам абсолютно необходимо преобразовать .ui в .py, создайте файл .bat, чтобы сделать это за вас. Код для этого:

@ECHO OFF 
cd [directory of choice] 
pyuic[4/5, depends on pyqt] -x example.ui -o example.py 

Или что у вас есть для вашей ОС. Лично мне нравится использовать ui = uic.loadUi('example.ui'), а затем ui.setupUi(). Это позволяет вам быть намного эффективнее!

 Смежные вопросы

  • Нет связанных вопросов^_^