pyqt学习

桌面编程,基本就是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
2
virtualenv 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
15
import 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
16
import 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,挺实用的.(感觉桌面应用是一个无底洞啊)

-------------本文结束感谢您的阅读-------------
感谢阅读.

欢迎关注我的其它发布渠道