Как сделать корректное удаление вкладок QTabWidget?
Не получается удалить все вкладки в QTabWidget
кроме вкладки с нулевым индексом. Какие-то из них не удаляются, хотя сохранить нужно только нулевую вкладку.
Пробовал через .clear()
и добавление общей вкладки "Все" - вроде бы что-то получалось, но сейчас не получается воспроизвести это даже как примерную ветку решения...
Ощущение, что .removeTab()
игнорирует их. Индексы, кажется, соблюдаются...
Как всё-таки удалить при клике на кнопку все вкладки, кроме вкладки с нулевым индексом, заполнить их новыми с названиями из списка в методе, чтобы при клике на них также выводились имена этих вкладок?
main.py
import sys
from PyQt5 import QtWidgets
from ui import untitled
class MainWindow(QtWidgets.QMainWindow, untitled.Ui_MainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setupUi(self)
self.tabs = ["sun", "moon", "weather"] # Вкладки при инициализации
count_tab = len(self.tabs)
for i in range(1, count_tab+1): # первая вкладка должна остаться
tab = QtWidgets.QWidget()
self.tabWidget.addTab(tab, self.tabs[i-1])
self.tabWidget.tabBarClicked.connect(self.click_tab)
self.pushButton.clicked.connect(lambda: self.fill_tabs(0))
self.pushButton_2.clicked.connect(lambda: self.fill_tabs(1))
def click_tab(self, tab_index): # Метод, возвращающий название вкладки
tab_name = self.tabWidget.tabText(tab_index)
print(tab_name)
def fill_tabs(self, btn):
if self.tabWidget.count() > 1: # Если были заполнены вкладки, то удаляем старые
for i in range(1, self.tabWidget.count()):
self.tabWidget.removeTab(i)
if btn == 0: # Если нажали "Добавить новые"
new_tabs = ["Tea", "Coffee"]
count_tab = len(new_tabs)
for i in range(1, count_tab + 1): # первая вкладка должна остаться
tab = QtWidgets.QWidget()
self.tabWidget.addTab(tab, new_tabs[i - 1]) # Добавляем 2 новые
elif btn == 1: # Если нажали "Вернуть старые"
count_tab = len(self.tabs)
for i in range(1, count_tab + 1): # первая вкладка должна остаться
tab = QtWidgets.QWidget()
self.tabWidget.addTab(tab, self.tabs[i - 1]) # заполняем тем, что было
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()
untitled.py (конвертировал из .ui в .py)
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(544, 346)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
self.tabWidget.setGeometry(QtCore.QRect(140, 40, 311, 201))
self.tabWidget.setObjectName("tabWidget")
self.tab = QtWidgets.QWidget()
self.tab.setObjectName("tab")
self.tabWidget.addTab(self.tab, "")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(20, 70, 75, 23))
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(20, 140, 75, 23))
self.pushButton_2.setObjectName("pushButton_2")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 544, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
self.tabWidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "Все"))
self.pushButton.setText(_translate("MainWindow", "Add_new"))
self.pushButton_2.setText(_translate("MainWindow", "Return_old"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Источник: Stack Overflow на русском