common_qt: move QtEventListener and qt_event_listener decorator to common_qt
What changed, and why it matters
This commit is a straightforward internal code cleanup: it moves two shared pieces of Qt GUI plumbing (QtEventListener and the qt_event_listener decorator) from separate QML and Qt GUI utility files into a single common_qt utility file, then updates all the import statements across the project. There is no change to user-facing behavior, no bug fix, and no security-related change.
No security action required. Treat as normal refactoring.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The diff relocates QtEventListener and qt_event_listener from electrum/gui/qml/util.py and electrum/gui/qt/util.py to electrum/gui/common_qt/util.py. The moved implementation is essentially identical; the only functional difference is that the new common version preserves the try/except around qt_callback_signal.disconnect() in unregister_callbacks, whereas the QML version had that line commented out. All other files are updated only to import these symbols from the new shared location. No logic changes are made to how events are handled, emitted, or consumed.
Changed components
electrum/gui/common_qt/util.pyelectrum/gui/qml/util.pyelectrum/gui/qt/util.pyelectrum/gui/qml/*electrum/gui/qt/*Inspect captured patch +92 / −97
diff --git a/electrum/gui/common_qt/util.py b/electrum/gui/common_qt/util.py
index 7eed35a..b28e0c6 100644
--- a/electrum/gui/common_qt/util.py
+++ b/electrum/gui/common_qt/util.py
@@ -1,5 +1,6 @@
import queue
import sys
+from functools import wraps
from typing import Optional, NamedTuple, Callable
import os.path
@@ -10,6 +11,7 @@ import qrcode
from electrum.i18n import _
from electrum.logging import Logger
+from electrum.util import EventListener, event_listener
_cached_font_ids: dict[str, int] = {}
@@ -190,3 +192,33 @@ class TaskThread(QThread, Logger):
self.tasks.put(None) # in case the thread is still waiting on the queue
self.exit()
self.wait()
+
+
+class QtEventListener(EventListener):
+ qt_callback_signal = pyqtSignal(tuple)
+
+ def register_callbacks(self):
+ self.qt_callback_signal.connect(self.on_qt_callback_signal)
+ EventListener.register_callbacks(self)
+
+ def unregister_callbacks(self):
+ try:
+ self.qt_callback_signal.disconnect()
+ except (RuntimeError, TypeError): # wrapped Qt object might be deleted
+ # "TypeError: disconnect() failed between 'qt_callback_signal' and all its connections"
+ pass
+ EventListener.unregister_callbacks(self)
+
+ def on_qt_callback_signal(self, args):
+ func = args[0]
+ return func(self, *args[1:])
+
+
+# decorator for members of the QtEventListener class
+def qt_event_listener(func):
+ func = event_listener(func)
+
+ @wraps(func)
+ def decorator(self, *args):
+ self.qt_callback_signal.emit((func,) + args)
+ return decorator
diff --git a/electrum/gui/qml/qeaddresslistmodel.py b/electrum/gui/qml/qeaddresslistmodel.py
index 2b4dbf4..fa7a546 100644
--- a/electrum/gui/qml/qeaddresslistmodel.py
+++ b/electrum/gui/qml/qeaddresslistmodel.py
@@ -5,10 +5,12 @@ from PyQt6.QtCore import Qt, QAbstractListModel, QModelIndex
from electrum.logging import get_logger
from electrum.util import Satoshis
-from .qeconfig import QEConfig
+from electrum.gui.common_qt.util import QtEventListener, qt_event_listener
+
+from .qeconfig import QEConfig
from .qetypes import QEAmount
-from .util import qt_event_listener, QtEventListener
+
if TYPE_CHECKING:
from electrum.wallet import Abstract_Wallet
diff --git a/electrum/gui/qml/qechanneldetails.py b/electrum/gui/qml/qechanneldetails.py
index 9ac86b7..1f74c6f 100644
--- a/electrum/gui/qml/qechanneldetails.py
+++ b/electrum/gui/qml/qechanneldetails.py
@@ -9,12 +9,13 @@ from electrum.gui import messages
from electrum.logging import get_logger
from electrum.lnutil import LOCAL, REMOTE
from electrum.lnchannel import ChanCloseOption, ChannelState, AbstractChannel, Channel, ChannelBackup
-from electrum.util import format_short_id
+from electrum.util import format_short_id, event_listener
+
+from electrum.gui.common_qt.util import QtEventListener
from .auth import AuthMixin, auth_protect
from .qewallet import QEWallet
from .qetypes import QEAmount
-from .util import QtEventListener, event_listener
if TYPE_CHECKING:
from electrum.wallet import Abstract_Wallet
diff --git a/electrum/gui/qml/qechannellistmodel.py b/electrum/gui/qml/qechannellistmodel.py
index da6be7b..3e68bce 100644
--- a/electrum/gui/qml/qechannellistmodel.py
+++ b/electrum/gui/qml/qechannellistmodel.py
@@ -7,8 +7,9 @@ from electrum.logging import get_logger
from electrum.util import Satoshis
from electrum.gui import messages
+from electrum.gui.common_qt.util import qt_event_listener, QtEventListener
+
from .qetypes import QEAmount
-from .util import QtEventListener, qt_event_listener
from .qemodelfilter import QEFilterProxyModel
diff --git a/electrum/gui/qml/qefx.py b/electrum/gui/qml/qefx.py
index 5546aca..8225a3a 100644
--- a/electrum/gui/qml/qefx.py
+++ b/electrum/gui/qml/qefx.py
@@ -7,9 +7,11 @@ from electrum.bitcoin import COIN
from electrum.exchange_rate import FxThread
from electrum.logging import get_logger
from electrum.simple_config import SimpleConfig
+from electrum.util import event_listener
+
+from electrum.gui.common_qt.util import QtEventListener
from .qetypes import QEAmount
-from .util import QtEventListener, event_listener
class QEFX(QObject, QtEventListener):
diff --git a/electrum/gui/qml/qeinvoice.py b/electrum/gui/qml/qeinvoice.py
index 16d4783..18f5f14 100644
--- a/electrum/gui/qml/qeinvoice.py
+++ b/electrum/gui/qml/qeinvoice.py
@@ -19,10 +19,13 @@ from electrum.bitcoin import COIN, address_to_script
from electrum.paymentrequest import PaymentRequest
from electrum.payment_identifier import PaymentIdentifier, PaymentIdentifierState, PaymentIdentifierType
from electrum.network import Network
+from electrum.util import event_listener
+
+from electrum.gui.common_qt.util import QtEventListener
from .qetypes import QEAmount
from .qewallet import QEWallet
-from .util import status_update_timer_interval, QtEventListener, event_listener
+from .util import status_update_timer_interval
from ...util import InvoiceError
diff --git a/electrum/gui/qml/qeinvoicelistmodel.py b/electrum/gui/qml/qeinvoicelistmodel.py
index 9c3442d..551afb1 100644
--- a/electrum/gui/qml/qeinvoicelistmodel.py
+++ b/electrum/gui/qml/qeinvoicelistmodel.py
@@ -8,7 +8,9 @@ from electrum.logging import get_logger
from electrum.util import Satoshis, format_time
from electrum.invoices import BaseInvoice, PR_EXPIRED, LN_EXPIRY_NEVER, Invoice, Request, PR_PAID
-from .util import QtEventListener, qt_event_listener, status_update_timer_interval
+from electrum.gui.common_qt.util import QtEventListener, qt_event_listener
+
+from .util import status_update_timer_interval
from .qetypes import QEAmount
if TYPE_CHECKING:
diff --git a/electrum/gui/qml/qenetwork.py b/electrum/gui/qml/qenetwork.py
index fa08882..5130bf4 100644
--- a/electrum/gui/qml/qenetwork.py
+++ b/electrum/gui/qml/qenetwork.py
@@ -7,8 +7,10 @@ from electrum import constants
from electrum.network import ProxySettings
from electrum.interface import ServerAddr
from electrum.fee_policy import FEERATE_DEFAULT_RELAY
+from electrum.util import event_listener
+
+from electrum.gui.common_qt.util import QtEventListener
-from .util import QtEventListener, event_listener
from .qeconfig import QEConfig
from .qeserverlistmodel import QEServerListModel
diff --git a/electrum/gui/qml/qerequestdetails.py b/electrum/gui/qml/qerequestdetails.py
index d79997c..ababb00 100644
--- a/electrum/gui/qml/qerequestdetails.py
+++ b/electrum/gui/qml/qerequestdetails.py
@@ -14,9 +14,11 @@ from electrum.payment_identifier import PaymentIdentifier, PaymentIdentifierType
from electrum.i18n import _
from electrum.network import Network
+from electrum.gui.common_qt.util import QtEventListener, qt_event_listener
+
from .qewallet import QEWallet
from .qetypes import QEAmount
-from .util import QtEventListener, qt_event_listener, status_update_timer_interval
+from .util import status_update_timer_interval
class QERequestDetails(QObject, QtEventListener):
diff --git a/electrum/gui/qml/qeserverlistmodel.py b/electrum/gui/qml/qeserverlistmodel.py
index b93a078..bac6578 100644
--- a/electrum/gui/qml/qeserverlistmodel.py
+++ b/electrum/gui/qml/qeserverlistmodel.py
@@ -6,7 +6,7 @@ from electrum.util import Satoshis
from electrum.interface import ServerAddr, PREFERRED_NETWORK_PROTOCOL
from electrum import blockchain
-from .util import QtEventListener, qt_event_listener
+from electrum.gui.common_qt.util import QtEventListener, qt_event_listener
class QEServerListModel(QAbstractListModel, QtEventListener):
diff --git a/electrum/gui/qml/qeswaphelper.py b/electrum/gui/qml/qeswaphelper.py
index 220003b..984befb 100644
--- a/electrum/gui/qml/qeswaphelper.py
+++ b/electrum/gui/qml/qeswaphelper.py
@@ -18,10 +18,11 @@ from electrum.fee_policy import FeePolicy
from electrum.gui import messages
+from electrum.gui.common_qt.util import QtEventListener, qt_event_listener
+
from .auth import AuthMixin, auth_protect
from .qetypes import QEAmount
from .qewallet import QEWallet
-from .util import QtEventListener, qt_event_listener
if TYPE_CHECKING:
import concurrent.futures
diff --git a/electrum/gui/qml/qetransactionlistmodel.py b/electrum/gui/qml/qetransactionlistmodel.py
index c5cfdaf..293e60e 100644
--- a/electrum/gui/qml/qetransactionlistmodel.py
+++ b/electrum/gui/qml/qetransactionlistmodel.py
@@ -8,8 +8,9 @@ from electrum.logging import get_logger
from electrum.util import Satoshis, TxMinedInfo
from electrum.address_synchronizer import TX_HEIGHT_FUTURE, TX_HEIGHT_LOCAL
+from electrum.gui.common_qt.util import QtEventListener, qt_event_listener
+
from .qetypes import QEAmount
-from .util import QtEventListener, qt_event_listener
if TYPE_CHECKING:
from electrum.wallet import Abstract_Wallet
diff --git a/electrum/gui/qml/qetxdetails.py b/electrum/gui/qml/qetxdetails.py
index c557d80..50e885e 100644
--- a/electrum/gui/qml/qetxdetails.py
+++ b/electrum/gui/qml/qetxdetails.py
@@ -12,9 +12,10 @@ from electrum.address_synchronizer import TX_HEIGHT_UNCONF_PARENT, TX_HEIGHT_UNC
from electrum.wallet import TxSighashDanger
from electrum.fee_policy import FeePolicy
+from electrum.gui.common_qt.util import QtEventListener, qt_event_listener
+
from .qewallet import QEWallet
from .qetypes import QEAmount
-from .util import QtEventListener, qt_event_listener
class QETxDetails(QObject, QtEventListener):
diff --git a/electrum/gui/qml/qetxfinalizer.py b/electrum/gui/qml/qetxfinalizer.py
index bf12004..1d09dca 100644
--- a/electrum/gui/qml/qetxfinalizer.py
+++ b/electrum/gui/qml/qetxfinalizer.py
@@ -11,7 +11,9 @@ from electrum.logging import get_logger
from electrum.i18n import _
from electrum.bitcoin import DummyAddress
from electrum.transaction import PartialTxOutput, PartialTransaction, Transaction, TxOutpoint
-from electrum.util import NotEnoughFunds, profiler, quantize_feerate, UserFacingException, NoDynamicFeeEstimates
+from electrum.util import (
+ NotEnoughFunds, profiler, quantize_feerate, UserFacingException, NoDynamicFeeEstimates, event_listener
+)
from electrum.wallet import CannotBumpFee, CannotDoubleSpendTx, CannotCPFP, BumpFeeStrategy, sweep_preparations
from electrum import keystore
from electrum.plugin import run_hook
@@ -19,10 +21,10 @@ from electrum.fee_policy import FeePolicy, FeeMethod
from electrum.network import NetworkException
from electrum.gui import messages
+from electrum.gui.common_qt.util import QtEventListener
from .qewallet import QEWallet
from .qetypes import QEAmount
-from .util import QtEventListener, event_listener
if TYPE_CHECKING:
from electrum.simple_config import SimpleConfig
diff --git a/electrum/gui/qml/qewallet.py b/electrum/gui/qml/qewallet.py
index 98f7994..314368a 100644
--- a/electrum/gui/qml/qewallet.py
+++ b/electrum/gui/qml/qewallet.py
@@ -13,21 +13,23 @@ from electrum.invoices import InvoiceError, PR_PAID, PR_BROADCASTING, PR_BROADCA
from electrum.logging import get_logger
from electrum.network import TxBroadcastError, BestEffortRequestFailed
from electrum.transaction import PartialTransaction, Transaction
-from electrum.util import InvalidPassword, event_listener, AddTransactionException, get_asyncio_loop, NotEnoughFunds, \
- NoDynamicFeeEstimates
+from electrum.util import (
+ InvalidPassword, event_listener, AddTransactionException, get_asyncio_loop, NotEnoughFunds, NoDynamicFeeEstimates
+)
from electrum.lnutil import MIN_FUNDING_SAT
from electrum.plugin import run_hook
from electrum.wallet import Multisig_Wallet
from electrum.crypto import pw_decode_with_version_and_mac
from electrum.fee_policy import FeePolicy, FixedFeePolicy
+from electrum.gui.common_qt.util import QtEventListener, qt_event_listener
+
from .auth import AuthMixin, auth_protect
from .qeaddresslistmodel import QEAddressCoinListModel
from .qechannellistmodel import QEChannelListModel
from .qeinvoicelistmodel import QEInvoiceListModel, QERequestListModel
from .qetransactionlistmodel import QETransactionListModel
from .qetypes import QEAmount
-from .util import QtEventListener, qt_event_listener
if TYPE_CHECKING:
from electrum.wallet import Abstract_Wallet
diff --git a/electrum/gui/qml/util.py b/electrum/gui/qml/util.py
index 3580f39..46f3ffc 100644
--- a/electrum/gui/qml/util.py
+++ b/electrum/gui/qml/util.py
@@ -1,40 +1,10 @@
import math
import re
-from functools import wraps
from time import time
from typing import Tuple
-from PyQt6.QtCore import pyqtSignal
-
from electrum.i18n import _
-from electrum.util import EventListener, event_listener
-
-
-class QtEventListener(EventListener):
- qt_callback_signal = pyqtSignal(tuple)
-
- def register_callbacks(self):
- self.qt_callback_signal.connect(self.on_qt_callback_signal)
- EventListener.register_callbacks(self)
-
- def unregister_callbacks(self):
- #self.qt_callback_signal.disconnect()
- EventListener.unregister_callbacks(self)
-
- def on_qt_callback_signal(self, args):
- func = args[0]
- return func(self, *args[1:])
-
-
-# decorator for members of the QtEventListener class
-def qt_event_listener(func):
- func = event_listener(func)
-
- @wraps(func)
- def decorator(self, *args):
- self.qt_callback_signal.emit( (func,) + args)
- return decorator
# return delay in msec when expiry time string should be updated
diff --git a/electrum/gui/qt/channel_details.py b/electrum/gui/qt/channel_details.py
index 99d081f..0bc1652 100644
--- a/electrum/gui/qt/channel_details.py
+++ b/electrum/gui/qt/channel_details.py
@@ -14,8 +14,8 @@ from electrum.lnaddr import LnAddr, lndecode
from electrum.bitcoin import COIN
from electrum.wallet import Abstract_Wallet
-from .util import Buttons, CloseButton, ShowQRLineEdit, MessageBoxMixin, WWLabel
-from .util import QtEventListener, qt_event_listener, VLine
+from electrum.gui.common_qt.util import QtEventListener, qt_event_listener
+from .util import Buttons, CloseButton, ShowQRLineEdit, MessageBoxMixin, WWLabel, VLine
if TYPE_CHECKING:
from .main_window import ElectrumWindow
diff --git a/electrum/gui/qt/confirm_tx_dialog.py b/electrum/gui/qt/confirm_tx_dialog.py
index b4ec131..990720a 100644
--- a/electrum/gui/qt/confirm_tx_dialog.py
+++ b/electrum/gui/qt/confirm_tx_dialog.py
@@ -47,9 +47,10 @@ from electrum.logging import Logger
from electrum.submarine_swaps import NostrTransport, HttpTransport, SwapServerTransport, SwapServerError
from electrum.gui.messages import MSG_SUBMARINE_PAYMENT_HELP_TEXT
+from electrum.gui.common_qt.util import QtEventListener, qt_event_listener
+
from .util import (WindowModalDialog, ColorScheme, HelpLabel, Buttons, CancelButton, WWLabel,
- read_QIcon, qt_event_listener, QtEventListener, IconLabel,
- HelpButton, RunCoroutineDialog)
+ read_QIcon, IconLabel, HelpButton, RunCoroutineDialog)
from .transaction_dialog import TxSizeLabel, TxFiatLabel, TxInOutWidget
from .fee_slider import FeeSlider, FeeComboBox
from .amountedit import FeerateEdit, BTCAmountEdit
diff --git a/electrum/gui/qt/lightning_dialog.py b/electrum/gui/qt/lightning_dialog.py
index ec9ea9f..328f167 100644
--- a/electrum/gui/qt/lightning_dialog.py
+++ b/electrum/gui/qt/lightning_dialog.py
@@ -29,8 +29,9 @@ from PyQt6.QtWidgets import (QDialog, QLabel, QVBoxLayout, QPushButton)
from electrum.i18n import _
+from electrum.gui.common_qt.util import QtEventListener, qt_event_listener
+
from .util import Buttons
-from .util import QtEventListener, qt_event_listener
if TYPE_CHECKING:
from . import ElectrumGui
diff --git a/electrum/gui/qt/main_window.py b/electrum/gui/qt/main_window.py
index 63818cb..6b85422 100644
--- a/electrum/gui/qt/main_window.py
+++ b/electrum/gui/qt/main_window.py
@@ -58,7 +58,7 @@ from electrum.util import (format_time, UserCancelled, profiler, bfh, InvalidPas
UserFacingException, get_new_wallet_name,
send_exception_to_crash_reporter,
AddTransactionException, os_chmod, UI_UNIT_NAME_TXSIZE_VBYTES,
- is_valid_email, ChoiceItem)
+ is_valid_email, ChoiceItem, event_listener)
from electrum.bip21 import BITCOIN_BIP21_URI_SCHEME
from electrum.payment_identifier import PaymentIdentifier
from electrum.invoices import PR_PAID, Invoice
@@ -77,6 +77,8 @@ from electrum.lnaddr import lndecode, LnAddr
from electrum.submarine_swaps import SwapServerTransport, NostrTransport
from electrum.fee_policy import FeePolicy
+from electrum.gui.common_qt.util import TaskThread, QtEventListener, qt_event_listener
+
from .rate_limiter import rate_limited
from .exception_window import Exception_Hook
from .amountedit import BTCAmountEdit
@@ -90,8 +92,7 @@ from .util import (read_QIcon, ColorScheme, text_dialog, icon_path, WaitingDialo
CloseButton, MessageBoxMixin, EnterButton, import_meta_gui, export_meta_gui,
filename_field, address_field, char_width_in_lineedit, webopen,
TRANSACTION_FILE_EXTENSION_FILTER_ANY, MONOSPACE_FONT,
- getOpenFileName, getSaveFileName, ShowQRLineEdit, QtEventListener, qt_event_listener,
- event_listener, scan_qr_from_screenshot)
+ getOpenFileName, getSaveFileName, ShowQRLineEdit, scan_qr_from_screenshot)
from .wizard.wallet import WIF_HELP_TEXT
from .history_list import HistoryList, HistoryModel
from .update_checker import UpdateCheck, UpdateCheckThread
@@ -103,8 +104,6 @@ from .swap_dialog import SwapDialog, InvalidSwapParameters
from .balance_dialog import (BalanceToolButton, COLOR_FROZEN, COLOR_UNMATURED, COLOR_UNCONFIRMED, COLOR_CONFIRMED,
COLOR_LIGHTNING, COLOR_FROZEN_LIGHTNING)
-from electrum.gui.common_qt.util import TaskThread
-
if TYPE_CHECKING:
from . import ElectrumGui
from electrum.submarine_swaps import SwapOffer
diff --git a/electrum/gui/qt/network_dialog.py b/electrum/gui/qt/network_dialog.py
index 9545e45..8d72deb 100644
--- a/electrum/gui/qt/network_dialog.py
+++ b/electrum/gui/qt/network_dialog.py
@@ -41,12 +41,11 @@ from electrum.logging import get_logger
from electrum.util import is_valid_websocket_url
from electrum.gui import messages
+from electrum.gui.common_qt.util import QtEventListener, qt_event_listener
from .util import (
- Buttons, CloseButton, HelpButton, read_QIcon, char_width_in_lineedit, PasswordLineEdit, QtEventListener,
- qt_event_listener, Spinner, HelpLabel
+ Buttons, CloseButton, HelpButton, read_QIcon, char_width_in_lineedit, PasswordLineEdit, Spinner, HelpLabel
)
-
_logger = get_logger(__name__)
protocol_names = ['TCP', 'SSL']
diff --git a/electrum/gui/qt/settings_dialog.py b/electrum/gui/qt/settings_dialog.py
index 8e727a2..1655e17 100644
--- a/electrum/gui/qt/settings_dialog.py
+++ b/electrum/gui/qt/settings_dialog.py
@@ -35,10 +35,10 @@ from electrum.i18n import _, get_gui_lang_names
from electrum import util
from electrum.util import base_units_list, event_listener
+from electrum.gui.common_qt.util import QtEventListener
from electrum.gui import messages
-from .util import ColorScheme, HelpLabel, Buttons, CloseButton, QtEventListener
-
+from .util import ColorScheme, HelpLabel, Buttons, CloseButton
if TYPE_CHECKING:
from electrum.simple_config import SimpleConfig, ConfigVarWithConfig
diff --git a/electrum/gui/qt/swap_dialog.py b/electrum/gui/qt/swap_dialog.py
index 6676205..3cdc084 100644
--- a/electrum/gui/qt/swap_dialog.py
+++ b/electrum/gui/qt/swap_dialog.py
@@ -15,12 +15,13 @@ from electrum.transaction import PartialTxOutput, PartialTransaction
from electrum.fee_policy import FeePolicy
from electrum.submarine_swaps import NostrTransport
+from electrum.gui.common_qt.util import QtEventListener, qt_event_listener
from electrum.gui import messages
+
from . import util
from .util import (WindowModalDialog, Buttons, OkButton, CancelButton,
EnterButton, ColorScheme, WWLabel, read_QIcon, IconLabel, char_width_in_lineedit,
pubkey_to_q_icon)
-from .util import qt_event_listener, QtEventListener
from .amountedit import BTCAmountEdit
from .fee_slider import FeeSlider, FeeComboBox
from .my_treeview import create_toolbar_with_menu, MyTreeView
diff --git a/electrum/gui/qt/util.py b/electrum/gui/qt/util.py
index 3f11a60..2a62395 100644
--- a/electrum/gui/qt/util.py
+++ b/electrum/gui/qt/util.py
@@ -7,7 +7,7 @@ import queue
import os
import webbrowser
import ctypes
-from functools import partial, lru_cache, wraps
+from functools import partial, lru_cache
from typing import (NamedTuple, Callable, Optional, TYPE_CHECKING, List, Any, Sequence, Tuple, Union)
from PyQt6 import QtCore
@@ -21,7 +21,7 @@ from PyQt6.QtWidgets import (QPushButton, QLabel, QMessageBox, QHBoxLayout, QVBo
QFrame, QAbstractButton)
from electrum.i18n import _
-from electrum.util import (FileImportFailed, FileExportFailed, resource_path, EventListener, event_listener,
+from electrum.util import (FileImportFailed, FileExportFailed, resource_path, EventListener,
get_logger, UserCancelled, UserFacingException, ChoiceItem)
from electrum.invoices import (PR_UNPAID, PR_PAID, PR_EXPIRED, PR_INFLIGHT, PR_UNKNOWN, PR_FAILED, PR_ROUTING,
PR_UNCONFIRMED, PR_BROADCASTING, PR_BROADCAST)
@@ -1480,36 +1480,6 @@ class ImageGraphicsEffect(QObject):
return result
-class QtEventListener(EventListener):
- qt_callback_signal = QtCore.pyqtSignal(tuple)
-
- def register_callbacks(self):
- self.qt_callback_signal.connect(self.on_qt_callback_signal)
- EventListener.register_callbacks(self)
-
- def unregister_callbacks(self):
- try:
- self.qt_callback_signal.disconnect()
- except (RuntimeError, TypeError): # wrapped Qt object might be deleted
- # "TypeError: disconnect() failed between 'qt_callback_signal' and all its connections"
- pass
- EventListener.unregister_callbacks(self)
-
- def on_qt_callback_signal(self, args):
- func = args[0]
- return func(self, *args[1:])
-
-
-# decorator for members of the QtEventListener class
-def qt_event_listener(func):
- func = event_listener(func)
-
- @wraps(func)
- def decorator(self, *args):
- self.qt_callback_signal.emit( (func,) + args)
- return decorator
-
-
def insert_spaces(text: str, every_chars: int) -> str:
'''Insert spaces at every Nth character to allow for WordWrap'''
return ' '.join(text[i:i+every_chars] for i in range(0, len(text), every_chars))
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.