Предположим есть интерфейс на PyQt5, в интерфейсе есть элемент класса QTabWidget.
В нем реализовано несколько вкладок (например 7 вкладок). В каждой вкладке может быть свой функционал, но сейчас это не важно. Некоторые вкладки используются редко и нам незачем их отображать постоянно. Стоит задача оперативно управлять количеством вкладок.
Нужно сделать таким образом, чтобы когда мы в верхнем меню ставили галочку
интерфейс расширенный - отображаются все вкладки, снимаем галочку - вкладки по умолчанию.
Итак приступим.
Итак есть интерфейс на PyQt5, в интерфейсе есть элемент класса QTabWidget. В нем реализовано несколько вкладок (например 7 вкладок). Есть также QMenuBar с title «Интерфейс», в нем есть chekable элемент QAction c текстом «расширенный». Сделаем так, чтобы «по умолчанию» отображались 1,2,3,6 и 7 вкладки. Начнем с создания интерфейса и реализации требуемого функционала.
Python
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTabWidget, QWidget, QVBoxLayout, QAction, QMenuBar
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("Интерфейс")
self.tabWidget = QTabWidget()
self.tabs = [QWidget() for _ in range(7)]
self.tab_names = ['Вкладка 1', 'Вкладка 2', 'Вкладка 3', 'Вкладка 4', 'Вкладка 5', 'Вкладка 6', 'Вкладка 7']
for i, tab in enumerate(self.tabs):
self.tabWidget.addTab(tab, self.tab_names[i])
self.setCentralWidget(self.tabWidget)
menubar = self.menuBar()
interface_menu = menubar.addMenu('Интерфейс')
self.extended_action = QAction('расширенный', self, checkable=True)
self.extended_action.triggered.connect(self.toggle_extended_mode)
interface_menu.addAction(self.extended_action)
self.show_tabs([0, 1, 2, 5, 6])
def toggle_extended_mode(self, checked):
if checked:
self.show_tabs(list(range(7)))
else:
self.show_tabs([0, 1, 2, 5, 6])
def show_tabs(self, indexes):
current_tabs = [self.tabWidget.widget(i) for i in range(self.tabWidget.count())]
for tab in current_tabs:
self.tabWidget.removeTab(self.tabWidget.indexOf(tab))
for i in indexes:
self.tabWidget.addTab(self.tabs[i], self.tab_names[i])
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show() # Отображение основного окна
sys.exit(app.exec_())
Этот код создает основное окно с QTabWidget и QMenuBar. В QMenuBar добавлен пункт «Интерфейс» с чекбоксом «расширенный».
Вот шаги, которые выполняет код:
- Создание вкладок: Создаются семь вкладок и добавляются в QTabWidget.
- Создание меню: Создается меню «Интерфейс» с чекбоксом «расширенный».
- Обработчик чекбокса: При клике на чекбокс вызывается метод
toggle_extended_mode, который отображает либо все вкладки, либо только определенные. - Метод
show_tabs: Этот метод удаляет все вкладки из QTabWidget и добавляет обратно только те, которые указаны в спискеindexes.
Теперь при запуске вкладки будут отображаться в соответствии с состоянием элемента QAction «расширенный».