设计GUI,大家首先想到的是拖放一个个控件,然后设置属性,再响应对应的操作,收发数据,类似于静态HTML。
其实前端流行趋势早就用动态HTML,诸如大家熟悉的Vue.js、Angular等前端框架。Qt GUI设计也响应这种潮流,早就推出了QML(Qt 描述性语言),使用更方便、更直观,以后会以QML为主流,我们放到下一讲介绍。
但首先,还是先从QWidget入手,毕竟是基础,需要了解控件、布局、信号与槽函数。
此类教程已很多,我就不重复了。推荐学习最新支持Qt6的:
PyQt6 中文教程 (gitbook.io)
对应英文版目录在这里:
Table of contents
- Introduction PyQt6简介
- Date and time 日期与时间
- First programs
- Menus and toolbars 菜单与工具栏
- Layout management 布局设计
- Events and signals 事件与信号
- Dialogs 对话框
- Widgets 组件:QCheckBox、QPushButton、QSlider、QProgressBar和QCalendarWidget
- Widgets II 组件2:QPixmap, QLineEdit, QSplitter 和 QComboBox
- Drag & drop 拖放操作
- Painting 绘图
- Custom widgets 自定义组件
- The Tetris game 俄罗斯方块
PySide6官方文档 https://doc.qt.io/qtforpython-6/
由于PySide与PyQt基本上是可替换的,先学习哪种都行。
下一步,开发完整的小应用来练手
比如上位机软件、桌面闹钟等。
比如 桌面小宠物:
- 头条上学到的,已改成qt6代码:https://github.com/kevinqqnj/desktop-pet
- 功能:
- 随机更换图片和文字
- 无边框透明窗口
- 可拖拽
- 在系统托盘显示
- 自定义右键菜单
- 可以用nuitka打包成.exe文件,16MB左右
下一集预告
QML offers an alternative approach to create User Interfaces, compared to Widgets, and it was originally motivated from mobile applications development. Together with the Qt Quick module, it provides access to interact with mobile device using actions like taps, drag and drop, animations, states, transitions, drawer menus, etc.
- Widget主要集中在金融、军工、安防、航天、船舶、教育等领域,qml主要集中在汽车仪表、车机、直播等领域。
- 如果应用是用手指操作,那么用 QML 更合适,如果是用鼠标操作,那么用 Widget 更合适