Заведите в классе отдельное поле для форм, будет удобнее.
import labaa2
class Laba2(QMainWindow):
def __init__(self):
super().__init__()
self.ui = self.setupUi(self)
Тогда вся форма будет в ui
self.ui.button # например
Дело в том, что QtDesigner создает файлы в "своем формате" (xml, если правильно помню), попробуйте открыть ui файл блокнотом, увидите. Питон ни сном ни духом, что там такое находится и как с этим взаимодействовать, вот тут на сцену и выходит uic. Он преобразует дерево виджетов ui в валидный питоновский класс, который использует установленную питоновскую библиотеку-обертку над Qt.
С uic 2 подхода:
1.
uic.loadUi('TEST.ui', self)
(есть смысл запихнуть это в отдельное поле класса, например,
self.ui = uic.loadUi('TEST.ui', self)
, дабы не возникло не нужных пересечений имен, да и, на мой взгляд, аккуратнее получиться, мало ли еще одну форму в этот же класс грузить будете.)
uic парсит ui файл, и создает сущности. Каждый раз, при запуске программы это будет происходить.
+ Не требует промежуточных звеньев
- Не работает автодополнение IDE
- Парсинг и формирование питон класса при каждом запуске.
2. Конвертация заранее.
- Требует промежуточное действие между формой и программой. (преобразование в ui в py)
+ Работает автодополнение
+ Не тратится время на преобразование при запуске программы.
+ В PyCharm можно настроить конвертацию на горячую клавишу.
Не надо наследовать класс сразу от двух классов, в 99.9% Вам это не надо, а странных для вас эффектов можете огрести.
С использованием предварительной конвертации
Импортируйте сконвертированную форму в самом начале, дайте ей понятное название, потом подключите
import labaa2
from labaa2.Ui_Laba2 import Ui_что_там_у_вас as MainForm_UI
class Laba2(QMainWindow,):
def __init__(self):
super().__init__()
self.ui = MainFormUI()
self.ui.setupUi(self)
теперь вся форма будет в ui, автодополнение работает, Pycharm скорее всего не увидит сигналов, но это нормально, работать они, естественно, будут.
P.S. Pycharm и External tools