From 3519fbe9e3f0e6b4fa17b5f0e156f64bf2c0e805 Mon Sep 17 00:00:00 2001 From: RoyirinRosmontis Date: Mon, 24 Aug 2026 12:10:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=20-=20=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E9=A1=B5=E3=80=8C=E4=BD=BF=E7=94=A8=E4=BB=A3=E7=90=86?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E3=80=8D=E6=94=B9=E4=B8=BA=E5=B7=A6=E6=96=87?= =?UTF-8?q?=E5=AD=97=20+=20=E5=8F=B3=E4=BE=A7=E8=8B=B9=E6=9E=9C=E9=A3=8E?= =?UTF-8?q?=E6=A0=BC=E5=BC=80=E5=85=B3=EF=BC=88ToggleSwitch=20=E8=87=AA?= =?UTF-8?q?=E7=BB=98=EF=BC=9A=E7=BB=BF/=E7=81=B0=E8=83=B6=E5=9B=8A+?= =?UTF-8?q?=E6=BB=91=E5=8A=A8=E5=9C=86=E9=92=AE=EF=BC=8C=E6=97=A0=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E8=B5=84=E6=BA=90=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lite/proxy_lite.py | 42 +++++++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/lite/proxy_lite.py b/lite/proxy_lite.py index 8e2afc7..bcd03c7 100644 --- a/lite/proxy_lite.py +++ b/lite/proxy_lite.py @@ -8,8 +8,8 @@ from PyQt5.QtWidgets import ( QVBoxLayout, QHBoxLayout, QFrame, QMessageBox, QTextEdit, QCheckBox, QMenu, QDialog, QLineEdit, ) -from PyQt5.QtCore import Qt, QTimer, pyqtSignal -from PyQt5.QtGui import QFont, QIcon, QPixmap, QImage, QColor +from PyQt5.QtCore import Qt, QTimer, QRectF, pyqtSignal +from PyQt5.QtGui import QFont, QIcon, QPixmap, QImage, QColor, QPainter # GUI 窗口在 96 DPI / 100% 缩放下的逻辑尺寸;启用 Qt 高分屏缩放后, # Qt 会自动按 devicePixelRatio 放大/缩小,因此代码里保持逻辑尺寸不变即可。 @@ -1438,12 +1438,16 @@ class SettingsDialog(QDialog): port_row.addWidget(self.ed_port) layout.addLayout(port_row) - # 更新方式:是否走节点隧道(默认关 = 直连仓库) - self.cb_update_proxy = QCheckBox("使用代理更新") - self.cb_update_proxy.setChecked(_update_via_proxy()) + # 更新方式:左文字 + 右苹果式开关(默认关 = 直连仓库) + upd_row = QHBoxLayout() + upd_lab = QLabel("使用代理更新") + upd_lab.setStyleSheet(f"color: {C_SUBTEXT}; font-size: 12px;") + upd_row.addWidget(upd_lab) + upd_row.addStretch() + self.cb_update_proxy = ToggleSwitch(checked=_update_via_proxy()) self.cb_update_proxy.setToolTip("开启后检查更新与下载走节点隧道(CONNECT);默认直连仓库") - self.cb_update_proxy.setStyleSheet(f"color: {C_SUBTEXT}; font-size: 12px;") - layout.addWidget(self.cb_update_proxy) + upd_row.addWidget(self.cb_update_proxy) + layout.addLayout(upd_row) layout.addStretch() @@ -1510,6 +1514,30 @@ class SettingsDialog(QDialog): log("已退出登录:凭据与节点配置已清除,下次启动或开启代理时需重新登录") self.accept() +# ── 苹果风格开关 ───────────────────────────────────── + +class ToggleSwitch(QCheckBox): + """苹果风格开关:左关右开,绿/灰胶囊 + 滑动圆钮(自绘,无图片资源)。""" + + def __init__(self, checked=False, parent=None): + super().__init__(parent) + self.setChecked(checked) + self.setFixedSize(42, 22) + self.setCursor(Qt.PointingHandCursor) + + def paintEvent(self, e): + p = QPainter(self) + p.setRenderHint(QPainter.Antialiasing) + p.setPen(Qt.NoPen) + # 胶囊背景:开=主题绿,关=浅灰 + p.setBrush(QColor(C_GREEN) if self.isChecked() else QColor("#c8ccd4")) + p.drawRoundedRect(QRectF(0, 0, 42, 22), 11, 11) + # 白色圆钮:开在右,关在左 + knob_x = 20.0 if self.isChecked() else 2.0 + p.setBrush(QColor("#ffffff")) + p.drawEllipse(QRectF(knob_x, 2.0, 18.0, 18.0)) + p.end() + # ── 状态指示灯(小圆点) ─────────────────────────────── class StatusDot(QLabel):