mirror of
https://gitee.com/gfdgd-xi/deep-wine-runner
synced 2025-07-13 09:02:23 +08:00
107 lines
2.9 KiB
Python
107 lines
2.9 KiB
Python
#!/usr/bin/env python3
|
|
import os
|
|
import sys
|
|
import time
|
|
import random
|
|
import requests
|
|
import threading
|
|
import webbrowser
|
|
from PyQt5.QtGui import *
|
|
from PyQt5.QtCore import *
|
|
from PyQt5.QtWidgets import *
|
|
|
|
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
|
sys.path.append(f"{programPath}/../")
|
|
sys.path.append(f"{programPath}/")
|
|
import globalenv
|
|
|
|
# 尝试引入 QtWebEngine
|
|
isWebengineInstalled = False
|
|
try:
|
|
from PyQt5.QtWebEngineWidgets import *
|
|
isWebengineInstalled = True
|
|
except:
|
|
pass
|
|
|
|
def CheckService():
|
|
pass
|
|
|
|
class NoVNCService(QThread):
|
|
serviceStop = pyqtSignal()
|
|
def run(self):
|
|
os.system(f"'{programPath}/novnc/utils/novnc_proxy' --listen localhost:6789 --vnc localhost:5905 --file-only")
|
|
# 显示关闭服务
|
|
self.serviceStop.emit()
|
|
pass
|
|
|
|
class CheckConnect(QThread):
|
|
connected = pyqtSignal()
|
|
def run(self):
|
|
while True:
|
|
time.sleep(0.5)
|
|
try:
|
|
requests.get("http://localhost:6789/vnc.html", timeout=0.5)
|
|
self.connected.emit()
|
|
break
|
|
except:
|
|
pass
|
|
|
|
def ShowVNCShower():
|
|
global webEngine
|
|
if (isWebengineInstalled):
|
|
webEngine = QWebEngineView(window)
|
|
webEngine.settings().setAttribute(QWebEngineSettings.FullScreenSupportEnabled, True)
|
|
webEngine.setUrl(QUrl("http://localhost:6789/vnc.html"))
|
|
window.setCentralWidget(webEngine)
|
|
return
|
|
webEngine = QPushButton("点击使用浏览器打开连接页")
|
|
webEngine.clicked.connect(lambda: webbrowser.open_new_tab("http://localhost:6789/vnc.html"))
|
|
window.setCentralWidget(webEngine)
|
|
|
|
def ShowRestartButton():
|
|
# 显示重启服务按钮
|
|
RestartServiceButtonInit()
|
|
window.setCentralWidget(restartServiceButton)
|
|
|
|
def RunService():
|
|
global vnc
|
|
global socket
|
|
# 设置加载文本
|
|
LoadingLabelInit()
|
|
window.setCentralWidget(loadingLabel)
|
|
socket = CheckConnect()
|
|
vnc = NoVNCService()
|
|
vnc.serviceStop.connect(ShowRestartButton)
|
|
socket.connected.connect(ShowVNCShower)
|
|
socket.start()
|
|
try:
|
|
# 如果服务已经启用,则不重复启用
|
|
requests.get("http://localhost:6789/vnc.html", timeout=0.5)
|
|
except:
|
|
vnc.start()
|
|
|
|
def LoadingLabelInit():
|
|
global loadingLabel
|
|
loadingLabel = QLabel("加载中...")
|
|
window.setCentralWidget(loadingLabel)
|
|
|
|
def RestartServiceButtonInit():
|
|
global restartServiceButton
|
|
restartServiceButton = QPushButton("重启服务")
|
|
restartServiceButton.clicked.connect(RunService)
|
|
|
|
# 尝试启动服务
|
|
if (__name__ == "__main__"):
|
|
app = QApplication(sys.argv)
|
|
else:
|
|
app = globalenv.get_value("app")
|
|
|
|
window = QMainWindow()
|
|
LoadingLabelInit()
|
|
RunService()
|
|
window.setWindowTitle("虚拟机连接")
|
|
window.show()
|
|
if (__name__ == "__main__"):
|
|
window.resize(int(window.frameGeometry().width() * 5),
|
|
int(window.frameGeometry().height() * 5))
|
|
sys.exit(app.exec_()) |