-
Notifications
You must be signed in to change notification settings - Fork 0
/
application.py
59 lines (52 loc) · 2.16 KB
/
application.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import Qt, QEvent, QPointF
from PyQt5.QtNetwork import QLocalServer, QLocalSocket, QAbstractSocket
class SingleApplication(QApplication):
def __init__(self, args):
super().__init__(args)
self.TIME_OUT = 1000
self.isRuning = False
self.serverName = 'skyutils'
self.args = args
self.mousePos = QPointF(0, 0)
self.initLocalConnection()
def initLocalConnection(self):
socket = QLocalSocket()
socket.connectToServer(self.serverName)
if socket.waitForConnected(self.TIME_OUT):
self.isRuning = True
if len(self.args) >= 3:
data = self.args[1] + ',' + self.args[2]
socket.writeData(data.encode())
socket.flush()
socket.waitForBytesWritten()
return
self.newLocalServer()
def newLocalServer(self):
self.localServer = QLocalServer(self)
self.localServer.newConnection.connect(self.newLocalConnection)
if not self.localServer.listen(self.serverName):
if self.localServer.serverError() == QAbstractSocket.AddressInUseError:
QLocalServer.removeServer(self.serverName)
self.localServer.listen(self.serverName)
def newLocalConnection(self):
socket = self.localServer.nextPendingConnection()
socket.readyRead.connect(self.readyRead)
def readyRead(self):
socket = self.sender()
if socket:
data = socket.readData(1000)
socket.close()
if data:
data = data.decode().split(',')
x, y = 0, 0
if self.mousePos:
x = self.mousePos.x()
y = self.mousePos.y()
self.mainWindow.move(int(data[0]) - x, int(data[1]) - y)
self.mainWindow.setWindowFlags(self.mainWindow.windowFlags() | Qt.WindowStaysOnTopHint)
self.mainWindow.show()
def notify(self, receiver, event):
if event.type() == QEvent.MouseButtonPress:
self.mousePos = event.localPos()
return super().notify(receiver, event)