Skip to content

Instantly share code, notes, and snippets.

@naufraghi
Created November 27, 2015 09:37
Show Gist options
  • Save naufraghi/07c14ddae28b5eb85853 to your computer and use it in GitHub Desktop.
Save naufraghi/07c14ddae28b5eb85853 to your computer and use it in GitHub Desktop.
from PyQt4.Qt import *
def teeSignal(*sig_args, **kwargs):
if "name" not in kwargs:
raise ValueError("Signal name required for old style emit compatibility")
class X(QObject):
signal = pyqtSignal(*sig_args, **kwargs)
x = X()
sig_name = kwargs["name"]
has_args = len(sig_args) > 0
class Signal(QObject):
def __getattribute__(self, name):
signal = x.signal
parent = super(Signal, self).parent()
if name == "emit":
def emit(*args):
if has_args:
signal.emit(*args)
parent.emit(SIGNAL(sig_name), *args)
else:
signal.emit()
parent.emit(SIGNAL(sig_name))
return emit
return getattr(signal, name)
return Signal
class TestWidget(QPushButton):
fired = property(teeSignal(name="fired"))
def __init__(self):
super(TestWidget, self).__init__("Click me!")
self.clicked.connect(self.fire)
self.fired.connect(self.fired_("new"))
self.fired.connect(self.fired_("new"))
QObject.connect(self, SIGNAL("fired"), self.fired_("old"))
QObject.connect(self, SIGNAL("fired"), self.fired_("old"))
def fire(self, arg):
self.fired.emit()
def fired_(self, ver):
def f():
print("fired", ver)
return f
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment