返回

手把手教你wxPython应用软件开发

发布时间:2023-02-07 10:13:29 169
# html# 后端# 数据# 软件# 信息

wxPython是一款优秀的GUI(图形用户界面)开发框架,使用它可以开发出界面精美、功能强大的应用软件。

这里以开发一个图书管理系统为例,讲解wxPython开发应用软件的方法和技巧。

图书管理系统要实现的功能包括:连接Mysql数据库获取图书数据列表,实现图书信息数据的查看、插入、修改、删除,数据批量导入,以及根据书名关键字和出版社进行组合查询筛选的功能。

1.主窗口界面

主窗口是该软件与用户进行交互的入口,其核心是创建数据展现区、查询筛选功能区、增删改查功能区和批量导入功能区的版块布局,并从数据库获取图书信息数据。

窗口界面布局中,要用到的控件包括:​​wx.StaticText​​​(静态文本标签)、​​wx.TextCtrl​​​(文本框)、​​wx.ComboBox​​​(下拉列表)、​​wx.Button​​​(按钮)、​​wx.ListCtrl​​​(数据列表)、​​wx.FileDialog​​​(文件选择对话框)、​​wx.MessageDialog​​(消息对话框)。

软件运行主界面如下图:

手把手教你wxPython应用软件开发_Python GUI

2.子窗口及功能

点击主窗口的功能按钮,会打开相应子窗口。我们使用​​self.mainframe = parent​​来声明mainframe为父窗口,也就是软件的主窗口界面,方便后面在子窗口的事件函数中操作父窗口中的数据列表。

以打开新增图书信息的窗口为例,下面代码表示了从主窗口打开子窗口的方法:

show_addFrame = AddFrame(self, "新增窗口")
show_addFrame.Show(True)

新增和编辑图书信息窗口:

手把手教你wxPython应用软件开发_图形用户界面_02

以删除图书记录为例,以下代码示意了从主窗口的数据列表框中选定一条记录,取得其ID值(数据列表框中索引为0的字段的值),作为参数传递给dbconn类中的函数deleteBook()执行删除操作。

selectRow = self.list.GetFirstSelected()
bookid=self.list.GetItem(selectRow, 0).Text
self.dbconn.deleteBook(bookid)

这里是前端界面向函数传入一个参数的情况,在执行新增、修改操作的后台函数中,会用到向数据库连接类中的函数传递多个参数的情况。示例如下:

self.dbconn.updateBook(self.bookname.GetValue(),self.author.GetValue(),self.price.GetValue(),self.publish.GetValue(),self.content.GetValue(),self.bookid)

传入的参数包含了书名、作者、价格、出版社、内容介绍和图书ID,相应地,在数据库连接类中的updateBook()函数的形式参数也与之一一对应。

程序在后台运行的过程中,用户需要了解程序执行的进度,可以通过消息框来向用户反馈操作的结果。

手把手教你wxPython应用软件开发_Python GUI_03

3.界面与功能关联

笔者在另外一门关于Python Web开发框架Django的课程里讲过MVC开发架构,也就是前后端分离的开发模式,事实上,不仅是Web开发遵循这样一种思路,在基于C/S架构的软件开发过程中,也体现了这样的思想。在wxPython程序的主函数中定义界面中各个控件的属性,这是前端范畴;在各个事件函数中定义相应的功能,对数据库进行操作,这属于后端范畴。前后端各自完成自身的任务,并协同配合,实现整个软件的开发需求。

要让前端控件和后端事件紧密联系,就需要通过Bind()方法来绑定控件和事件函数,使得点击界面上的控件时,调用和执行对应函数中的代码,使用的方法是:

​self.Bind(wx.EVT_BUTTON, 函数名, 控件名)​

在本例中,将控件和事件函数绑定的核心代码如下:

self.Bind(wx.EVT_BUTTON, self.queryResult, query_btn)  
self.Bind(wx.EVT_BUTTON, self.showBook, view_btn)
self.Bind(wx.EVT_BUTTON, self.editBook, edit_btn)
self.Bind(wx.EVT_BUTTON, self.addNewBook, add_btn)
self.Bind(wx.EVT_BUTTON, self.deleteBook, del_btn)
self.Bind(wx.EVT_BUTTON, self.OnOpen, open_btn)
self.Bind(wx.EVT_BUTTON, self.toMysql, pldr_btn)

4.数据库连接类

创建应用程序到数据库的连接,实现不同场景下的数据表查询并返回相应结果。

  • getAllData():获取数据库中全部记录,不设定查询条件;
  • showPublish():获取全部出版社,同一个出版社只返回一个结果;
  • queryData():根据书名的关键字和所选的出版社组合查询满足条件的记录;
  • insertBook():将传入的各个字段值写入数据库;
  • updateBook():将数据库中ID值等于传入ID值的记录的各个字段值加以更新;
  • deleteBook():删除数据库中ID值等于传入ID值的记录;
  • viewData():根据传入的ID值查询满足条件的记录。

应用程序对数据库记录的操作,无外乎就是增、删、改、查这四种方法。批量导入是向数据库插入记录的特殊场景,就是将数据存储的方式由面向单条数据拓展为面向多条数据。

就数据存取的方向而言,可以分为数据读取和数据写入两种情况。写入数据时,在执行SQL语句之后,一定不要忘记执行下面这条命令:

conn.commit()

否则,不会将更改应用到数据库中。从这个意义上讲,这段文字可以算作一个避坑指南。

5.前后端数据的同步

对数据进行了增删改操作,要在两个层面加以体现。一是对数据库中的记录进行更新,另一层是在主窗口的数据列表框展现,这两个过程应该是同时执行。并且,除了在数据列表框中刷新记录(笔者称之为“显性刷新”)之外,还不要忘记在出版社下拉列表中,也要重新获取最新的出版社列表数据并自动刷新(笔者称之为“隐性刷新”),这样来确保数据的实时同步。

更多内容可以到 51CTO学堂 观看视频讲解:

​​https://edu.51cto.com/course/33049.html​​​​​​

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
数据分析(三):业务数据指标 2023-02-07 09:48:47