Создаем проект
Вот мы в прошлых заданиях использовали кнопочку, чтобы посчитать результат.
Но на самом деле есть возможность рассчитывать значения прямо на лету. Для этого можно привязывать функции не к событию клика, а к событию изменения текста в полях для ввода.
Попробуем набросать приложение для расчета квадратных корней, а вы потом уже доделаете его до конца сами.
И так, как обычно, создаем новый проект с файликом main.py

сразу загоним в него болванку python кода
import sys
import os
import PySide6
from PySide6.QtWidgets import QApplication, QMainWindow
from mainwindow import Ui_MainWindow
dirname = os.path.dirname(PySide6.__file__)
plugin_path = os.path.join(dirname, 'plugins', 'platforms')
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = plugin_path
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
Верстаем интерфейс
Запустим pyside6-designer. Как обычно тыкаем Ctrl+Shift+P
и находим там Python: Создать терминал
и вводим pyside6-designer

тыкаем создать

добавим на форму три поля для ввода и четыре метки

кстати у меток можно менять текст если на них два раза тыкнуть. Я верхние три буду использовать просто чтобы подписать что вводить в поля для ввода. Ну помним же квадратное уравнение:

собственно, первое поле ввода под a
, второе под b
, третье под c

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

напоминаю, что имя мы указываем кликая на элемент и прописывая свойство objectName
:

давайте теперь все выровняем:

увеличим шрифт у метки для ответа

и отцентрируем ее (для этого надо ее растянуть и поставить свойство alignment):

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

сохраняем файлик и называем его как обычно MainWindow.ui

проверяем что файлик появился в Visual Studio Code

и если все ок, то закрываем дизайнер

Добавляем реакцию на изменение текста в полях для ввода
Скомпилируем интерфейс в питон файл
pyside6-uic MainWindow.ui -o mainwindow.py
теперь давайте попробуем реализовать какой-нибудь простой расчет типа сложить три числа.
Добавим функцию расчета
# ...
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
# добавил функцию расчета
def compute(self):
a = int(self.ui.txtA.text())
b = int(self.ui.txtB.text())
c = int(self.ui.txtC.text())
self.ui.lblAnswer.setText(f"{a + b + c}")
# ...
попробуем запустить

пока никакой реакции нет, но оно и понятно. Не смотря на то что мы добавили функцию, сам расчет то ни откуда не запускается, так как кнопки то нет.
Оказывается, расчет можно запускать по событию изменения текста в полях для ввода, делается это так:
# ...
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
# добавил реакцию на событие изменения текста
self.ui.txtA.textChanged.connect(self.compute)
# ...
тестируем:

то есть получается если мы меняем текст в первом поле для ввода, то программа, при условии, что в остальных полях тоже есть числа, начинает считать.
Мы можем привязать эту функцию расчёта ко оставшимся двум полям:
# ...
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.txtA.textChanged.connect(self.compute)
# добавил реакцию оставшимся полям
self.ui.txtB.textChanged.connect(self.compute)
self.ui.txtC.textChanged.connect(self.compute)
# ...
проверяем:

Красота! =)
То есть теперь мы можем реализовывать любой достаточно сложный расчет внутри функции compute.
Думаю, идея ясна, попробуйте сделать задание =О
Задание
Создать приложение, которое сможет рассчитать корни квадратного уравнения

чтобы вывести x с индексом можно использовать html тег sub
, вот так:
self.ui.lblAnswer.setText(f"x<sub>1</sub> = {x1}<br>x<sub>2</sub> = {x2}")
<br>
- сделает перенос на новую строку