Skip to content

Commit 4f661d2

Browse files
authored
Update gui.py
1 parent a6bfdd7 commit 4f661d2

1 file changed

Lines changed: 52 additions & 19 deletions

File tree

gui.py

Lines changed: 52 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@
9191
print("安装命令: pip3 install PyQt5")
9292
sys.exit(1)
9393

94-
APP_VERSION = "1.4"
94+
APP_VERSION = "1.3"
9595
APP_TITLE = f"ECH Workers 客户端 v{APP_VERSION}"
9696

9797
# 中国IP列表文件名(离线版本,放在程序目录)
@@ -407,19 +407,52 @@ def init_ui(self):
407407
base_width = 950
408408
base_height = 800
409409

410-
if sys.platform == 'win32':
410+
# 获取可用屏幕区域(排除任务栏)
411+
try:
412+
# 方法1: 使用 QApplication.desktop() (PyQt5 推荐方式)
411413
try:
412-
from ctypes import windll
413-
# 获取系统 DPI(用于调试信息)
414-
hdc = windll.user32.GetDC(0)
415-
dpi = windll.gdi32.GetDeviceCaps(hdc, 88) # LOGPIXELSX
416-
windll.user32.ReleaseDC(0, hdc)
417-
# PyQt5 会自动处理缩放,这里只是记录 DPI 信息
418-
# 窗口大小使用逻辑像素,PyQt5 会自动转换
414+
desktop = QApplication.desktop()
415+
available_geometry = desktop.availableGeometry()
416+
screen_width = available_geometry.width()
417+
screen_height = available_geometry.height()
418+
screen_x = available_geometry.x()
419+
screen_y = available_geometry.y()
419420
except:
420-
pass
421-
422-
self.setGeometry(100, 100, base_width, base_height)
421+
# 方法2: 使用 QScreen (如果 desktop() 不可用)
422+
try:
423+
screen = QApplication.primaryScreen()
424+
available_geometry = screen.availableGeometry()
425+
screen_width = available_geometry.width()
426+
screen_height = available_geometry.height()
427+
screen_x = available_geometry.x()
428+
screen_y = available_geometry.y()
429+
except:
430+
# 如果都失败,使用默认值
431+
screen_width = 1920
432+
screen_height = 1080
433+
screen_x = 0
434+
screen_y = 0
435+
436+
# 确保窗口大小不超过可用区域
437+
if base_width > screen_width:
438+
base_width = screen_width - 40 # 留出边距
439+
if base_height > screen_height:
440+
base_height = screen_height - 40 # 留出边距,确保不遮挡任务栏
441+
442+
# 计算居中位置
443+
x = screen_x + (screen_width - base_width) // 2
444+
y = screen_y + (screen_height - base_height) // 2
445+
446+
# 确保窗口不会超出屏幕边界
447+
if x < screen_x:
448+
x = screen_x + 20
449+
if y < screen_y:
450+
y = screen_y + 20
451+
452+
self.setGeometry(x, y, base_width, base_height)
453+
except:
454+
# 如果获取屏幕信息失败,使用默认位置
455+
self.setGeometry(100, 100, base_width, base_height)
423456

424457
# 设置窗口图标(黑客帝国风格)
425458
self.setWindowIcon(self._create_matrix_icon())
@@ -1232,13 +1265,13 @@ def get_control_values(self):
12321265
}
12331266

12341267
# 创建副本并更新为界面当前值
1235-
server = server.copy()
1236-
server['server'] = self.server_edit.text()
1237-
server['listen'] = self.listen_edit.text()
1238-
server['token'] = self.token_edit.text()
1239-
server['ip'] = self.ip_edit.text()
1240-
server['dns'] = self.dns_edit.text()
1241-
server['ech'] = self.ech_edit.text()
1268+
server = server.copy()
1269+
server['server'] = self.server_edit.text()
1270+
server['listen'] = self.listen_edit.text()
1271+
server['token'] = self.token_edit.text()
1272+
server['ip'] = self.ip_edit.text()
1273+
server['dns'] = self.dns_edit.text()
1274+
server['ech'] = self.ech_edit.text()
12421275
# 保存分流模式
12431276
routing_mode = self.routing_combo.currentData()
12441277
if routing_mode:

0 commit comments

Comments
 (0)