Как преобразовать ui в py pyqt5
Перейти к содержимому

Как преобразовать ui в py pyqt5

  • автор:

Как скомпилировать файл Python с файл .ui

Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно.
Вам необходимо обновить браузер или попробовать использовать другой.

Lill_Chich
Участник

Автор темы

Как скомпилировать файл Python с файл .ui. Тоесть у меня есть файл main.py и design.ui(PyQt5) и мне нужно сделать это в один общий .exe файл.

Vitalya_

Ну если надо в .exe то тут подойдет pyinstaller
А конвертировать .ui в .py можно прямо в программе Qt Designer

Вот команда но надо установить pyuic5(pip install pyuic5)
pyuic5 name.ui -o name.py

не советую пользоваться qt designer так ничему не научишся, имхо

Vitalya_
Участник

Ну если надо в .exe то тут подойдет pyinstaller
А конвертировать .ui в .py можно прямо в программе Qt Designer

Вот команда но надо установить pyuic5(pip install pyuic5)
pyuic5 name.ui -o name.py

не советую пользоваться qt designer так ничему не научишся, имхо

Последнее редактирование: 13 Янв 2022

Lill_Chich
Участник

Автор темы

Ну если надо в .exe то тут подойдет pyinstaller
А конвертировать .ui в .py можно прямо в программе Qt Designer

Вот команда но надо установить pyuic5(pip install pyuic5)
pyuic5 name.ui -o name.py

не советую пользоваться qt designer так ничему не научишся, имхо

Как преобразовать ui в py pyqt5

Шаг 8.
Библиотека PyQt5. Знакомство с PyQt5. Создание окна с помощью программы Qt Designer. Преобразование ui-файла в py-файл

На этом шаге мы рассмотрим алгоритм такого преобразования способы подключения преобразованного файла .

Вместо подключения ui -файла можно сгенерировать на его основе программный код на языке Python . Для этого служит утилита pyuic5.bat , расположенная в каталоге C:\Python34\Lib\site-packages\PyQt5 . Запустим командную строку и перейдем в каталог, в котором находится ui -файл. Для генерации Python -программы выполним команду:

pyuic5.bat MyForm.ui -о ui_MyForm.py

В результате будет создан файл ui_MyForm.py , который мы уже можем подключить с помощью инструкции import . Внутри файла находится класс uiMyForm с двумя методами: setupUi() и retranslated() . При использовании процедурного стиля программирования следует создать экземпляр класса формы, а затем вызвать метод setupUi() и передать ему ссылку на экземпляр окна:

# -*- coding: utf-8 -*- from PyQt5 import QtWidgets import sys, ui_MyForm app = QtWidgets.QApplication(sys.argv) window = QtWidgets.QWidget() ui = ui_MyForm.Ui_MyForm() ui.setupUi(window) ui.btnQuit.clicked.connect(QtWidgets.qApp.quit) window.show() sys.exit(app.exec_())

Архив с файлами можно взять здесь.

При использовании ООП-стиля программирования следует создать экземпляр класса формы, а затем вызвать метод setupUi() и передать ему указатель self .

# -*- coding: utf-8 -*- from PyQt5 import QtWidgets import ui_MyForm class MyWindow(QtWidgets.QWidget): def __init__(self, parent = None): QtWidgets.QWidget.__init__(self, parent) self.ui = ui_MyForm.Ui_MyForm() self.ui.setupUi(self) self.ui.btnQuit.clicked.connect(QtWidgets.qApp.quit) if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) window = MyWindow() window.show() sys.exit(app.exec_())

Архив с файлами можно взять здесь.

Класс формы можно указать во втором параметре в списке наследования — в этом случае он унаследует все методы класса формы.

# -*- coding: utf-8 -*- from PyQt5 import QtWidgets import ui_MyForm class MyWindow(QtWidgets.QWidget, ui_MyForm.Ui_MyForm): def __init__(self, parent = None): QtWidgets.QWidget.__init__(self, parent) self.setupUi(self) self.btnQuit.clicked.connect(QtWidgets.qApp.quit) if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) window = MyWindow() window.show() sys.exit(app.exec_())

Архив с файлами можно взять здесь.

Как видите, и в PyQt можно создавать формы, размещать компоненты с помощью мыши, а затем непосредственно подключать ui -файлы в программе или преобразовывать их в Python -код с помощью утилиты pyuic5.bat , — все это очень удобно. Тем не менее, чтобы полностью овладеть программированием на PyQt , необходимо уметь создавать код вручную. Поэтому в дальнейшем мы больше не станем задействовать программу Qt Designer .

На следующем шаге мы рассмотрим модули PyQt5 .

Как конвертировать из ui в py?

Знакомлюсь с PyQt. Накидал форму в QtDesigner. Как конвертировать из ui в py чтоб допилить форму ума не приложу. Из того что нагуглил — конвертером является некий pyuic, но у меня он располагается не в тех папках как на примерах и имеет расширение .py, а не .bat. Как быть, посоветуйте люди добрые.

  • Вопрос задан более трёх лет назад
  • 98173 просмотра

Комментировать
Решения вопроса 3
Макс Антонов @Cialkowsky Автор вопроса

Ответ таки найден:
pyuic5 name.ui -o name.py — запускаем из папки с файлом ui в cmd
после чего наблюдаем скрипт в той же папке

Ответ написан более трёх лет назад
Нравится 18 2 комментария

У меня не работает. Подскажите, как мне это сделать, если:
стоит анаконда, сделал env c python 3.5 и туда же установил PyQT5.
Консоль выдает: ImportError: DLL load failed: %1 не является приложением Win32.

Студент СПбПУ (примат)
Если не проходит pyuic5 . и т. п., попробуйте из консоли

python -m PyQt5.uic.pyuic -x [FILENAME].ui -o [FILENAME].py

(Windows) (при этом находясь в папке со скриптом)
Посмотрел здесь: https://stackoverflow.com/questions/43028904/conve.

Ответ написан более трёх лет назад
Нравится 16 4 комментария
Спасибо. Так работает.
добрый человек, живи долго
ДЯДЬ, ТЫ ГЕНИЙ, ЦЕЛУЮ!
Обычный метод мне не помог, спасибо ты решил проблему.
Сергей Горностаев @sergey-gornostaev Куратор тега Python
Седой и строгий

Во-первых, какая разница где он располагается, лишь бы работал. Во-вторых, ui-файлы можно использовать и без конвертации:

from PyQt5 import uic from PyQt5.QtWidgets import QMainWindow class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() uic.loadUi('mainwindow.ui', self)

Ответ написан более трёх лет назад
Нравится 11 6 комментариев
Макс Антонов @Cialkowsky Автор вопроса

Спасибо за ответ, действительно, классная фишка! Но я бы хотел покопаться в самом коде формы, посмотреть редактор его строит. Питон мой первый ЯП и я пытаюсь понять как писать код без редактора, а примеров крайне мало.

Сергей Горностаев @sergey-gornostaev Куратор тега Python
Макс Антонов: так используйте pyuic. Что вам мешает?
Макс Антонов @Cialkowsky Автор вопроса
Спасибо, разобрался!
Сергей Горностаев @sergey-gornostaev Куратор тега Python
Макс Антонов: для спасибо можно принять ответ.
studprogrammist @studprogrammist

Блин, почему то не работает, хотя при этом не ругается.
Код у меня получился такой:
#!/usr/bin/python3
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow
from PyQt5 import uic

class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
uic.loadUi(‘window.ui’, self)

if __name__ == ‘__main__’:
app = QApplication(sys.argv)
w = QWidget()
w.resize(250, 150)
w.move(300, 300)
w.setWindowTitle(‘Simple’)
w.show()

При этом в файл «window.ui» на форму добавил кнопку, а при компиляции «main.py», появляется пустая форма:(

ModuleNotFoundError: No module named ‘PyQt5.uic’
Помогите пожалуйста, использовал pyuic5 test.ui -o name.py

Как преобразовать код с интерфейсом на Python для использования с .ui файлом (Qt Designer)?

Все примеры с использованием PyQt5 написаны с инициализацией интерфейса на Python.
Как правильно преобразовывать его на использование с .ui файлом?
Например из вопроса код для затухания при смене вкладки в QTabWidget :

import sys from PyQt5.Qt import * class FaderWidget(QWidget): def __init__(self, *args, **kwargs): QWidget.__init__(self, *args, **kwargs) self.pixmap_opacity = None self.timeline = QTimeLine(333, self) self.timeline.valueChanged.connect(self.animate) self.timeline.finished.connect(self.close) def start(self, old_widget, new_widget): self.pixmap_opacity = 1.0 self.old_pixmap = QPixmap(new_widget.size()) old_widget.render(self.old_pixmap) self.timeline.start() self.resize(new_widget.size()) self.show() def paintEvent(self, event): if self.pixmap_opacity: QWidget.paintEvent(self, event) painter = QPainter(self) painter.setOpacity(self.pixmap_opacity) painter.drawPixmap(0, 0, self.old_pixmap) def animate(self, value): self.pixmap_opacity = 1.0 - value self.update() class FaderTabWidget(QTabWidget): def __init__(self, parent=None): QTabWidget.__init__(self, parent) self.currentChanged.connect(self.onCurrentIndex) self.last = -1 self.current = self.currentIndex() def onCurrentIndex(self, index): self.last = self.current self.current = self.currentIndex() if self.widget(self.last): self.widget(self.last).setCurrentIndex(1) old_widget = self.widget(self.last).widget(0) current_widget = self.widget(self.current).widget(0) fade = self.widget(self.current).widget(1) fade.start(old_widget, current_widget) def addTab(self, widget, text): stack = QStackedWidget(self) stack.addWidget(widget) fade = FaderWidget(self) fade.timeline.finished.connect(lambda: stack.setCurrentIndex(0)) stack.addWidget(fade) stack.setCurrentIndex(0 if self.currentIndex() == -1 else 1) QTabWidget.addTab(self, stack, text) if __name__ == "__main__": app = QApplication(sys.argv) window = QWidget() tabWidget = FaderTabWidget() tabWidget.addTab(QCalendarWidget(), "Tab1") editor = QTextEdit() editor.setPlainText("Hello world! " * 100) tabWidget.addTab(editor, "Tab2") layout = QVBoxLayout(window) layout.addWidget(tabWidget) window.show() sys.exit(app.exec_()) 

Как данный код адаптировать под использование с .ui файлом?
И можно ли будет по аналогии так делать с другими элементами: кнопками, текстовыми полями и т.д. Моя попытка совместить код (неправильная и нерабочая): main.py:

import sys from PyQt5 import uic from PyQt5.Qt import * class Window(QMainWindow): def __init__(self): super(Window, self).__init__() uic.loadUi('fading.ui', self) self.tabWidget = FaderTabWidget() self.tabWidget.addTab(QCalendarWidget(), "Tab3") self.tabWidget.addTab(QTextEdit(), "Tab4") class FaderWidget(QWidget): def __init__(self, *args, **kwargs): QWidget.__init__(self, *args, **kwargs) self.pixmap_opacity = None self.timeline = QTimeLine(333, self) self.timeline.valueChanged.connect(self.animate) self.timeline.finished.connect(self.close) def start(self, old_widget, new_widget): self.pixmap_opacity = 1.0 self.old_pixmap = QPixmap(new_widget.size()) old_widget.render(self.old_pixmap) self.timeline.start() self.resize(new_widget.size()) self.show() def paintEvent(self, event): if self.pixmap_opacity: QWidget.paintEvent(self, event) painter = QPainter(self) painter.setOpacity(self.pixmap_opacity) painter.drawPixmap(0, 0, self.old_pixmap) def animate(self, value): self.pixmap_opacity = 1.0 - value self.update() class FaderTabWidget(QTabWidget): def __init__(self, parent=None): QTabWidget.__init__(self, parent) self.currentChanged.connect(self.onCurrentIndex) self.last = -1 self.current = self.currentIndex() def onCurrentIndex(self, index): self.last = self.current self.current = self.currentIndex() if self.widget(self.last): self.widget(self.last).setCurrentIndex(1) old_widget = self.widget(self.last).widget(0) current_widget = self.widget(self.current).widget(0) fade = self.widget(self.current).widget(1) fade.start(old_widget, current_widget) def addTab(self, widget, text): stack = QStackedWidget(self) stack.addWidget(widget) fade = FaderWidget(self) fade.timeline.finished.connect(lambda: stack.setCurrentIndex(0)) stack.addWidget(fade) stack.setCurrentIndex(0 if self.currentIndex() == -1 else 1) QTabWidget.addTab(self, stack, text) if __name__ == "__main__": app = QApplication(sys.argv) w = Window() w.show() sys.exit(app.exec_()) 

fading.ui:

  MainWindow   0 0 691 488   MainWindow      0   Tab 1        Tab 2     Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world!            0 0 691 21       

Отслеживать
73.6k 112 112 золотых знаков 38 38 серебряных знаков 55 55 бронзовых знаков
задан 30 июн 2021 в 20:18
61 3 3 серебряных знака 15 15 бронзовых знаков

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

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

  • встраиваем виджет FaderTabWidget в форму Qt Designer. Подробно как это делается уже публиковалось.

введите сюда описание изображения

введите сюда описание изображения

Получаем fading.ui

  MainWindow   0 0 691 488   MainWindow      1   Tab 1        Tab 2     Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world!            0 0 691 21      FaderTabWidget QTabWidget 
fadertabwidget
1
  • конвертируем pyuic5 fading.ui -o fading_ui.py -x

fading_ui.py

from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(691, 488) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget) self.horizontalLayout.setObjectName("horizontalLayout") self.tabWidget = FaderTabWidget(self.centralwidget) self.tabWidget.setObjectName("tabWidget") self.tab = QtWidgets.QWidget() self.tab.setObjectName("tab") self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.tab) self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.calendarWidget = QtWidgets.QCalendarWidget(self.tab) self.calendarWidget.setObjectName("calendarWidget") self.horizontalLayout_2.addWidget(self.calendarWidget) self.tabWidget.addTab(self.tab, "") self.tab_2 = QtWidgets.QWidget() self.tab_2.setObjectName("tab_2") self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.tab_2) self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.plainTextEdit = QtWidgets.QPlainTextEdit(self.tab_2) self.plainTextEdit.setObjectName("plainTextEdit") self.horizontalLayout_3.addWidget(self.plainTextEdit) self.tabWidget.addTab(self.tab_2, "") self.horizontalLayout.addWidget(self.tabWidget) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 691, 21)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) self.tabWidget.setCurrentIndex(1) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "Tab 1")) self.plainTextEdit.setPlainText(_translate("MainWindow", "Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! ")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Tab 2")) from fadertabwidget import FaderTabWidget # . 
  • создаем модуль fadertabwidget.py
from PyQt5.Qt import * class FaderWidget(QWidget): def __init__(self, *args, **kwargs): QWidget.__init__(self, *args, **kwargs) self.pixmap_opacity = None self.timeline = QTimeLine(333, self) self.timeline.valueChanged.connect(self.animate) self.timeline.finished.connect(self.close) def start(self, old_widget, new_widget): self.pixmap_opacity = 1.0 self.old_pixmap = QPixmap(new_widget.size()) old_widget.render(self.old_pixmap) self.timeline.start() self.resize(new_widget.size()) self.show() def paintEvent(self, event): if self.pixmap_opacity: QWidget.paintEvent(self, event) painter = QPainter(self) painter.setOpacity(self.pixmap_opacity) painter.drawPixmap(0, 0, self.old_pixmap) def animate(self, value): self.pixmap_opacity = 1.0 - value self.update() class FaderTabWidget(QTabWidget): def __init__(self, parent=None): QTabWidget.__init__(self, parent) self.currentChanged.connect(self.onCurrentIndex) self.last = -1 self.current = self.currentIndex() def onCurrentIndex(self, index): self.last = self.current self.current = self.currentIndex() if self.widget(self.last): self.widget(self.last).setCurrentIndex(1) old_widget = self.widget(self.last).widget(0) current_widget = self.widget(self.current).widget(0) fade = self.widget(self.current).widget(1) fade.start(old_widget, current_widget) def addTab(self, widget, text): stack = QStackedWidget(self) stack.addWidget(widget) fade = FaderWidget(self) fade.timeline.finished.connect(lambda: stack.setCurrentIndex(0)) stack.addWidget(fade) stack.setCurrentIndex(0 if self.currentIndex() == -1 else 1) QTabWidget.addTab(self, stack, text) 
import sys from PyQt5.Qt import * from fading_ui import Ui_MainWindow # +++ class Window(QMainWindow, Ui_MainWindow): # +++ Ui_MainWindow def __init__(self): super(Window, self).__init__() # uic.loadUi('fading.ui', self) # --- self.setupUi(self) # +++ self.tabWidget.setTabText(0, "Tab 1") # + self.tabWidget.setTabText(1, "Tab 2") # + # self.tabWidget = FaderTabWidget() # --- self.tabWidget.addTab(QCalendarWidget(), "Tab3") self.tabWidget.addTab(QTextEdit('Hello World'), "Tab4") if __name__ == "__main__": app = QApplication(sys.argv) w = Window() w.show() sys.exit(app.exec_()) 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *