桌面编程,基本就是Qt和winform、WPF.我为什么会用PyQt呢?大概是对于c++没感觉.winform又不能跨平台而且python好开发吧.当然,这也注定了这种一般都是小工具啥的.
在进行这种编程时,我的体会就是不要太关注控件.应该关注这种设计.
这种开发一般是会涉及到多线程编程的.应该关注这种机制.
PyQt5 主要学习内容
- PyQt5 基本窗口控件:QMainWindow、Qwidget、Qlabel、QLineEdit、菜单、工具栏等
- PyQt5 高级组件:QTableView、容器等
- PyQt5 布局管理:QBoxLayout、QGridLayout、QFormLayout、嵌套布局等
- PyQt5 信号与槽:事件处理、数据传递等
- PyQt5 图形与特效:定制窗口风格、QSS 样式表与 GUI 界面美化等
- PyQt5 扩展应用:制作 PyQt5 安装程序和数据处理等
值得注意的是,现在Qt6都有了.
模块 | 功能 |
---|---|
QtCore | 包含了核心的非 GUI 的功能,主要和时间、文件与文件夹、各种数据、流、URL、mime 类文件、进程与线程一起使用。 |
QtGui | 包含了窗口系统、事件处理、2D 图像、基本绘画、字体和文字类。 |
QtWidgets | 类包含了一系列创建桌面应用的 UI 元素。 |
QtMultimedia | 包含了处理多媒体的内容和调用摄像头 API 的类。 |
QtBluetooth | 模块包含了查找和连接蓝牙的类。 |
QtNetwork | 包含了(TCP/IP/UDP)网络编程的类。 |
QtPositioning | 包含了定位的类,可以使用卫星、WiFi 甚至文本。 |
Engine | 包含了通过客户端进入和管理 Qt Cloud 的类。 |
QtWebSockets | 包含了 WebSocket 协议的类。 |
QtWebKit | 包含了一个基 WebKit2 的 web 浏览器。 |
QtWebKitWidgets | 包含了基于 QtWidgets 的 WebKit1 的类。 |
QtXml | 包含了处理 xml 的类,提供了 SAX 和 DOM API 的工具。 |
QtSvg | 提供了显示 SVG 内容的类。 |
QtSql | 提供了处理数据库的工具。 |
QtTest | 提供了测试 PyQt5 应用的工具。 |
模块 | 功能 |
---|---|
QtCore | 包含了核心的非 GUI 的功能,主要和时间、文件与文件夹、各种数据、流、URL、mime 类文件、进程与线程一起使用。 |
QtGui | 包含了窗口系统、事件处理、2D 图像、基本绘画、字体和文字类。 |
QtWidgets | 类包含了一系列创建桌面应用的 UI 元素。 |
QtMultimedia | 包含了处理多媒体的内容和调用摄像头 API 的类。 |
QtBluetooth | 模块包含了查找和连接蓝牙的类。 |
QtNetwork | 包含了(TCP/IP/UDP)网络编程的类。 |
QtPositioning | 包含了定位的类,可以使用卫星、WiFi 甚至文本。 |
Engine | 包含了通过客户端进入和管理 Qt Cloud 的类。 |
QtWebSockets | 包含了 WebSocket 协议的类。 |
QtWebKit | 包含了一个基 WebKit2 的 web 浏览器。 |
QtWebKitWidgets | 包含了基于 QtWidgets 的 WebKit1 的类。 |
QtXml | 包含了处理 xml 的类,提供了 SAX 和 DOM API 的工具。 |
QtSvg | 提供了显示 SVG 内容的类。 |
QtSql | 提供了处理数据库的工具。 |
QtTest | 提供了测试 PyQt5 应用的工具。 |
重点掌握 QtWidgets、QtGui、QtCore 模块的功能
搭建环境
创建虚拟环境避免模块冲突.1
2virtualenv qt5env #或使用pycharm直接创建虚拟环境.
source qt5env/bin/activate #Linux环境下激活虚拟环境1
pip intall pyqt5
值得注意的是,python与qt有两个包.另一个是pyside Qt官方的.免费可商用.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15import sys
from PyQt5.QtWidgets import QApplication,QWidget
if __name__ == '__main__':
app = QApplication(sys.argv)
w = QWidget()
w.resize(250,150)
w.move(300,300)
w.setWindowTitle("我的第一个qt应用")
w.show()
sys.exit(app.exec())1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16import sys
from PyQt5.QtWidgets import QApplication,QWidget
class Example(QWidget):
def __init__(self): #构造函数
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(400,300,400,300)
self.show()
self.setWindowTitle("你好")
if __name__ == '__main__':
app = QApplication(sys.argv)
e = Example()
sys.exit(app.exec_())
- 控件 + 布局:控件与布局类似于 HMTL 中的标签和定位,要是有 HTML 基础,学习这一块上手非常容易,要是没有接触过也没关系,本课程将手把手教大家学习
- QSS 样式:QSS 类似于 CSS 样式表,语法上都是相通的
- 信号与槽:信号与槽充当 JS 的角色,但是比 JS 更加强大,它能够完全将界面和代码隔离,你只需要负责开发相应的业务逻辑即可,不需要了解界面是如何运行的
QtGUI
在 Qt 中,QIcon 类提供了处于不同模式和状态下的可缩放图标,QIcon 可以把给定的一组像素图生成较小的像素图或较大的像素图,也可以将该组像素图设置为激活样式或禁用样式,Qt 窗口使用这些像素图来显示特定动作的图标。
QIcon 可以接受的参数类型:
QIcon():无参数,表示空图标
QIcon(str):str,str 为本地图片文件的路径
QIcon(QPixmap):参数为 QPixmap,可以加载到一个控件中,通常是标签或者按钮控件,用于在标签或按钮上显示图像
QIcon(QIcon):参数为 QIcon 为对象
import sys from PyQt5.QtGui import QIcon from PyQt5.QtWidgets import QApplication, QWidget,QStyle class Example(QWidget): def __init__(self,icon): super().__init__() self.initui(icon) def initui(self,icon=None): self.move(100,0) self.setWindowTitle("应用") # self.setWindowIcon(icon) self.setWindowIcon(QApplication.style().standardIcon(10)) # self.setWindowIcon(QIcon()) self.show() if __name__ == '__main__': app = QApplication(sys.argv) # print(sys.argv) icon = QIcon("./bella.png") e = Example(icon) sys.exit(app.exec_())
之前摆了一段时间.现在直接拿应用来写.
推荐一下github仓库
git@github.com:taseikyo/PyQt5-Apps.git
有很多应用小demo,挺实用的.(感觉桌面应用是一个无底洞啊)