pyqt是python语言中最强大且广泛应用的gui框架之一,基于qt库的python绑定实现。其模块化架构和跨平台特性(windows、macos、linux)使其成为开发桌面应用的理想选择。本文将深入解析pyqt的核心模块,并通过代码示例展示其应用场景。
一、pyqt核心模块概览
pyqt将qt功能划分为多个子模块,每个模块专注于特定领域的功能实现。以下是主要模块及其作用:
| 模块名 | 功能描述 | 典型应用场景 |
|---|---|---|
| qtcore | 核心非gui功能 | 信号槽、文件处理、多线程 |
| qtgui | 图形组件基础 | 绘图、字体、图像处理 |
| qtwidgets | ui控件库 | 窗口、按钮、输入框等控件 |
| qtnetwork | 网络通信 | http请求、tcp/udp通信 |
| qtsql | 数据库交互 | sql查询、事务管理 |
| qtmultimedia | 多媒体处理 | 音频播放、视频流处理 |
| qtwebengine | 网页渲染 | 内嵌浏览器、web内容显示 |
| qtcharts | 数据可视化 | 折线图、柱状图、饼图 |
二、核心模块详解与示例
1. qtcore - 核心基础模块
提供基础功能如对象通信机制(信号与槽)、事件循环和文件处理。
关键类:
qobject:所有qt对象的基类qtimer:定时器qfile:文件操作qthread:多线程支持
示例:定时更新界面
from pyqt5.qtcore import qtimer, qobject, pyqtsignal
class worker(qobject):
update_signal = pyqtsignal(str)
def __init__(self):
super().__init__()
self.timer = qtimer()
self.timer.timeout.connect(self.update_time)
def update_time(self):
from datetime import datetime
self.update_signal.emit(datetime.now().strftime("%h:%m:%s"))
def start(self):
self.timer.start(1000) # 每秒触发2. qtwidgets - ui控件库
构建用户界面的核心模块,包含40+种预制控件。
关键组件:
qapplication:应用主循环qmainwindow:主窗口框架qpushbutton:按钮qlabel:文本标签qlineedit:单行输入框
示例:创建基础窗口
from pyqt5.qtwidgets import qapplication, qmainwindow, qpushbutton
class mainwindow(qmainwindow):
def __init__(self):
super().__init__()
self.setwindowtitle("pyqt demo")
self.setgeometry(100, 100, 400, 300)
btn = qpushbutton("点击我", self)
btn.move(150, 150)
btn.clicked.connect(self.on_click)
def on_click(self):
print("按钮被点击!")
if __name__ == "__main__":
app = qapplication([])
window = mainwindow()
window.show()
app.exec_()3. qtgui - 图形处理
处理绘图、字体管理和图像操作的基础模块。
核心功能:
qpainter:2d绘图qfont:字体管理qpixmap:图像处理
示例:自定义绘图
from pyqt5.qtwidgets import qwidget
from pyqt5.qtgui import qpainter, qcolor
class canvas(qwidget):
def paintevent(self, event):
painter = qpainter(self)
painter.setbrush(qcolor(255, 0, 0))
painter.drawellipse(50, 50, 100, 100) # 绘制红色圆形4. qtnetwork - 网络通信
实现http请求、tcp/udp通信等网络功能。
示例:http get请求
from pyqt5.qtnetwork import qnetworkaccessmanager, qnetworkrequest
from pyqt5.qtcore import qurl
class downloader:
def __init__(self):
self.manager = qnetworkaccessmanager()
self.manager.finished.connect(self.handle_response)
def fetch(self, url):
request = qnetworkrequest(qurl(url))
self.manager.get(request)
def handle_response(self, reply):
data = reply.readall()
print(f"收到 {len(data)} 字节数据")5. qtsql - 数据库交互
支持多种数据库(sqlite、mysql、postgresql等)的统一接口。
示例:sqlite操作
from pyqt5.qtsql import qsqldatabase, qsqlquery
# 创建数据库连接
db = qsqldatabase.adddatabase("qsqlite")
db.setdatabasename("mydatabase.db")
if db.open():
query = qsqlquery()
query.exec_("create table if not exists users (id integer primary key, name text)")
query.exec_("insert into users (name) values ('alice')")
db.close()6. qtwebengine - 网页渲染
基于chromium的现代网页渲染引擎。
示例:内嵌浏览器
from pyqt5.qtwebenginewidgets import qwebengineview
from pyqt5.qtwidgets import qmainwindow
class browserwindow(qmainwindow):
def __init__(self):
super().__init__()
self.browser = qwebengineview()
self.setcentralwidget(self.browser)
self.browser.load(qurl("https://www.example.com"))三、综合应用示例
结合多个模块创建天气查询应用:
# 包含网络请求、ui控件、json解析的完整示例
import sys
import json
from pyqt5.qtwidgets import (qapplication, qwidget, qvboxlayout,
qlineedit, qlabel, qpushbutton)
from pyqt5.qtnetwork import qnetworkaccessmanager
class weatherapp(qwidget):
def __init__(self):
super().__init__()
self.manager = qnetworkaccessmanager()
self.manager.finished.connect(self.handle_response)
self.init_ui()
def init_ui(self):
layout = qvboxlayout()
self.city_input = qlineedit("输入城市")
self.result_label = qlabel("等待查询...")
btn = qpushbutton("查询天气")
btn.clicked.connect(self.query_weather)
layout.addwidget(self.city_input)
layout.addwidget(btn)
layout.addwidget(self.result_label)
self.setlayout(layout)
def query_weather(self):
city = self.city_input.text()
url = f"http://weather-api.com/{city}"
self.manager.get(qnetworkrequest(qurl(url)))
def handle_response(self, reply):
data = json.loads(reply.readall().data())
temp = data['main']['temp']
self.result_label.settext(f"当前温度:{temp}°c")
if __name__ == "__main__":
app = qapplication(sys.argv)
window = weatherapp()
window.show()
sys.exit(app.exec_())四、pyqt版本选择建议
- pyqt5:当前主流稳定版本(推荐)
- pyqt6:最新版本,部分api有调整
安装命令:
pip install pyqt5 # 基本安装 pip install pyqt5-tools # 包含qt designer等工具
五、学习资源推荐
官方文档:pyqt5 reference guide — pyqt documentation v5.15.7
qt designer教程:可视化ui设计工具
《pyqt5快速开发与实战》书籍
github开源项目参考
到此这篇关于python gui框架之pyqt详解的文章就介绍到这了,更多相关python gui框架pyqt内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论