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):