Привет!
Пишу программу с GUI. Есть главный класс, в нем определен метод который при инициализации строит интерфейс. В этом интерфейсе(часть его) есть одна вкладка, а так же 2 кнопки - добавить и удалить вкладку. наполнение вкладки реализовано в другом методе, так как наполнение одинаковое.
Нужно чтобы было так: при открытии программы должна появиться одна вкладка, кнопка добавить должна быть активной, а кнопка удалить не активной, так как последнюю вкладку закрыть нельзя. после добавления вкладки кнопкой "Добавить" кнопка "Удалить" становится активной( до момента пока не останется всего 1 вкладка).
Как у меня идет в коде(основные куски):
Добавление вкладки, где происходит вызов метода добавления
self.H2layout = QtWidgets.QHBoxLayout()
self.tabWidgets = QtWidgets.QTabWidget(self)
self.tabWidgets.setGeometry(QtCore.QRect(10, 170, 541, 351))
self.addProjectTab()
self.H2layout.addWidget(self.tabWidgets)
self.Vlayout.addLayout(self.H2layout)
Далее ниже идет добавления кнопок:
self.buttonAddProject = QtWidgets.QPushButton(self.frame)
self.buttonAddProject.setGeometry(QtCore.QRect(266, 5, 131, 23))
self.buttonAddProject.setText('Добавить проект')
self.buttonAddProject.clicked.connect(self.addProjectTab)
self.buttonDelProject = QtWidgets.QPushButton(self.frame)
self.buttonDelProject.setGeometry(QtCore.QRect(406, 5, 131, 23))
self.buttonDelProject.setText('Удалить этот проект')
self.buttonDelProject.setEnabled(False)
self.buttonDelProject.clicked.connect(self.delProjectTab)
Далее идет метод, который добавляет вкладку с содержимым(содержимое опустил, оно не важно, добавляется корректно):
def addProjectTab(self):
self.buttonDelProject.setEnabled(True)
self.tab = QtWidgets.QWidget()
...
Ну и удаление вкладки:
def delProjectTab(self):
if self.tabWidgets.count() > 1:
self.tabWidgets.removeTab(self.tabWidgets.currentIndex())
if self.tabWidgets.count() == 1:
self.buttonDelProject.setEnabled(False)
else:
self.buttonDelProject.setEnabled(True)
else:
pass
При таком раскладе я получаю конечно же ошибку: "AttributeError: 'mainForm' object has no attribute 'buttonDelProject'"
Оно и понятно, так как у меня идет вызов добавления вкладки, а там первой строчкой идет что нужно сделать кнопку "Удалить" активной, когда по коду кнопки еще даже не существует.
Вот у меня вопрос: как правильно оформить код чтобы нормально реализовывалось вышеописанное?
Варианты у меня такие:
- поменять местами добавление кнопок и добавление вкладки, но тут придется немного мудрить, так как порядок слоев уже будет не тот
- спустить вызов self.addProjectTab() ниже создания кнопок + добавить условие как в методе delProjectTab на определение количества вкладок и в зависимости от этого активировать или деактивировать кнопку "Удалить"
Подскажите правильный способ.
UPD:
еще вариант оставить всё как есть, но в "addProjectTab" обернуть в try-except "self.buttonDelProject.setEnabled(True)"