终于到了最后一章了QAQ,第一次写4万字以上的笔记分享,最近也在忙科创和CV的比赛,所以笔记会显得比较粗糙。其实吧分享这个笔记很大一部分是为了让自己记得更牢,网上翻阅自己的笔记也方便,如果有讲解注释不清楚的地方欢迎评论留言(秋梨膏)。当然本蒟蒻也会时不时地在以后的时间更新完善这些已经完成的笔记。
以下内容涉及到SQLite数据库和requests爬虫库的使用,有时间我也会做相关方面的笔记哒(`・ω・´)。以下只是初步使用。
使用Pyinstaller打包PyQt5应用
Pyinstaller部分同学想必用过,这是一个在命令行下使用的、将脚本代码转成可执行文件的python第三方库。如果想要使得我们做出来的GUI脱离于python解释器而让操作系统直接执行的话,我们可以使用Pyinstaller库来封装我们的GUI的脚本程序。这样不同python、没有python依赖库的用户也可以方便运行程序。
这里直接讲windows下可行的方法,安装完pyinstaller后,打开命令行,一路cd到需要打包的python文件的目录下。或者也可以在需要打包的python文件的目录下按住“Shift”+鼠标右键,打开“PowerShell“:
点开后,就会有和windows的命令行几乎一样的页面。
下面我们对draft.py文件打包生成可执行文件,那么只要输入以下指令:
pyinstaller -Fw "draft.py"
打开目录,你会发现多了两个文件夹build和dist,打开dist文件夹,里面就是可以直接运行的可执行文件了:
如果要修改图标,比如要给文件“SevenDigitDrawV2.py“附上”curve.ico“的图标,则输入命令:
pyinstaller -i curve.ico -Fw "draft.py"
需要说明的是,打包完的可执行文件会很大(笔者的这个小小的画板exe就有37MB),这是因为它将所有python的依赖库都包括进去了,即你装的第三方库越多,打包出来的文件越大。
操作SQLite数据库
许多桌面应用都有访问本地数据库或者远程数据库的需求,下面就讲讲其中的一种SQLite。SQLite是一种轻量级的跨平台数据库,因此很常用。
PyQt5中提供了操控SQLite数据库的API。QSqlDatabase.addDatabase():创建一个通用数据库,参数填入“QSQLITE”表示创建SQLite数据库
我们现在python文件的目录下创建一个文件夹"db"。
import sys
from PyQt5.QtSql import *
def createDB():
# 创建一个通用数据库对象,参数"QSQLITE"代表通用数据库为SQLite数据库类型
db = QSqlDatabase.addDatabase("QSQLITE")
# 指定SQLite数据库的文件名
db.setDatabaseName("./db/database.db")
if not db.open():
print("无法建立与数据库的连接")
return False
# 创建查询功能
query = QSqlQuery()
# 执行创建表格的指令
query.exec('create table people(id int primary key,name varchar(10),address varchar(50))')
# 执行往表格中插入数据的指令
query.exec('insert into people values(1, "Kirigaya", "GitHub")')
db.close()
return True
if __name__ == '__main__':
createDB()
通过DB Browser for SQLite打开"./db/database.db",点击"Browser Data"浏览数据:我们创建的表格和数据条已经在里面了
建议使用DB Browser for SQLite来打开数据库进行操作,网上可以下载到。
通过可视化的方式对SQLite数据库进行增、删、改、查操作
此处我们使用之前讲过的QTableView控件来展示二维数据。之前你可能会觉得QTableView控件不常用,因为与QTableWidget相比,QTableView需要创建一个model,设置模型代表的表格的尺寸、属性,再在模型上添加数据,再将model与view关联,最后将view作为控件添加到窗口上才能显示出我们model代表的表格的样式与数据,看起来比较繁琐,没有QTableWidget那样直观和方便。
但是当我们想将数据库中的数据在GUI上可视化时,QTableView就变得很常用了,因为
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtSql import *
from PyQt5.QtWidgets import *
def initializeModel(model):
# 设置表格名称
model.setTable("people")
# 设置编辑策略
model.setEditStrategy(QSqlTableModel.OnFieldChange)
# 调用select方法
model.select()
# 设置表格头
model.setHeaderData(0, Qt.Horizontal, "ID")
model.setHeaderData(1, Qt.Horizontal, "姓名")
model.setHeaderData(2, Qt.Horizontal, "地址")
def createView(title, model):
view = QTableView()
view.setModel(model)
view.setWindowTitle(title)
return view
def findrow(i):
delrow = i.row()
print("选中第{}行".format(delrow))
def addrow():
# 在model.rowCount()行后插入1行,并返回插入的行所在行数
ret = model.insertRows(model.rowCount(), 1)
print("添加第{}行".format(ret))
if __name__ == '__main__':
app = QApplication(sys.argv)
db = QSqlDatabase.addDatabase("QSQLITE")
# 设置数据库名字(路径)
db.setDatabaseName("./db/database.db")
# 创建一个数据库的表格模型,QSqlTableModel()会自动关联到db上
model = QSqlTableModel()
delrow = -1
# 初始化这个表格模型(函数在上面)
initializeModel(model)
# 根据model创建QTableView对象
view = createView("展示数据", model)
view.clicked.connect(findrow)
window = QDialog()
layout = QVBoxLayout()
layout.addWidget(view)
addBtn = QPushButton("添加一行")
addBtn.clicked.connect(addrow)
delBtn = QPushButton("删除一行")
# 下面view.currentIndex().row()表示view中