Пов’язування файлу qtDesigner .ui з python / pyqt?


81

Отже, якщо я заходжу в QtDesigner і будую користувальницький інтерфейс, він буде збережений як файл .ui. Як я можу зробити це як файл python або використовувати це в python?


1
Я використав PySide QUiLoader для досягнення саме цього - див. Допис [4442286] [1] [1]: stackoverflow.com/questions/4442286
Свен

Наступний метод є ще більш практичним: stackoverflow.com/questions/14892713 / ...
ILED

Відповіді:


62

Іншим способом використання .ui у коді є:

from PyQt4 import QtCore, QtGui, uic
class MyWidget(QtGui.QWidget)
    ...
    #somewhere in constructor:
    uic.loadUi('MyWidget.ui', self)

обидва підходи хороші. Не забувайте, що якщо ви використовуєте файли ресурсів Qt (надзвичайно корисні) для значків тощо, ви також повинні їх скомпілювати:

pyrcc4.exe -o ui/images_rc.py ui/images/images.qrc

Зверніть увагу, що під час uicкомпіляції інтерфейсу він додає 'import images_rc' в кінці файлу .py, тому вам потрібно скомпілювати ресурси у файл із цим ім'ям або перейменувати його у згенерованому коді.


2
Чи можете ви додати, як отримати доступ до змінної після того, як ви це зробите? Такі як pushButton?
Джонатан

3
@JonathanLeaders Якщо у файлі .ui є кнопка, ви просто викликаєте її так: self.pushButton. Ви також можете завантажити інтерфейс користувача до будь-якого потрібного атрибута класу: uic.loadUi ('uifile.ui', self.ui) і викликати віджети та інше, як self.ui.pushButton.
Максим Поправко

49

Поєднуючи відповідь Макса та публікацію списку розсилки Шрірамани Шарми , я створив невеликий робочий приклад завантаження mywindow.uiфайлу, що містить файл QMainWindow(тому просто виберіть створити головне вікно в File-Newдіалоговому вікні Qt Designer ).

Це код, який його завантажує:

import sys
from PyQt4 import QtGui, uic

class MyWindow(QtGui.QMainWindow):
    def __init__(self):
        super(MyWindow, self).__init__()
        uic.loadUi('mywindow.ui', self)
        self.show()

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    window = MyWindow()
    sys.exit(app.exec_())

3
Це має бути найкращою відповіддю, оскільки це повний приклад.
Франческо Паса

29

Вам потрібно згенерувати файл python з вашого інтерфейсу користувача за допомогою інструмента pyuic (site-пакети \ pyqt4 \ bin)

pyuic form1.ui > form1.py

з pyqt4

pyuic4.bat form1.ui > form1.py

Потім ви можете імпортувати form1 у свій сценарій.


25

Я знайшов цю статтю дуже корисною.

http://talk.maemo.org/archive/index.php/t-43663.html

Я коротко опишу дії щодо створення та зміни файлу .ui на файл .py, взяті з цієї статті.

  1. Запустіть Qt Designer із меню "Пуск".
  2. У вікні "Нова форма" створіть "Головне вікно"
  3. Від "Відображення віджетів" до нижньої частини "Меню віконця" зліва
    додайте "Віджет етикетки". (Клацніть перетягуванням)
  4. Двічі клацніть на нещодавно доданому віджеті Label, щоб змінити його назву на "Hello World"
  5. на цьому етапі ви можете скористатися комбінацією клавіш Control + R, щоб побачити, як це буде виглядати.
  6. Додайте кнопки, текст або інші віджети, перетягуючи, якщо хочете.
  7. Тепер збережіть форму .. File-> Save As-> «Hello World.ui» (Control + S буде також викликати
    опцію «Зберегти як») Тримайте примітка каталогу , в якому ви зберегли свій «Hello World» .ui
    файл . (Я зберегла своє в (C :) для зручності)

Файл створено та збережено, тепер ми створимо з нього код Python за допомогою pyuic!

  1. З меню "Пуск" відкрийте вікно команд.
  2. Тепер "cd" у каталог, де ви зберегли "Hello World.ui". Для мене мені просто довелося "cd \" і було в моєму запиті "C:>", де мій "Hello World.ui" був збережений.
  3. Коли ви потрапите в каталог, де зберігається ваш файл, введіть наступне.
  4. pyuic4 -x helloworld.ui -o helloworld.py
  5. Вітаю !! Тепер у вас є графічний інтерфейс програми python Qt4 !!
  6. Двічі клацніть файл helloworld.py, щоб запустити його. (Я використовую pyscripter, і при подвійному клацанні
    він відкривається в pyscripter, після чого я "запускаю" файл звідти)

Сподіваюся, це комусь допомагає.


1
Я компілював за допомогою: pyuic4 helloworld.ui> helloworld.py. Потрібно передати аргументи -x та -o аргументу pyuic4. Спасибі за інформацію!.
muammar

Чудове пояснення, особливо те, що "генерація графічного інтерфейсу" -коду насправді знаходиться у створеному файлі, мені допомогло, ура!
Вальмонд

16

Ви також можете використовувати uicв PyQt5 наступний код.

from PyQt5 import uic, QtWidgets
import sys

class Ui(QtWidgets.QDialog):
    def __init__(self):
        super(Ui, self).__init__()
        uic.loadUi('SomeUi.ui', self)
        self.show()

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = Ui()
    sys.exit(app.exec_())

12

На мою думку, більш чистий спосіб - це спочатку експортувати до .py, як зазначено вище:

pyuic4 foo.ui > foo.py

А потім використовуйте його всередині свого коду (наприклад main.py), наприклад:

from foo import Ui_MyWindow


class MyWindow(QtGui.QDialog):
    def __init__(self):
        super(MyWindow, self).__init__()

        self.ui = Ui_MyWindow()
        self.ui.setupUi(self)

        # go on setting up your handlers like:
        # self.ui.okButton.clicked.connect(function_name)
        # etc...

def main():
    app = QtGui.QApplication(sys.argv)
    w = MyWindow()
    w.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

Цей спосіб дає можливість іншим людям, які не використовують qt-designer, читати код, а також зберігає ваш код функціональності зовні, foo.pyякий може бути перезаписаний дизайнером. Ви просто посилаєтесь uiна MyWindowклас, як видно вище.


self.ui.okButton.clicked.connect(self.function_name)дає мені TypeError: event() takes 1 positional argument but 2 were given. Як ти це вирішив?
Ahsanul Haque

9

Ви можете перетворити свої файли .ui у виконуваний файл python, використовуючи команду нижче.

pyuic4 -x form1.ui > form1.py

Тепер ви можете негайно виконати файл python як

python3(whatever version) form1.py

Ви можете імпортувати цей файл і можете використовувати його.


FYI Якщо ви пропустите параметр -x, ви не отримаєте частину коду, яка створює та запускає додаток. Я бачив декілька відповідей, в яких пропущено "-x". Ця відповідь є найбільш повною.
Не машина

5

Ви можете скомпілювати файли інтерфейсу користувача таким чином

pyuic4 -x helloworld.ui -o helloworld.py

4

Для того, щоб скомпілювати файли .ui у файли .py, я зробив:

python pyuic.py form1.ui > form1.py

Att.


2

в pyqt5 для перетворення з користувацького файлу у файл .py

pyuic5.exe youruifile.ui -o outputpyfile.py -x


0

Використання Anaconda3 (вересень 2018 р.) Та дизайнер QT 5.9.5. У дизайнері QT збережіть файл як інтерфейс користувача. Відкрийте підказку Anaconda. Шукайте свій файл: cd C: .... (скопіюйте / вставте шлях доступу до вашого файлу). Потім напишіть: pyuic5 -x helloworld.ui -o helloworld.py (helloworld = ім'я вашого файлу). Введіть. Запустіть Spyder. Відкрийте файл .py.


0

( Листопад 2020 ) Це спрацювало для мене ( UBUNTU 20.04 ):

pyuic5 /home/someuser/Documents/untitled.ui > /home/someuser/Documents/untitled.py
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.