Skip to content

Instantly share code, notes, and snippets.

@altendky
Created November 20, 2017 18:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save altendky/1f95db4924732341d945b04157c6e94a to your computer and use it in GitHub Desktop.
Save altendky/1f95db4924732341d945b04157c6e94a to your computer and use it in GitHub Desktop.
connect returned: <__main__.Connection object at 0x7f6f954132e8>
entered b
import signal
import sys
from PyQt5 import QtCore, QtWidgets
def sigint_handler(signal_number, stack_frame):
QtWidgets.QApplication.exit(128 + signal_number)
def setup_sigint():
signal.signal(signal.SIGINT, sigint_handler)
# Regularly give Python a chance to receive signals such as ctrl+c
timer = QtCore.QTimer()
timer.start(200)
timer.timeout.connect(lambda: None)
return timer
class Connection:
def __init__(self, signal, slot):
signal.connect(slot)
self.signal = signal
self.slot = slot
def disconnect(self):
self.signal.disconnect(self.slot)
class DynamicThing(QtCore.QObject):
signal = QtCore.pyqtSignal()
def do_it(self):
self.signal.emit()
class Gui(QtCore.QObject):
transition_signal = QtCore.pyqtSignal()
def __init__(self, parent=None):
super().__init__(parent)
self.machine = QtCore.QStateMachine()
self.state_a = QtCore.QState()
self.machine.addState(self.state_a)
self.state_b = QtCore.QState()
self.machine.addState(self.state_b)
self.state_a.addTransition(self.transition_signal, self.state_b)
self.machine.setInitialState(self.state_a)
self.state_b.entered.connect(lambda: print('entered b'))
self.machine.start()
def do_dynamic_thing(self):
dynamic = DynamicThing()
saved_connection = Connection(dynamic.signal, self.transition_signal)
#saved_connection = QtCore.QObject.connect(dynamic, signal, self, transition_signal)
print('connect returned:', repr(saved_connection))
dynamic.do_it()
#dynamic.signal.disconnect(self.transition_signal)
saved_connection.disconnect()
app = QtWidgets.QApplication(sys.argv)
sigint_timer = setup_sigint()
gui = Gui()
QtCore.QTimer.singleShot(2000, gui.do_dynamic_thing)
QtCore.QTimer.singleShot(3000, app.exit)
app.exec()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment