一、GUI简史(/s/1-O6k987OZIGzCFxu5y0XAw 提取码: 418g)
图形用户界面(GUI Graphical User Interface) 历史悠久,可追溯到20世纪60年代。斯坦福大学的NLS(ON-Line 系统引入了鼠标和窗口概念,并于1968年首次公开展示。随后,施乐公司于1973年推出了Smalltalk系统图形用户界面,它是大多数现代通用图形用户界面的基础。
这些早期系统已经具备了我们在现代桌面图形用户界面中视为理所当然的许多功能,包括窗口、菜单、单选按钮、复选框和后来的图标。这些功能的组合为我们提供了这类界面的早期缩写: WIMP(窗口、图标、菜单、指向设备--鼠标 windows, icons, menus, pointing device — a mouse)。
1979年,第一款采用图形用户界面的商用系统PERQ工作站问世。这刺激了其他一些图形用户界面的发展,其中最著名的是苹果公司的Lisa(1983年),它增加了菜单栏和窗口控制的概念。还有许多其他系统,如 Atari ST (GEM)、Amiga。在 UNIX(以及后来的 Linux)上,1984 年出现了 X 窗口系统。第一版 Windows PC 于 1985 年发布。
PyQt6由如下一些类库组成,每个类库都有不同的功能,我们借助这些类库能大大简化开发过程,其中最重要的类库是QtCore、QtGUI和QtWidgets,QtWidgets提供常用的GUI组件,QtGui专注于图形界面元素,而QtCore则涵盖了核心功能如信号槽、定时器和线程管理等,这些类库对于构建高效应用程序至关重要。
PyQt6 中的事件
GUI 应用程序是事件驱动的。事件主要由应用程序的用户触发,但也可以通过其他方式生成,例如 Internet 连接、窗口管理器或定时器。当我们调用应用程序的 exec() 方法时,应用程序进入主循环。主循环获取事件并将它们发送到对象。
在事件模型里,事件源对象将处理事件的任务委托给事件目标。有三个要素:
事件源 event source 事件源是状态改变的对象,它会产生事件。
事件对象 event object 封装了事件源中的状态变化。
事件目标 event target 要被通知的对象。
PyQt6 有独特的信号和插槽机制来处理事件,用于对象之间的通信,当特定事件发生时触发。
插槽可以是任意可调用的 Python 脚本。当发出连接的信号时,调用插槽脚本。可以理解成钩子 (hooks) 或回调函数 (callback)。
PyQt6 与 PySide6 详解:如何选择合适的 Python GUI 开发工具
在桌面应用开发中,Python 因其简洁的语法和广泛的应用场景成为许多开发者的首选语言。然而,构建跨平台 GUI 程序并不是 Python 的强项。幸运的是,Qt 提供了一套强大的 GUI 库,而通过 PyQt6 和 PySide6,我们可以轻松地在 Python 中使用 Qt 框架来构建功能丰富且跨平台的桌面应用。
如果你正在考虑使用 PyQt6 或 PySide6 来开发你的 Python GUI 项目,但不确定该选择哪个,这篇文章将详细介绍两者的区别、各自的优势和如何根据项目需求做出选择。
二、PySide 6/PyQt 6具有的特性
能跨平台运行在Windows、Linux和macOS等平台上。
对QT库进行完全封装,基于高性能的Qt的GUI控件集。
使用信号/槽机制进行通信。
提供了一整套种类繁多的窗口控件。
可以使用Qt成熟的IDE(如 Qt Designer)进行图形界面设计,并自动生成可执行的Python代码。
底层是Qt的dll文件,基于C++运行,所以运行效率上得到了一定的保证。
PySide6:PySide6是Qt的另一个Python绑定,与PyQt类似,但使用了更宽松的许可证(LGPL)。它提供了与PyQt相似的功能和API,因此如果熟悉PyQt的使用,可以很容易地切换到PySide6。与PyQt相比,PySide6的社区支持可能相对较少,但它仍然是一个可行的选择。
三、PySide 6/PyQt 6之间的区别
PySide 6/PyQt 6 都基于Qt6,他们之间的代码基本没有区别,其它方面有两个最重要的区别,掌握这两个区别可以帮助开发人员解决PySide 6/PyQt 6之间约95%的兼容性问题。
一是信号与槽的命名。
PySide 6/PyQt 6关于信号与槽的命名不同,使用下面的方法可以统一起来:
from PySide6.QtCore import Signal, Slot
from PyQt6.QtCore import pyqtSignal as Signal, pyqtSlot as Slot
二是关于枚举的问题。
PySide 6 为枚举的选项提供了快捷方式,比如Qt.DayOfWeek枚举星期一到星期日,在 PySide 6中星期三可以直接用快捷方式Qt.Wednesday表示,而PyQt 6 需要完整的使用Qt.DayOfWeek.Wednesday表示。解决这个问题最简单的方法是从Qt官方帮助文档中查询枚举的完整路径,另一个方法是使用qtpy模块,使用qtpy模块可以把PySide和PyQt统一起来,直接使用快捷方式。
什么是界面编程?为什么选择PyQt6?
图形界面编程也叫 GUI 编程,GUI是 Graphical User Interface 的简称,中文意思是图形用户界面或图形用户接口。
Python 有自带的图形界面库 Tkinter,简单易用但不适合开发大型项目。
Python 还有多种图形界面的第三方库:wxPython,Qt,GTK。wxPython 是微软所开发的图形界面库,wxPython 只支持开发 Windows 系统下的界面程序;GTK 只支持 GNU/Linux 下开发图形界面的应用程序;而 Qt 是跨平台的,也就是说 Qt 开发的图片界面程序既可以在 Windows 下运行,也可以在 Linux 下运行,当然也可以在其它操作系统平台运行,比如树莓派,Mac 系统等等。所以使用 Qt 界面库开发图形界面应用程序非常流行。
关于PyQt6
PyQt 是一个使用 Qt 工具包创建 GUI 应用程序的 Python 库。PyQt 由 Riverbank Computing 创建,是一款免费软件(GPL 许可),自 1999 年以来一直在开发中。最新版本的 PyQt6(基于 Qt 6)于 2021 年发布,并且该库仍在继续更新。
本完整的 PyQt6 教程将带您从最初的概念到用 Python 构建功能齐全的 GUI 应用程序。它需要一些基本的 Python 知识,但不需要熟悉 GUI 概念。所有内容都将通过实际示例逐步介绍。
PyQt6 是 Riverbank Computing 的 Python GUI 库 PyQt 的基于 Qt6 的版本。它于 2021 年 1 月首次发布。返回搜狐,查看更多
责任编辑: