forked from CastroFidel/winehelper
changing the tab display in the main window
This commit is contained in:
@@ -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):
|
||||
"""Включает или выключает кнопку 'Создать префикс' в зависимости от заполнения полей."""
|
||||
|
Reference in New Issue
Block a user