enable ctrl-c

This commit is contained in:
2022-12-16 16:04:50 +01:00
parent 0474e4a386
commit 1191e18e89
2 changed files with 42 additions and 0 deletions

40
ctrl_c.py Normal file
View File

@ -0,0 +1,40 @@
import signal
import socket
from PyQt5.QtNetwork import QAbstractSocket
def setup(app):
app.signalwatchdog = SignalWatchdog() # need to store to keep socket pair alive
signal.signal(signal.SIGINT, make_quit_handler(app))
def make_quit_handler(app):
def handler(*args):
print() # make ^C appear on its own line
app.quit()
return handler
class SignalWatchdog(QAbstractSocket):
def __init__(self):
"""
Propagates system signals from Python to QEventLoop
adapted from https://stackoverflow.com/a/65802260/655404
"""
super().__init__(QAbstractSocket.SctpSocket, None)
self.writer, self.reader = writer, reader = socket.socketpair()
writer.setblocking(False)
fd_writer = writer.fileno()
fd_reader = reader.fileno()
signal.set_wakeup_fd(fd_writer) # Python hook
self.setSocketDescriptor(fd_reader) # Qt hook
self.readyRead.connect(lambda: None) # dummy function call that lets the Python interpreter run

View File

@ -4,9 +4,11 @@ import sys
from PyQt5.QtWidgets import QApplication
from mainwin import MainWindow
from theme import theme
import ctrl_c
app = QApplication(sys.argv)
theme(app)
ctrl_c.setup(app)
mw = MainWindow()
mw.show()
sys.exit(app.exec())