目录
前言
上一章讲述对日记本树目录的节点实现增、改、删的功能步骤
链接:wxFormBuilder + Python 工具开发第三章-日记本具树节点增、改、删功能_魂尾ac的博客-CSDN博客
这一章内容
日记本内容的增、改、删,
Ctrl+s按键响应
增、删、改、查相关操作交互提示
打包exe
最终效果:
一、文章新增
新增文章,在三级目录新增时,添加新增代码
步骤1:新增文章代码编写
三级目录新增,是有对话框类NewNode,添加函数add_new_articles,代码如下
def add_new_articles(self, tree_id, name):
'''
增加文章数据
:param tree_id: 树节点id
:param name: 文章标题
:return:
'''
data = {'tree_id': tree_id, 'name': name}
sqlt.insert_articles(data)
其中的Indert_articles是在第二章已经写好的数据库文章插入代码,这里也展示如下:
步骤2:代码调用
这段代码应该是在树节点新增成功后面,返回了节点id时,调用所以在类NewNode的函数add_new_node里加上一条代码
self.add_new_articles(new_data['id'], new_data['tree_node'])
步骤3:运行测试
运行代码,右击二级点新增,添加一个’大鱼海堂’,检查数据库articles是否有文章数据新增
数据库表中出现了tree_id为23的大鱼海堂
文章新增完成
二、文章删除
跟进三级目录删除操作。
其实删除操作不用也罢,因为删除了树节点,文章也跟着见不到了,此处省略三百字
三、文章修改
在编辑框里输入文章内容,点击文件--保存,完成数据存储
步骤1、文章数据缓存
文章内容在前面有一个伏笔,NewWindow类构造函数__init__给了个一个文章的字典对象m_articles,用来缓存文章数据
但在选择到三级节点,展示文章时,忘记将文章数据缓存起来了
所以在最后添中一行代码,将获取到articles_data赋值给m_articles,缓存成功
步骤2:保存文章
在第一章里有各种菜单的响应事件函数,这里要用到’保存’菜单的响应函数
在NewWindow类里,OnSave
在OnSave函数里编写代码,逻辑为获取编辑方案,校验,更新数据,代码如下
def OnSave(self, event):
print("保存")
#获取编辑框的数据
content = self.m_textEdit.GetValue()
if content == self.m_articles['content']:
print('没有更新')
return '没有更新'
if content == '':
print('为空判断,是否要执行')
return '先不执行'
#将新内内容更新到缓存中
self.m_articles['content'] = content
#更新数据数据
if sqlt.updata_articles(self.m_articles) is False:
return '更新失败'
步骤3:运行,测试
去网上搜一些文章‘秋风萧萧’的内容填写到
点击 文件 -保存
进入数据库检查
这个时候,一个初始的日记本工具快完成了,为了完善一些,下面还增加两点内容。
四、Ctrl+S快捷键的响应
Ctrl+S 保存
组合键响应,wxF的Events响应里有wxWindow--wxKeyEnent-
- OnChar 功能组合按钮键响应
- OnKeyDown 键盘按键按下时响应
- OnKeyUp 键盘按键按下弹起时响应
1、OnChar事件创建
步骤1、wxF操作
在wxF里将m_nodetree:wxTreeCtrl 树的OnChar响应函数设置好
在wxF里将m_textEdit:wxTextCtrl编辑框的OnChar响应函数设置好
步骤2、代码复制与覆盖
在Python里找到绑定响应函数的代码
单独copy到template下的noname.py文件中去
在NewWindow.py目录下重写这两个函数
def On_tree_key_char(self, event):
# print('进了On_tree_key_char')
aa = event.GetKeyCode()
print(aa)
event.Skip()
wx.WXK_LEFT
def On_edit_key_char(self, event):
event.Skip()
2、Ctrl+s响应
步骤1、确认Ctrl+s组合的code
上图已将树的按钮code获取并打印。
运行代码,点击到树,然后测试各种组合键
比如:ctrl +A、ctrl+B 等
查看打印code
确认Ctrl + s的组合键code 是 19
在newWindow.py导包代码下定义一个枚举(暂且这么说吧)
步骤2、Ctrl+s保存开发
很简单的,直接调用到On_Save()即可
def On_tree_key_char(self, event):
# print('进了On_tree_key_char')
if event.GetKeyCode() == KEY_CTRL_S:
print('进入树Ctrl+s')
return self.OnSave(None)
event.Skip()
def On_edit_key_char(self, event):
event.Skip()
if event.GetKeyCode() == KEY_CTRL_S:
print('进入编辑框Ctrl+s')
return self.OnSave(None)
event.Skip()
PS:记住写完相关组合键的响应代码后,还需要将event.Skip()放到最后面,不然很多原生响应都会失效。
步骤3、运行测试
运行runMain.py后,
选择‘秋风萧萧’文章,在里面输入文字,按下Ctrl+s,响应保存成功
继续输入测试文字,然后将焦点移动到树节点上,Ctrl+s,响应保存成功
五、增加提示
在增删除改查中,有一些报错,提示仅在代码中打印,界面没有反应,用户便不知道怎么样了。
需要加入一个提示框,告之用户操作成功,失败的原因等等。
步骤1、添加提示窗口代码
wx里有一个MessageDialog类,给出消息等信息,创建消息框对象,具体编写如下
在NewWindow类中添加pop_message_dlg,
def pop_message_dlg(self, msg, title):
'''
弹出消息
:param msg: 消息体
:param title: 标题
:return:
'''
#创建消息弹出框对象
popdlg = wx.MessageDialog(None, msg, title, wx.YES_DEFAULT | wx.ICON_QUESTION)
#展示消息框,有点击OK YES按钮,销毁弹出框
if popdlg.ShowModal() == wx.ID_YES:
popdlg.Destroy()
步骤2、调起弹出框
在一些操作异常的代码里添加调起弹框代码
self.pop_message_dlg(‘消息内容’,’标题’)
如下图,在删除树节点操作不成功的地添加调起消息框代码
步骤3、运行测试
在有下级节点的二级节点右击菜单删除,检查弹出提示,如下图
六、打包exe
使用pyinstaller 工具打包工程
步骤1、下载工具命令:
pip install pyinstaller
步骤2、文件目录处理
在sqliteio.py里有获取数据库目录的代码这边要添加一个代码,因为打包后,变成执行文件了,目录也没有两层,仅一层,所以要将获取par_path的代码改成下面这种
import sys
#获取上一层目录的绝对路径
if getattr(sys, 'frozen', False):
par_path = os.path.dirname(os.path.abspath(sys.executable))
elif __file__:
par_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
步骤3、打包
要有目录的打包,-D, 不显示dos窗口的打包,-w
打包前一定要关闭360杀毒
打包前一定要关闭360杀毒
打包前一定要关闭360杀毒
在Pycharm的命令窗口Termial,进入到NodeBook目录下
输入命令:
Pyinstaller -D -w runMain.py
打包成功后,目录下会出现新目录与新文件,只有dist目录才是exe运行文件所在位置,所以其他两个新增的可以不用管它
将database目录复制到dist目录下的runMain目录下
双击运行,程序运行成功
日记本流程闭环,代码编写完毕,下一章节即开始编写测试客户端程序的自动化测试工具,敬请期待^^^^^^^
全文代码下载地址: