MCPcopy Index your code
hub / github.com/PyQt5/PyQt / QSingleApplication

Class QSingleApplication

Demo/Lib/Application.py:44–125  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

42
43
44class QSingleApplication(QApplication):
45 messageReceived = pyqtSignal(str)
46
47 def __init__(self, *args, **kwargs):
48 super(QSingleApplication, self).__init__(*args, **kwargs)
49 appid = QApplication.applicationFilePath().lower().split("/")[-1]
50 self._socketName = "qtsingleapp-" + appid
51 print("socketName", self._socketName)
52 self._activationWindow = None
53 self._activateOnMessage = False
54 self._socketServer = None
55 self._socketIn = None
56 self._socketOut = None
57 self._running = False
58
59 # 先尝试连接
60 self._socketOut = QLocalSocket(self)
61 self._socketOut.connectToServer(self._socketName)
62 self._socketOut.error.connect(self.handleError)
63 self._running = self._socketOut.waitForConnected()
64
65 if not self._running: # 程序未运行
66 self._socketOut.close()
67 del self._socketOut
68 self._socketServer = QLocalServer(self)
69 self._socketServer.listen(self._socketName)
70 self._socketServer.newConnection.connect(self._onNewConnection)
71 self.aboutToQuit.connect(self.removeServer)
72
73 def handleError(self, message):
74 print("handleError message: ", message)
75
76 def isRunning(self):
77 return self._running
78
79 def activationWindow(self):
80 return self._activationWindow
81
82 def setActivationWindow(self, activationWindow, activateOnMessage=True):
83 self._activationWindow = activationWindow
84 self._activateOnMessage = activateOnMessage
85
86 def activateWindow(self):
87 if not self._activationWindow:
88 return
89 self._activationWindow.setWindowState(
90 self._activationWindow.windowState() & ~Qt.WindowMinimized)
91 self._activationWindow.raise_()
92 self._activationWindow.activateWindow()
93
94 def sendMessage(self, message, msecs=5000):
95 if not self._socketOut:
96 return False
97 if not isinstance(message, bytes):
98 message = str(message).encode()
99 self._socketOut.write(message)
100 if not self._socketOut.waitForBytesWritten(msecs):
101 raise RuntimeError("Bytes not written within %ss" %

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected