Skip to main content

QT6 desiner

Устанавливается при установке pyqt6-tools

У меня вызвался обычной командой 

(myenv) D:\projects\calclulator_long>pyside6-designer.exe

Типы создаваемых окон:

  • 3 типа диалоговых окон,
  • Основное окно 
  • 10 виджетов.

Различаются родительским классом и наличием дополнительных виджетов (кнопки, ...)

Предпросмотр результата

Блок меню Form - Preview... очень занимательный. 

изображение.png

QT использует стили операционных систем, поэтому вид будет отличаться на разных ОС.  

Слои (Layouts)

Настраивается отдельно тип для всей формы и для группы элементов. 

Настройка для группы элементов: выделяются виджеты, ПКМ - Lay Out - Нужный тип.

image.png

Для всей формы: ПКМ на пустом месте формы - Lay Out - Нужный тип.

image.png

Использование .ui файла

Использование в скрипте

Два варианта: преобразование в py файл и загрузка в py скрипт ui-файла во время выполнения.

Преобразование в python файл:

(myenv) D:\projects\calclulator_long>pyuic6 -x testui.ui -o testuicreated.py

После этого запуск *,py файла откроет пользовательский интерфейс. При изменении *.ui файла необходимо обновить файл исходного кода и связанных процедур.

Загрузка ui файла во время выполнения

from PyQt6.QtWidgets import QApplication, QWidget 
import sys 
from PyQt6 import uic 
 
class UI(QWidget): 
    def __init__(self): 
        super().__init__() 
        uic.loadUi("WindowUI.ui", self) 
 
app = QApplication(sys.argv) 
window = UI() 
window.show() 
app.exec()

Доступ к виджетам внутри .ui файла

Для дальнейшего доступа к виджетам из py скрипта необходимо знать тип виджета и имя объекта. Например, есть виджет типа QLineEdit, имя объекта lineEdit_price.

image.png

Создадим свойство объекта через FindChild

class UI(QWidget): 
    def __init__(self): 
        super().__init__() 
        uic.loadUi("double_spin.ui", self)

        self.linePrice = self.findChild(QLineEdit, "lineEdit_price")

Дальше с этим свойством работать также как с созданным объектом. Пример: 

lass UI(QWidget): 
    def __init__(self): 
        super().__init__() 
        uic.loadUi("double_spin.ui", self)

        self.linePrice = self.findChild(QLineEdit, "lineEdit_price")
        self.doublespin = self.findChild(QDoubleSpinBox, "doubleSpinBox")
        self.doublespin.valueChanged.connect(self.spin_selected)
        self.lineresult = self.findChild(QLineEdit, "lineEdit_total")

    def spin_selected(self):
        if self.linePrice.text() != 0:
            price = int(self.linePrice.text())
            totalPrice = self.doublespin.value() * price
            self.lineresult.setText(str(totalPrice))