图标升级
This commit is contained in:
@@ -18,14 +18,16 @@ from PyQt6.QtWidgets import (
|
||||
QCheckBox,
|
||||
)
|
||||
from PyQt6.QtCore import Qt, QEvent, QObject, QThread, QTimer, QSize, pyqtSignal
|
||||
from PyQt6.QtGui import QMouseEvent, QPixmap, QImage, QFont
|
||||
from PyQt6.QtGui import QMouseEvent, QPixmap, QImage, QFont, QIcon
|
||||
import codecs
|
||||
import io
|
||||
import os
|
||||
import subprocess
|
||||
import qrcode
|
||||
import re
|
||||
from utils.wifi_manager import WifiManager
|
||||
from utils.floating_keyboard import FloatingKeyboard
|
||||
from utils.get_bootstrap_icon import get_colored_icon, get_colored_pixmap
|
||||
|
||||
|
||||
class DragScrollArea(QScrollArea):
|
||||
@@ -318,7 +320,15 @@ class SettingPage(QWidget):
|
||||
def _styled_message(icon, parent, title, text, buttons=QMessageBox.StandardButton.Ok):
|
||||
"""显示与整体风格一致的暗色主题消息框"""
|
||||
msg = QMessageBox(parent)
|
||||
msg.setIcon(icon)
|
||||
if isinstance(icon, str):
|
||||
if icon == "info":
|
||||
msg.setIconPixmap(get_colored_pixmap("info-circle.svg", "#f8f8f8", 40, 40))
|
||||
elif icon == "warning":
|
||||
msg.setIconPixmap(get_colored_pixmap("exclamation-circle.svg", "#f8f804", 40, 40))
|
||||
elif icon == "error":
|
||||
msg.setIconPixmap(get_colored_pixmap("x-circle.svg", "#f80404", 40, 40))
|
||||
else:
|
||||
msg.setIcon(icon)
|
||||
msg.setWindowTitle(title)
|
||||
msg.setText(text)
|
||||
msg.setStandardButtons(buttons)
|
||||
@@ -332,8 +342,9 @@ class SettingPage(QWidget):
|
||||
}
|
||||
QMessageBox QLabel {
|
||||
color: #f2f2f2;
|
||||
font-size: 20px;
|
||||
font-size: 30px;
|
||||
padding: 10px;
|
||||
background-color: #3f3f3f;
|
||||
}
|
||||
QMessageBox QPushButton {
|
||||
min-width: 130px;
|
||||
@@ -819,12 +830,12 @@ class SettingPage(QWidget):
|
||||
if not ssid:
|
||||
self.hotspot_toggle.setChecked(False)
|
||||
self.hotspot_toggle.blockSignals(False)
|
||||
self._styled_message(QMessageBox.Icon.Warning, self, "提示", "请输入热点名称")
|
||||
self._styled_message("waring", self, "提示", "请输入热点名称")
|
||||
return
|
||||
if len(password) < 8:
|
||||
self.hotspot_toggle.setChecked(False)
|
||||
self.hotspot_toggle.blockSignals(False)
|
||||
self._styled_message(QMessageBox.Icon.Warning, self, "提示", "密码至少需要8位")
|
||||
self._styled_message("waring", self, "提示", "密码至少需要8位")
|
||||
return
|
||||
|
||||
# 按钮UI反馈 → 显示"开启中……"
|
||||
@@ -871,7 +882,7 @@ class SettingPage(QWidget):
|
||||
self.hotspot_password.setEnabled(False)
|
||||
self._generate_qr_code(ssid, self.hotspot_password.text().strip())
|
||||
else:
|
||||
self._styled_message(QMessageBox.Icon.Critical, self, "错误", "开启热点失败: wpa_cli 返回失败")
|
||||
self._styled_message("error", self, "错误", "开启热点失败: wpa_cli 返回失败")
|
||||
self.hotspot_toggle.blockSignals(True)
|
||||
self.hotspot_toggle.setChecked(False)
|
||||
self.hotspot_toggle.blockSignals(False)
|
||||
@@ -879,7 +890,7 @@ class SettingPage(QWidget):
|
||||
self.hotspot_toggle.setEnabled(True)
|
||||
|
||||
def _on_hotspot_open_error(self, err_msg):
|
||||
self._styled_message(QMessageBox.Icon.Critical, self, "错误", f"开启热点失败: {err_msg}")
|
||||
self._styled_message("error", self, "错误", f"开启热点失败: {err_msg}")
|
||||
self.hotspot_toggle.blockSignals(True)
|
||||
self.hotspot_toggle.setChecked(False)
|
||||
self.hotspot_toggle.blockSignals(False)
|
||||
@@ -904,7 +915,7 @@ class SettingPage(QWidget):
|
||||
self.qr_label.clear()
|
||||
self.qr_hint.setText("开启热点后自动生成二维码")
|
||||
self.hotspot_toggle.setEnabled(True)
|
||||
self._styled_message(QMessageBox.Icon.Warning, self, "提示", f"关闭热点时出现异常: {err_msg}")
|
||||
self._styled_message("waring", self, "提示", f"关闭热点时出现异常: {err_msg}")
|
||||
|
||||
def _generate_qr_code(self, ssid, password):
|
||||
"""生成 WiFi 二维码并显示"""
|
||||
@@ -944,7 +955,9 @@ class SettingPage(QWidget):
|
||||
power_layout.addStretch()
|
||||
|
||||
# 重启按钮
|
||||
reboot_btn = QPushButton("↻ 重启系统")
|
||||
reboot_btn = QPushButton(" 重启系统")
|
||||
reboot_btn.setIcon(get_colored_icon("arrow-clockwise.svg", "#ffffff"))
|
||||
reboot_btn.setIconSize(QSize(26, 26))
|
||||
reboot_btn.setStyleSheet("""
|
||||
QPushButton {
|
||||
min-height: 70px;
|
||||
@@ -955,6 +968,7 @@ class SettingPage(QWidget):
|
||||
border: 2px solid #4a9fc8;
|
||||
border-radius: 14px;
|
||||
padding: 10px 24px;
|
||||
text-align: middle;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #3a85b3;
|
||||
@@ -971,7 +985,9 @@ class SettingPage(QWidget):
|
||||
power_layout.addSpacing(20)
|
||||
|
||||
# 关机按钮
|
||||
shutdown_btn = QPushButton("⏻ 关机")
|
||||
shutdown_btn = QPushButton(" 关机")
|
||||
shutdown_btn.setIcon(get_colored_icon("power.svg", "#ffffff"))
|
||||
shutdown_btn.setIconSize(QSize(26, 26))
|
||||
shutdown_btn.setStyleSheet("""
|
||||
QPushButton {
|
||||
min-height: 70px;
|
||||
@@ -982,6 +998,7 @@ class SettingPage(QWidget):
|
||||
border: 2px solid #e74c3c;
|
||||
border-radius: 14px;
|
||||
padding: 10px 24px;
|
||||
text-align: middle;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #e74c3c;
|
||||
@@ -1007,7 +1024,7 @@ class SettingPage(QWidget):
|
||||
)
|
||||
if reply == QMessageBox.StandardButton.Yes:
|
||||
self._styled_message(
|
||||
QMessageBox.Icon.Information, self, "重启",
|
||||
"info", self, "重启",
|
||||
"系统正在重启..."
|
||||
)
|
||||
QTimer.singleShot(500, lambda: os.system("sudo reboot"))
|
||||
@@ -1021,7 +1038,7 @@ class SettingPage(QWidget):
|
||||
)
|
||||
if reply == QMessageBox.StandardButton.Yes:
|
||||
self._styled_message(
|
||||
QMessageBox.Icon.Information, self, "关机",
|
||||
"info", self, "关机",
|
||||
"系统正在关机..."
|
||||
)
|
||||
QTimer.singleShot(500, lambda: os.system("sudo poweroff"))
|
||||
@@ -1070,7 +1087,7 @@ class SettingPage(QWidget):
|
||||
try:
|
||||
saved_networks = self.wifi_manager.list_saved_networks()
|
||||
except Exception as e:
|
||||
self._styled_message(QMessageBox.Icon.Critical, self, "错误", f"无法加载保存的WiFi: {str(e)}")
|
||||
self._styled_message("error", self, "错误", f"无法加载保存的WiFi: {str(e)}")
|
||||
return
|
||||
|
||||
# 比较与上次缓存的网络列表是否有变化
|
||||
@@ -1122,7 +1139,7 @@ class SettingPage(QWidget):
|
||||
|
||||
processed = self._deduplicate_networks(networks)
|
||||
if not processed:
|
||||
self._styled_message(QMessageBox.Icon.Information, self, "提示", "未扫描到可用网络")
|
||||
self._styled_message("info", self, "提示", "未扫描到可用网络")
|
||||
return
|
||||
|
||||
for network in processed:
|
||||
@@ -1179,7 +1196,7 @@ class SettingPage(QWidget):
|
||||
"""扫描出错后的UI恢复(主线程中执行)"""
|
||||
self.scan_button.setEnabled(True)
|
||||
self.scan_button.setText("扫描网络")
|
||||
self._styled_message(QMessageBox.Icon.Critical, self, "错误", f"扫描网络失败: {error_msg}")
|
||||
self._styled_message("error", self, "错误", f"扫描网络失败: {error_msg}")
|
||||
|
||||
def _on_ssid_text_changed(self, text):
|
||||
"""SSID输入框文本变化时,如果清空则重置为开放网络"""
|
||||
@@ -1314,13 +1331,13 @@ class SettingPage(QWidget):
|
||||
"""连接已保存列表中选中的网络(后台线程)"""
|
||||
item = self.saved_wifi_list.currentItem()
|
||||
if item is None:
|
||||
self._styled_message(QMessageBox.Icon.Warning, self, "提示", "请先选择一个已保存网络")
|
||||
self._styled_message("waring", self, "提示", "请先选择一个已保存网络")
|
||||
return
|
||||
network = item.data(Qt.ItemDataRole.UserRole) or {}
|
||||
network_id = network.get("network_id")
|
||||
ssid = network.get("ssid", "")
|
||||
if network_id is None:
|
||||
self._styled_message(QMessageBox.Icon.Warning, self, "提示", "选中网络无效")
|
||||
self._styled_message("waring", self, "提示", "选中网络无效")
|
||||
return
|
||||
|
||||
# 按钮UI反馈
|
||||
@@ -1344,27 +1361,27 @@ class SettingPage(QWidget):
|
||||
self.connect_saved_button.setEnabled(True)
|
||||
self.connect_saved_button.setText("连接到此网络")
|
||||
if ok:
|
||||
self._styled_message(QMessageBox.Icon.Information, self, "成功", f"已连接: {ssid}")
|
||||
self._styled_message("info", self, "成功", f"已连接: {ssid}")
|
||||
else:
|
||||
self._styled_message(QMessageBox.Icon.Critical, self, "错误", "连接失败")
|
||||
self._styled_message("error", self, "错误", "连接失败")
|
||||
self.refresh_saved_wifi()
|
||||
self.refresh_current_status()
|
||||
|
||||
def _on_saved_connect_error(self, err_msg):
|
||||
self.connect_saved_button.setEnabled(True)
|
||||
self.connect_saved_button.setText("连接到此网络")
|
||||
self._styled_message(QMessageBox.Icon.Critical, self, "错误", f"连接失败: {err_msg}")
|
||||
self._styled_message("error", self, "错误", f"连接失败: {err_msg}")
|
||||
|
||||
def remove_selected_saved_wifi(self):
|
||||
item = self.saved_wifi_list.currentItem()
|
||||
if item is None:
|
||||
self._styled_message(QMessageBox.Icon.Warning, self, "提示", "请先选择一个已保存网络")
|
||||
self._styled_message("waring", self, "提示", "请先选择一个已保存网络")
|
||||
return
|
||||
network = item.data(Qt.ItemDataRole.UserRole) or {}
|
||||
network_id = network.get("network_id")
|
||||
ssid = network.get("ssid", "")
|
||||
if network_id is None:
|
||||
self._styled_message(QMessageBox.Icon.Warning, self, "提示", "选中网络无效,无法删除")
|
||||
self._styled_message("waring", self, "提示", "选中网络无效,无法删除")
|
||||
return
|
||||
|
||||
# 按钮UI反馈
|
||||
@@ -1388,14 +1405,14 @@ class SettingPage(QWidget):
|
||||
self.remove_saved_button.setEnabled(True)
|
||||
self.remove_saved_button.setText("删除选中")
|
||||
if ok:
|
||||
self._styled_message(QMessageBox.Icon.Information, self, "成功", f"已删除网络: {ssid}")
|
||||
self._styled_message("info", self, "成功", f"已删除网络: {ssid}")
|
||||
self.refresh_saved_wifi()
|
||||
self.refresh_current_status()
|
||||
|
||||
def _on_remove_error(self, err_msg):
|
||||
self.remove_saved_button.setEnabled(True)
|
||||
self.remove_saved_button.setText("删除选中")
|
||||
self._styled_message(QMessageBox.Icon.Critical, self, "错误", f"删除失败: {err_msg}")
|
||||
self._styled_message("error", self, "错误", f"删除失败: {err_msg}")
|
||||
|
||||
def connect_to_wifi(self):
|
||||
ssid = self.ssid_input.text().strip()
|
||||
@@ -1404,15 +1421,15 @@ class SettingPage(QWidget):
|
||||
auth_mode = self.auth_combo.currentData()
|
||||
|
||||
if not ssid:
|
||||
self._styled_message(QMessageBox.Icon.Warning, self, "警告", "WiFi名称不能为空!")
|
||||
self._styled_message("waring", self, "警告", "WiFi名称不能为空!")
|
||||
return
|
||||
|
||||
if auth_mode == "psk" and not password:
|
||||
self._styled_message(QMessageBox.Icon.Warning, self, "警告", "WPA/WPA2 认证需要密码")
|
||||
self._styled_message("waring", self, "警告", "WPA/WPA2 认证需要密码")
|
||||
return
|
||||
|
||||
if auth_mode == "eap" and (not identity or not password):
|
||||
self._styled_message(QMessageBox.Icon.Warning, self, "警告", "WPA-EAP 认证需要身份和密码")
|
||||
self._styled_message("waring", self, "警告", "WPA-EAP 认证需要身份和密码")
|
||||
return
|
||||
|
||||
# 按钮UI反馈
|
||||
@@ -1436,16 +1453,16 @@ class SettingPage(QWidget):
|
||||
self.connect_button.setEnabled(True)
|
||||
self.connect_button.setText("连接")
|
||||
if ok:
|
||||
self._styled_message(QMessageBox.Icon.Information, self, "成功", f"已连接: {ssid}")
|
||||
self._styled_message("info", self, "成功", f"已连接: {ssid}")
|
||||
else:
|
||||
self._styled_message(QMessageBox.Icon.Critical, self, "错误", "连接失败")
|
||||
self._styled_message("error", self, "错误", "连接失败")
|
||||
self.refresh_saved_wifi()
|
||||
self.refresh_current_status()
|
||||
|
||||
def _on_connect_error(self, err_msg):
|
||||
self.connect_button.setEnabled(True)
|
||||
self.connect_button.setText("连接")
|
||||
self._styled_message(QMessageBox.Icon.Critical, self, "错误", f"连接WiFi失败: {err_msg}")
|
||||
self._styled_message("error", self, "错误", f"连接WiFi失败: {err_msg}")
|
||||
|
||||
def display_setting(self, index):
|
||||
if index < 0:
|
||||
|
||||
Reference in New Issue
Block a user