实时手机检测-通用开发者手册:修改webui.py自定义检测逻辑详解
2026/4/5 6:44:08
你辛辛苦苦写了一个强大的 Python 脚本,想给它套个界面发给同事用。
用 Tkinter 一写,瞬间回到了上个世纪:灰色的背景、直角的按钮、模糊的字体。同事打开的一瞬间,甚至怀疑这是病毒。
颜值即正义。
在 2025 年,我们要用的方案是:PySide6 + Fluent Widgets。
它能让你用极少的代码,实现微软 Fluent Design 设计语言(亚克力背景、圆角、阴影、微动效)。
| 特性 | Tkinter / 原生 PyQt | PySide6 + Fluent Widgets |
|---|---|---|
| 设计风格 | 90年代工业风 / 默认系统风 | Win11 现代风格 (Fluent) |
| 深色模式 | 需手写大量代码适配 | 一键自动切换 |
| 屏幕适配 | 高分屏 (4K) 下模糊 | 完美支持 High DPI |
| 组件丰富度 | 基础组件,简陋 | 卡片、面包屑、导航栏、Toast |
技术栈层级图 (Mermaid):
我们需要安装 PySide6 和大神封装好的 Fluent 组件库PySide6-Fluent-Widgets。
# 安装 Qt 官方绑定pipinstallPySide6# 安装 Fluent 风格组件库 (国内源加速)pipinstall"PySide6-Fluent-Widgets[full]"-i https://pypi.tuna.tsinghua.edu.cn/simple我们将实现一个带有侧边导航栏 (Navigation Interface)的主界面,包含“主页”和“设置”两个页面,支持点击切换。
main.py(主程序)app_icon.png(找个图标放这里)main.py)importsysfromPySide6.QtWidgetsimportQApplication,QWidget,QVBoxLayout,QLabelfromPySide6.QtGuiimportQIcon,QActionfromPySide6.QtCoreimportQt,QSize# 导入 Fluent Widgets 核心组件fromqfluentwidgetsimport(FluentWindow,# 现代化的主窗口SubtitlesLabel,# 副标题样式PrimaryPushButton,# 主色调按钮NavigationItemPosition,setTheme,Theme)fromqfluentwidgetsimportFluentIconasFIF# 图标库# --- 子页面 1:主页 ---classHomeInterface(QWidget):def__init__(self,parent=None):super().__init__(parent=parent)self.setObjectName("homeInterface")layout=QVBoxLayout(self)# 标题title=SubtitlesLabel("欢迎使用 Fluent GUI",self)# 一个好看的按钮btn=PrimaryPushButton("点击触发魔法",self)btn.setFixedWidth(200)layout.addWidget(title,0,Qt.AlignmentFlag.AlignCenter)layout.addWidget(btn,0,Qt.AlignmentFlag.AlignCenter)# --- 子页面 2:设置页 ---classSettingInterface(QWidget):def__init__(self,parent=None):super().__init__(parent=parent)self.setObjectName("settingInterface")layout=QVBoxLayout(self)title=SubtitlesLabel("这里是设置界面",self)layout.addWidget(title,0,Qt.AlignmentFlag.AlignCenter)# --- 主窗口 ---classMainWindow(FluentWindow):def__init__(self):super().__init__()# 1. 窗口基础设置self.setWindowTitle("PySide6 Modern Demo")self.resize(800,600)# 2. 创建子页面self.homeInterface=HomeInterface(self)self.settingInterface=SettingInterface(self)# 3. 初始化导航栏self.initNavigation()definitNavigation(self):# 添加导航项 (图标 + 文字 + 关联页面)self.addSubInterface(self.homeInterface,FIF.HOME,"主页",NavigationItemPosition.TOP)self.addSubInterface(self.settingInterface,FIF.SETTING,"设置",NavigationItemPosition.BOTTOM)if__name__=='__main__':# 支持高分屏缩放# QApplication.setHighDpiScaleFactorRoundingPolicy(Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)app=QApplication(sys.argv)# 开启深色模式 (可选 Theme.LIGHT / Theme.AUTO)setTheme(Theme.DARK)w=MainWindow()w.show()app.exec()FluentWindow这不仅仅是一个窗口。它自带了:
addSubInterface,自动处理侧边栏点击和页面跳转逻辑,不用你自己写QStackedWidget的切换代码。FIF)代码中的FIF.HOME和FIF.SETTING来自库内置的 Fluent 图标集。你不需要自己去下载 SVG 图标,直接调用即可,而且图标颜色会跟随主题自动反转。
以前写 PyQt 需要大量的 CSS (QSS) 来美化按钮。现在只需要用PrimaryPushButton,它天生就是圆角、渐变色、带点击动效的。
PySide6是 LGPL 协议(由于商业分发需要注意动态链接),qfluentwidgets分为免费版(GPL)和付费专业版。个人开发完全够用免费版。现在,你只需要把你的业务逻辑塞进HomeInterface类里,就能立刻得到一个看起来像微软官方出品的 App。
不要让你的才华被丑陋的 UI 埋没。
Next Step:
你的程序写好了,但还是个.py文件?下期我们将讲解《Python 打包终极方案:用 Nuitka 编译成 exe,比 PyInstaller 快 3 倍且难以反编译》。