1. 利用QLocalServer和QLocalSocket 实现
from PyQt5.QtNetwork import QLocalSocket, QLocalServer
if __name__ == '__main__':
try:
app = QApplication(sys.argv)
serverName = 'testServer'
socket = QLocalSocket()
socket.connectToServer(serverName)
# 如果连接成功,表明server已经存在,当前已有实例在运行
if socket.waitForConnected(500):
app.quit()
else:
localServer = QLocalServer() # 没有实例运行,创建服务器
localServer.listen(serverName)
try:
window = MainWindow()
window.show()
app.exec_()
finally:
localServer.close()
except Exception as e:
print(e)
2. 通过单实例化进程,同时将激活窗口填我们已经在进程中工作的窗口。
SingleApplication a(argc, argv);
if (!a.isRunning()) {
MainWindow w;
//传入一个要激活程序的窗口,当多开时会激活已有进程的窗口,且多开失败
a.mainWindow = &w;
w.show();
return a.exec();
}