Использование 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 во время обучения, как было сказано выше, предоставьте способ сделать это, чтобы я может узнать это легче, спасибо!
Ответы
Ответ 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.
Надеюсь это поможет