changing the tab display in the main window

This commit is contained in:
Sergey Palcheh
2025-08-25 13:03:36 +06:00
parent a4f01e7340
commit cefb3c8d5a

View File

@@ -10,7 +10,7 @@ import time
import json
import hashlib
from functools import partial
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,QPushButton, QLabel, QTabWidget,
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,QPushButton, QLabel, QTabWidget, QTabBar,
QTextEdit, QFileDialog, QMessageBox, QLineEdit, QCheckBox, QStackedWidget, QScrollArea, QFormLayout, QGroupBox, QRadioButton, QComboBox,
QListWidget, QListWidgetItem, QGridLayout, QFrame, QDialog, QTextBrowser)
from PyQt5.QtCore import Qt, QProcess, QSize, QTimer, QProcessEnvironment, QPropertyAnimation, QEasingCurve
@@ -1275,19 +1275,26 @@ class WineHelperGUI(QMainWindow):
# Создаем главный виджет и layout
self.main_widget = QWidget()
self.setCentralWidget(self.main_widget)
self.main_layout = QHBoxLayout()
self.main_layout = QVBoxLayout()
self.main_widget.setLayout(self.main_layout)
# Создаем табы
self.tabs = QTabWidget()
self.main_layout.addWidget(self.tabs, stretch=1)
# Создаем кастомную панель вкладок и виджет со страницами
self.tab_bar = QTabBar()
self.stacked_widget = QStackedWidget()
self.main_layout.addWidget(self.tab_bar)
# Горизонтальный layout для страниц и инфо-панели
content_layout = QHBoxLayout()
content_layout.addWidget(self.stacked_widget, stretch=1)
# Создаем панель информации о скрипте
self.create_info_panel()
self.main_layout.addWidget(self.info_panel, stretch=1)
content_layout.addWidget(self.info_panel, stretch=1)
self.main_layout.addLayout(content_layout)
# Фиксируем минимальные размеры
self.tabs.setMinimumWidth(520)
self.stacked_widget.setMinimumWidth(520)
self.info_panel.setMinimumWidth(415)
# Вкладки
@@ -1304,9 +1311,10 @@ class WineHelperGUI(QMainWindow):
self.update_installed_apps()
# Соединяем сигнал смены вкладок с функцией
self.tabs.currentChanged.connect(self.on_tab_changed)
self.tab_bar.currentChanged.connect(self.stacked_widget.setCurrentIndex)
self.tab_bar.currentChanged.connect(self.on_tab_changed)
# Устанавливаем начальное состояние видимости панели
self.on_tab_changed(self.tabs.currentIndex())
self.on_tab_changed(self.tab_bar.currentIndex())
def activate(self):
"""
@@ -1319,6 +1327,11 @@ class WineHelperGUI(QMainWindow):
self.raise_()
self.activateWindow()
def add_tab(self, widget, title):
"""Добавляет вкладку в кастомный TabBar и страницу в StackedWidget."""
self.tab_bar.addTab(title)
self.stacked_widget.addWidget(widget)
def _reset_info_panel_to_default(self, tab_name):
"""Сбрасывает правую панель в состояние по умолчанию для указанной вкладки."""
if tab_name == "Автоматическая установка":
@@ -1360,7 +1373,7 @@ class WineHelperGUI(QMainWindow):
def on_tab_changed(self, index):
"""Скрывает или показывает панель информации в зависимости от активной вкладки."""
# Очищаем поле поиска на вкладке, которую покинули
previous_widget = self.tabs.widget(self.previous_tab_index)
previous_widget = self.stacked_widget.widget(self.previous_tab_index)
if previous_widget:
# Ищем QLineEdit в дочерних элементах
search_edit = previous_widget.findChild(QLineEdit)
@@ -1370,7 +1383,7 @@ class WineHelperGUI(QMainWindow):
# Обновляем индекс предыдущей вкладки для следующего переключения
self.previous_tab_index = index
current_tab_text = self.tabs.tabText(index)
current_tab_text = self.tab_bar.tabText(index)
# Сбрасываем растяжение к состоянию по умолчанию:
# растягивается виджет с описанием (индекс 1), а не виджет с действиями (индекс 4)
@@ -1738,7 +1751,7 @@ class WineHelperGUI(QMainWindow):
buttons_list = []
self._populate_install_grid(grid_layout, scripts, script_folder, buttons_list)
self.tabs.addTab(tab_widget, tab_title)
self.add_tab(tab_widget, tab_title)
return scripts, buttons_list, grid_layout, search_edit, scroll_area
@@ -1773,7 +1786,7 @@ class WineHelperGUI(QMainWindow):
installed_tab, self.installed_scroll_layout, self.installed_search_edit, self.installed_scroll_area = self._create_searchable_grid_tab(
"Поиск установленной программы...", self.filter_installed_buttons
)
self.tabs.addTab(installed_tab, "Установленные")
self.add_tab(installed_tab, "Установленные")
def open_wine_version_dialog(self):
"""Открывает диалог выбора версии Wine."""
@@ -1846,7 +1859,7 @@ class WineHelperGUI(QMainWindow):
self.create_prefix_button.clicked.connect(self.start_prefix_creation)
layout.addWidget(self.create_prefix_button)
self.tabs.addTab(self.prefix_tab, "Создать префикс")
self.add_tab(self.prefix_tab, "Создать префикс")
self.arch_win32_radio.toggled.connect(self.clear_wine_version_selection)
self.prefix_name_edit.textChanged.connect(self.update_create_prefix_button_state)
@@ -1970,7 +1983,7 @@ class WineHelperGUI(QMainWindow):
changelog_layout.addWidget(changelog_text)
help_subtabs.addTab(changelog_tab, "История изменений")
self.tabs.addTab(help_tab, "Справка")
self.add_tab(help_tab, "Справка")
def update_create_prefix_button_state(self):
"""Включает или выключает кнопку 'Создать префикс' в зависимости от заполнения полей."""