Подтвердить что ты не робот

Использование QTDesigner с PyQT и Python 2.6

Я новичок в Python и начинаю преподавать программирование GUI (надеюсь) используя PyQT4.7 и Python 2.6

Я просто загрузил весь пакет PyQT/QT4 (включая QTDesigner) с веб-сайта PyQT, однако, похоже, QTDesigner, который выглядит потрясающе для использования в качестве новичка (поскольку вы можете видеть все атрибуты/свойства/значения по умолчанию и т.д.) каждого виджет и визуальное редактирование свойств замечательно, но PyQT, похоже, не устанавливает QTDesigner для непосредственного интегрирования с скриптами генерации кода Python PyQT и PyQTs:

i.e: Нажатие "Просмотр кода" пытается запустить конструктор- > С++ script, называемый (uic), вместо pyuic.py script и т.д.

Есть ли способ заставить QTDesigner тесно интегрироваться с PyQT для генерации кода на лету, как это происходит с С++?

Если это не так, значит ли это, что мне нужно кодировать весь графический интерфейс QT в моей среде разработки Python и искать всю документацию и код шаблона для каждого виджета? (кажется очень неэффективным и неэлегантным по сравнению с просто интеграцией QTDesigner + Python).

Какова обычная инструментальная цепочка//производственный поток использования конструктора с PyQT? (Если прямая интеграция невозможна - пользователи python + pyQT просто пропускают с помощью QTDesigner все вместе и вручную записывают весь код GUI QT в python?)

Любые дополнительные советы/предложения для новичков PyQT будут оценены по достоинству. Спасибо!

ps Я знаю, что группа из вас, вероятно, расскажет мне, как просто сосать ее и закодировать весь пользовательский интерфейс QT вручную, но если я буду использовать Designer во время обучения, как было сказано выше, предоставьте способ сделать это, чтобы я может узнать это легче, спасибо!

4b9b3361

Ответ 1

Я начал писать свое первое приложение PyQT (PyQT используется только для обработки графического интерфейса), и кажется, что хорошая инструментальная цепочка: QtDesigner для генерации .ui s и обработки ресурсов и некоторой среды IDE, которая может установить QtDesigner для редактирования этих, Я использую Eclipse, потому что он очень настраиваемый. Вы можете скомпилировать ваши .qrc и .ui по требованию, сделав несколько так, как при запуске приложения, или при настройке, или в любое другое время:

os.system("pyrcc4.exe -o ui/images_rc.py ui/images/images.qrc")
uic.compileUiDir(appDir + '/ui', True)

а затем используя сгенерированные классы следующим образом:

class MyMainWindow(QtGui.QMainWindow):

    def __init__(self, owner):
        QtGui.QMainWindow.__init__(self)
        # 'Ui_MyMainWindow' is the class, that was generated by uic, 
        # naming convention is: 'Ui_' plus the name of root widget in designer
        self.ui = Ui_MyMainWindow()
        self.ui.setupUi(self)

или вы можете загрузить .ui непосредственно, когда контейнеры:

    QtGui.QMainWindow.__init__(self)
    self.ui = None
    uic.loadUi('MyMainWindowUI.ui', self.ui)
    #now you have the instance of Ui_MyMainWindow in self.ui too, as above

Заметьте, что я добавил суффикс UI к имени файла .ui, это было сделано, чтобы избежать перекрестков имен, вызвать имя .py файла, сгенерированного uic, не является именем класса, начинающимся с 'Ui_', а просто корневым виджетами один.

И еще одно примечание: в конце сгенерированного файла импортируйте файл%.qrc name% _rc (по умолчанию импортирует images_rc), поэтому вы должны знать это при использовании pyrcc4.

Весь подход достаточно гибкий, он требует от вас всей фиктивной работы по кодированию; но вы все равно можете выполнить точную настройку в атрибуте MyMainWindow.ui, где лежит экземпляр Ui_MyMainWindow; и это позволяет избежать ненужного наследования. Лично я делаю _connectSlots и _initIntefrace методы в MyMainWindow, чтобы сделать какой-то конструктор работы, не может.

Тем не менее, я должен отметить, что код написания кода сам по себе является хорошим подходом, поэтому код, созданный uic, является UGLY. Я предпочитаю загружать .ui на место с помощью loadUi() из-за этого:) И если у вас много настраиваемых элементов управления PyQT, то это происходит так, чтобы принести их в QtDesigner..

Ответ 2

Что я сделал, так это то, что я сделал свой собственный исполняемый файл uic для оболочки pyuic.py script.

Вам понадобится...

  • Получить и установить py2exe

  • Замените PYTHON_PATH в коде uic.py ниже

  • Отредактируйте файл qt.conf в пакетах сайтов \PyQt4 и установите Binaries = Path в папку, содержащую uic exe, после ее создания.

  • Поместите uic.py и setup.py в ту же папку

  • В командной строке перейдите к папке, где setup.py и uic.py затем запустите следующую команду "python setup.py py2exe".

//---- uic.py

#uic.py
import subprocess
import sys

args = ""

for arg in sys.argv: 
    if sys.argv[0] != arg:
        args += arg + " "


# Start pyuic.py script
command = 'python %PYTHON_PATH%\\PyQt4\\uic\\pyuic.py '+ args
out = ''


child = subprocess.Popen(command, shell=True, stderr=subprocess.PIPE)
complete = False
while True:
    out = child.stderr.read(1)
    if out == '' and child.poll() != None:
        break
    if out != '':
        sys.stdout.write(out)
        sys.stdout.flush()

//----- setup.py

#setup.py    
from distutils.core import setup
import py2exe

setup(windows=[{"script":"uic.py"}], options={"py2exe" : {"includes" : ["sip", "PyQt4.QtCore"]}})

Ответ 3

Вы можете запустить pyuic (или скорее pyuic4) из руки в консоли. Вы можете сделать свой графический интерфейс с помощью конструктора с Python, как и с С++.

Кстати, я написал все инструменты GUI для своего приложения (10k кода) вручную. Мне не нравятся дизайнеры GUI и работа с сгенерированным кодом, когда вам нужно что-то изменить.

Ответ 4

QtDesigner использует uic.exe для генерации кода на лету С++. uic.exe - это инструмент командной строки, он получает имена файлов в качестве входных параметров. Для интеграции с python вы можете написать программу python, которая использует pyuic.py, сопоставить ее с входами uic.exe (порядок, переключатели и т.д.), Преобразовать их в исполняемый файл (используя py2exe) и переименовать исполняемый файл в uic.exe, затем замените его на uic.exe в каталоге Qt bin (uic.exe не существует в PyQt, как я знаю). Вы должны быть осторожны с входными аргументами uic.exe и написанным вручную макросом (они должны совпадать вместе).

Я думаю, что ваша программа должна будет знать путь python (чтобы использовать pyuic). если вы используете окна, вы можете получить путь из реестра.

Ответ 5

Я использую пакет pyqt5_tools из pip в windows и смог заставить работать инструмент 'view code' в qt designer, скопировав pyuic5.exe из папки\scripts\установки python и поместив его в \Lib\site-packages\pyqt5_tools\bin\folder и переименовать его в uic.exe. Команда "Просмотреть код" теперь будет отображать код Python.

Если вы используете другую версию или она не работает, попробуйте запустить qtpaths.exe(\ Lib\site-packages\pyqt5_tools) в командной строке с параметрами --binaries-dir, и это покажет вам, где вы должен поставить переименованный pyuic5.exe.

Надеюсь это поможет