PyQt5:极简图书管理2

PyQt5

46篇

PyQt5:极简图书管理(QTableWidget的使用)2

导读:正式开始啦!

LEARN MORE

正文

上期我们介绍了QTableWidget和QTableWidgetItem的基本信息,并且通过一个视频展示了一个极简图书管理系统。本篇开始我们的正式学习。

1

设计思路

像这种功能相对较多的小工具,一般会先谈下设计思路。整个系统(其实就是小工具)的思路流程如下(个人思考路径,不一定最优):

1、界面设计

这个我主要是通过Qt设计师完成的。

2、功能划分:

2.1、新增图书

新增图书分为两种方式:自动读取网络图书档案、手动填写图书档案。手动填写这个不必说。自动读取网络图书档案,这个数据从哪里来呢?豆瓣API!豆瓣API提供了较为完善的图书信息,采用HTTPS访问方式,只要有图书的ISBN号,就能查询,使用非常方便。这里科普一下什么是ISBN号。国际标准书号(International Standard Book Number),简称ISBN,是专门为识别图书等文献而设计的国际编号(来源:百度百科)。

为了更加方便的使用豆瓣API,我自定义了一个GetBookInfo类,将所有有关豆瓣API的操作都放到这个类中。

2.2 查询图书

这个比较简单,根据查询的关键字段,返回具体的表格行数。

2.3 数据查询、存储

这次的程序是具有存储功能的,我们存储的载体本质是就是一个文件。通过Python中pickle模块,实现图书档案的存储、删除、新增、修改等操作。这些操作我也是封装到DataManagement类中,方便调用。

2.4 数据呈现

这里主要就是对QTableWidget进行操作了,包括修改数据、删除数据。

总结一下,如下图所示:

2

豆瓣API使用

豆瓣API的文档如下:https://developers.douban.com/wiki/?title=guide

有兴趣的学友可以自己去看看,内容也比较丰富。

我们这里主要是使用读书API:https://developers.douban.com/wiki/?title=book_v2

这个API的调用地址如下:

这里的name就是ISBN号。

它会返回json格式的数据,类似下面这种的。

这个和Python当中的字典是不是很像,然后我们将其转换成字典,并取得相应的数据。下面我们来具体的看一下相应的代码。

为节约篇幅,主要把getbookinfo()函数讲一下。

这几句话是利用Python第三方库requests以及豆瓣API获取图书信息,至于requests库的使用,相应的教程百度上已经烂大街了,可以自己看看。这里放上中文版的帮助文档。http://docs.python-requests.org/zh_CN/latest/user/quickstart.html

将获取的json数据转换成字典格式,这样Python就能操作了。它还有一个姊妹函数,如下:

这个字典是用于存储图书信息的,分别对应图书的名称、作者、出版日期、分类、出版单位、价格、页数、内容简介、封面、作者国家。

这里做了一个判断,如果我们读取图书数据的时候,其返回值包含code这个字段,且code = 0,表明我们获取数据失败,可能是ISBN号不对等情况。否则将图书信息存入bookinfo这个字典当中。这里需要注意两点:

1、国家信息是我自己增加的,API中没有明确的显示出来,注意是根据作者信息判断出来的,国外的作者名称前面都带有[]符号,如下图:

2、封面的链接是需要修改的,不能直接拿来用,因为它是这样的:

我们需要吧链接当中的“\”替换成空字符串””,所以有了如下的代码:

3

数据存储

所有的数据操作类是存放到DataManagement这个类当中的,我们所有的图书档案数据载入到数据内存中,是存储到booklist这个列表变量。booklist这个列表变量中每一个元素是一个字典,即每本图书的档案信息,如:书名、作者、出版日期之类的。

在这里我们选择存储的方式是Python的pickle模块,为什么选择pickle模块。

如果我们这样操作:

执行即报错:

但是使用pickle就不会。

pickle能够存储列表,使用十分方便。

好吧,我们来看看相应的代码。

这个类中我们建立几个函数:

1、insert_db:插入一条图书数据

2、save_db:保存所有图书档案

3、query_db:查找图书

4、load:载入数据

存储数据之前先要载入数据。我们先判断数据存储的文件“book.dat”是否存在,不存在的话我们就新建一个,利用pickle.dump()函数新建。

然后我们打开“book.dat”,使用pickle.load()载入列表,并返回列表books。

这个函数中参数bookinfo表示一条图书档案信息,即一本书的信息。

这里我们可以根据ISBN、作者、书名来查找图书,要是找到了就返回这本书在self.books中的位置,如果没有找到返回-1。

这个函数比较好理解,就是保存整个图书档案。这里的bookinfoes是整个图书档案的列表。

4

最后

总结下我们今天的内容:

1、程序设计思路

2、豆瓣API使用

3、数据存储

ok,今天的介绍就到这里吧。下章我们继续。如果你喜欢本篇文章,请给我点赞、赞赏(推荐),分享给你的好友们吧!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180529G1273Z00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券