PyQt 高级部分学习 - 第五篇(最后一篇)

主题:数据库操作与综合示例

在这最后一篇高级部分的文章中,我们将探讨如何在 PyQt 应用中进行数据库操作,并给出一个综合示例。

数据库操作

PyQt 提供了 QtSql 模块来进行数据库操作。这里我们以 SQLite 为例。

连接数据库

python 复制代码
from PyQt5.QtSql import QSqlDatabase

def connect_to_database():
    db = QSqlDatabase.addDatabase("QSQLITE")
    db.setDatabaseName("mydatabase.db")

    if not db.open():
        print("Cannot open database")
        return False
    return True

执行 SQL 查询

python 复制代码
from PyQt5.QtSql import QSqlQuery

def execute_query():
    query = QSqlQuery()
    query.exec_("CREATE TABLE IF NOT EXISTS messages (id INTEGER PRIMARY KEY, text TEXT)")
    query.exec_("INSERT INTO messages (text) VALUES ('Hello, world!')")

综合示例:聊天应用

在之前的基础上,我们将添加一个功能:将聊天记录保存到数据库。

python 复制代码
from PyQt5.QtWidgets import QMainWindow, QTextEdit, QPushButton, QVBoxLayout, QWidget
from PyQt5.QtSql import QSqlDatabase, QSqlQuery
from PyQt5.QtCore import pyqtSignal

class ChatWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.init_db()

        self.text_edit = QTextEdit()
        self.send_button = QPushButton("Send")
        self.send_button.clicked.connect(self.send_message)

        layout = QVBoxLayout()
        layout.addWidget(self.text_edit)
        layout.addWidget(self.send_button)

        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)

    def init_db(self):
        self.db = QSqlDatabase.addDatabase("QSQLITE")
        self.db.setDatabaseName("chat.db")

        if not self.db.open():
            print("Cannot open database")
            return

        query = QSqlQuery()
        query.exec_("CREATE TABLE IF NOT EXISTS messages (id INTEGER PRIMARY KEY, text TEXT)")

    def send_message(self):
        text = self.text_edit.toPlainText()
        query = QSqlQuery()
        query.prepare("INSERT INTO messages (text) VALUES (:text)")
        query.bindValue(":text", text)
        query.exec_()

这样,我们的聊天应用就可以将聊天记录保存到 SQLite 数据库中了。

这便是高级部分的最后一篇文章,希望这些内容能帮助你深入了解 PyQt 的高级功能。感谢你的阅读!

相关推荐
Pitayafruit19 分钟前
跟着大厂学架构01:如何利用开源方案,复刻B站那套“永不崩溃”的评论系统?
spring boot·分布式·后端
方圆想当图灵28 分钟前
深入理解软件设计:领域驱动设计 DDD
后端·架构
excel39 分钟前
MySQL 9 在 Windows 上使用 mysqld --initialize-insecure 无响应的排查与解决方案
后端
你怎么知道我是队长43 分钟前
GO语言---defer关键字
开发语言·后端·golang
方圆想当图灵1 小时前
深入理解软件设计:什么是好的架构?
后端·架构·代码规范
love530love2 小时前
是否需要预先安装 CUDA Toolkit?——按使用场景分级推荐及进阶说明
linux·运维·前端·人工智能·windows·后端·nlp
泯泷3 小时前
「译」为 Rust 及所有语言优化 WebAssembly
前端·后端·rust
梦想很大很大4 小时前
把业务逻辑写进数据库中:老办法的新思路(以 PostgreSQL 为例)
前端·后端·架构
Android洋芋4 小时前
GitHub开源协作实践:HelloGitHub项目详解与企业级应用实战
后端
雨果talk5 小时前
Spring Boot集成Mina的Socket资源管理:从稳定通信到高性能优化
spring boot·后端·性能优化