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