From 0433908ae86c65e33c511bf2c1eaa07abe00df05 Mon Sep 17 00:00:00 2001 From: Travis Abendshien <46939827+CyanVoxel@users.noreply.github.com> Date: Tue, 30 Jun 2026 02:22:48 -0700 Subject: [PATCH] refactor: remove QPushButtonWrapper --- src/tagstudio/qt/mixed/migration_modal.py | 16 ++++++------- src/tagstudio/qt/mixed/pagination.py | 29 +++++++++++------------ src/tagstudio/qt/views/qbutton_wrapper.py | 21 ---------------- src/tagstudio/qt/views/thumb_button.py | 6 ++--- 4 files changed, 23 insertions(+), 49 deletions(-) delete mode 100644 src/tagstudio/qt/views/qbutton_wrapper.py diff --git a/src/tagstudio/qt/mixed/migration_modal.py b/src/tagstudio/qt/mixed/migration_modal.py index 7f21f825..93e983a1 100644 --- a/src/tagstudio/qt/mixed/migration_modal.py +++ b/src/tagstudio/qt/mixed/migration_modal.py @@ -16,6 +16,7 @@ from PySide6.QtWidgets import ( QLabel, QMessageBox, QProgressDialog, + QPushButton, QSizePolicy, QVBoxLayout, QWidget, @@ -47,7 +48,6 @@ from tagstudio.qt.translations import Translations from tagstudio.qt.utils.custom_runnable import CustomRunnable from tagstudio.qt.utils.function_iterator import FunctionIterator from tagstudio.qt.views.paged_body_wrapper import PagedBodyWrapper -from tagstudio.qt.views.qbutton_wrapper import QPushButtonWrapper from tagstudio.qt.views.stylesheets.stylesheets import header logger = structlog.get_logger(__name__) @@ -99,8 +99,8 @@ class JsonMigrationModal(QObject): body_wrapper.layout().addWidget(body_label) body_wrapper.layout().setContentsMargins(0, 36, 0, 0) - cancel_button = QPushButtonWrapper(Translations["generic.cancel"]) - next_button = QPushButtonWrapper(Translations["generic.continue"]) + cancel_button = QPushButton(Translations["generic.cancel"]) + next_button = QPushButton(Translations["generic.continue"]) cancel_button.clicked.connect(self.migration_cancelled.emit) self.stack.append( @@ -289,14 +289,12 @@ class JsonMigrationModal(QObject): self.body_wrapper_01.layout().addWidget(desc_label) self.body_wrapper_01.layout().setSpacing(12) - back_button = QPushButtonWrapper(Translations["generic.navigation.back"]) - start_button = QPushButtonWrapper(Translations["json_migration.start_and_preview"]) + back_button = QPushButton(Translations["generic.navigation.back"]) + start_button = QPushButton(Translations["json_migration.start_and_preview"]) start_button.setMinimumWidth(120) start_button.clicked.connect(self.migrate) start_button.clicked.connect(lambda: start_button.setDisabled(True)) - finish_button: QPushButtonWrapper = QPushButtonWrapper( - Translations["json_migration.finish_migration"] - ) + finish_button = QPushButton(Translations["json_migration.finish_migration"]) finish_button.setMinimumWidth(120) finish_button.setDisabled(True) finish_button.clicked.connect(self.finish_migration) @@ -381,7 +379,7 @@ class JsonMigrationModal(QObject): pb.setMinimum(1), pb.setValue(1), # Enable the finish button - cast(QPushButtonWrapper, self.stack[1].buttons[4]).setDisabled(False), + cast(QPushButton, self.stack[1].buttons[4]).setDisabled(False), ) ) QThreadPool.globalInstance().start(r) diff --git a/src/tagstudio/qt/mixed/pagination.py b/src/tagstudio/qt/mixed/pagination.py index 989c7e5b..5a58058b 100644 --- a/src/tagstudio/qt/mixed/pagination.py +++ b/src/tagstudio/qt/mixed/pagination.py @@ -5,15 +5,15 @@ """A pagination widget created for TagStudio.""" from typing import cast, override +from warnings import catch_warnings from PIL import Image, ImageQt from PySide6.QtCore import QSize, Signal from PySide6.QtGui import QIntValidator, QPixmap -from PySide6.QtWidgets import QHBoxLayout, QLabel, QLineEdit, QSizePolicy, QWidget +from PySide6.QtWidgets import QHBoxLayout, QLabel, QLineEdit, QPushButton, QSizePolicy, QWidget from tagstudio.qt.helpers.color_overlay import auto_theme_overlay from tagstudio.qt.resource_manager import ResourceManager -from tagstudio.qt.views.qbutton_wrapper import QPushButtonWrapper class Pagination(QWidget): @@ -21,8 +21,8 @@ class Pagination(QWidget): index = Signal(int) - def __init__(self, parent=None) -> None: - super().__init__(parent) + def __init__(self, parent: QWidget | None = None) -> None: + super().__init__(parent=parent) self.rm = ResourceManager() self.page_count: int = 0 self.current_page_index: int = 0 @@ -43,7 +43,7 @@ class Pagination(QWidget): self.root_layout.setSpacing(3) # [<] ---------------------------------- - self.prev_button = QPushButtonWrapper() + self.prev_button = QPushButton() prev_icon: Image.Image = self.rm.bxs_left_arrow prev_icon = auto_theme_overlay(prev_icon, use_alpha=False) self.prev_button.setIcon(QPixmap.fromImage(ImageQt.ImageQt(prev_icon))) @@ -52,7 +52,7 @@ class Pagination(QWidget): self.prev_button.setMaximumSize(self.button_size) # --- [1] ------------------------------ - self.start_button = QPushButtonWrapper() + self.start_button = QPushButton() self.start_button.setMinimumSize(self.button_size) self.start_button.setMaximumSize(self.button_size) @@ -91,12 +91,12 @@ class Pagination(QWidget): self.end_ellipses.setText(". . .") # ----------------------------- [42] --- - self.end_button = QPushButtonWrapper() + self.end_button = QPushButton() self.end_button.setMinimumSize(self.button_size) self.end_button.setMaximumSize(self.button_size) # ---------------------------------- [>] - self.next_button = QPushButtonWrapper() + self.next_button = QPushButton() next_icon: Image.Image = self.rm.bxs_right_arrow next_icon = auto_theme_overlay(next_icon, use_alpha=False) self.next_button.setIcon(QPixmap.fromImage(ImageQt.ImageQt(next_icon))) @@ -223,7 +223,7 @@ class Pagination(QWidget): ) self._assign_click( cast( - QPushButtonWrapper, + QPushButton, self.start_buffer_layout.itemAt(i - start_offset).widget(), ), i, @@ -240,7 +240,7 @@ class Pagination(QWidget): self.end_buffer_layout.itemAt(i - end_offset).widget().setText(str(i + 1)) # pyright: ignore[reportAttributeAccessIssue] self._assign_click( cast( - QPushButtonWrapper, + QPushButton, self.end_buffer_layout.itemAt(i - end_offset).widget(), ), i, @@ -268,21 +268,20 @@ class Pagination(QWidget): def _goto_page(self, index: int): self.update_buttons(self.page_count, index) - def _assign_click(self, button: QPushButtonWrapper, index): - if button.is_connected: + def _assign_click(self, button: QPushButton, index: int): + with catch_warnings(record=True): button.clicked.disconnect() button.clicked.connect(lambda checked=False, i=index: self._goto_page(i)) - button.is_connected = True def _populate_buffer_buttons(self): for _ in range(max(self.buffer_page_count * 2, 5)): - button = QPushButtonWrapper() + button = QPushButton() button.setMinimumSize(self.button_size) button.setMaximumSize(self.button_size) button.setHidden(True) self.start_buffer_layout.addWidget(button) - end_button = QPushButtonWrapper() + end_button = QPushButton() end_button.setMinimumSize(self.button_size) end_button.setMaximumSize(self.button_size) end_button.setHidden(True) diff --git a/src/tagstudio/qt/views/qbutton_wrapper.py b/src/tagstudio/qt/views/qbutton_wrapper.py deleted file mode 100644 index c6f90e32..00000000 --- a/src/tagstudio/qt/views/qbutton_wrapper.py +++ /dev/null @@ -1,21 +0,0 @@ -# SPDX-FileCopyrightText: (c) TagStudio Contributors -# SPDX-License-Identifier: GPL-3.0-only - - -from PySide6.QtWidgets import QPushButton -from typing_extensions import deprecated - - -@deprecated("Use QPushButton with 'catch warnings' to silence disconnect warnings instead.") -class QPushButtonWrapper(QPushButton): - """Custom QPushButton wrapper. - - This is a customized implementation of the PySide6 QPushButton that allows to suppress - the warning that is triggered by disconnecting a signal that is not currently connected. - """ - - is_connected: bool - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self.is_connected = False diff --git a/src/tagstudio/qt/views/thumb_button.py b/src/tagstudio/qt/views/thumb_button.py index 6ab99ef3..11879c39 100644 --- a/src/tagstudio/qt/views/thumb_button.py +++ b/src/tagstudio/qt/views/thumb_button.py @@ -16,12 +16,10 @@ from PySide6.QtGui import ( QPalette, QPen, ) -from PySide6.QtWidgets import QWidget - -from tagstudio.qt.views.qbutton_wrapper import QPushButtonWrapper +from PySide6.QtWidgets import QPushButton, QWidget -class ThumbButton(QPushButtonWrapper): +class ThumbButton(QPushButton): def __init__(self, parent: QWidget, thumb_size: tuple[int, int]) -> None: super().__init__(parent) self.thumb_size: tuple[int, int] = thumb_size