GUI进展:成功让Dock停靠、弹簧布局问题完美解决

近期一点一点的学习完成了GUI悬停的Dock窗口,弹簧布局问题。这个两个小功能,让软件layout布局形像有了比较大的提升。就是这么清秀,GoGo加油!

最终GUI要毕业,还差QTreeView与数据库或都二维表如何无缝对接了。

其次,QTreeView的托拽操作也是需要攻关的对像。

加油吧~~~胜利就在眼前。

开始制作过程体会:原来还有很多要学习

从平台架设一波又一波的坑填完,终开始有信心徒手写软件了。很多基本思路和用法,已经在各大平台反复回顾,通过测试也绕过了很多坑,学到了很多,也必将有信心开发出行业软件比较好用的工具。走到今天,从小白刚刚已入门一年半,但前方的路还很远,且行且学习。

1、后端开端需要学习:Mysql的数据库结构设计与优化;部分困难的操作与连接需要慢慢炼习;学通后,受益终身。

2、后端的数据备份与自动化,需要进一步研究如何自动化来镜像自己的数据。学通后,可以搞出几个自己整理文档和网盘的小软件;甚至可以整理自己的硬盘与桌面;

3、前端的界面进一步优化与人性化,让操作更加得心应手,让托拽等功能,实现“美丽”接合;

4、前端还要进入PHP的网页版,手机端的JS接口,估计花的时间不会少。

现在人到中年,习惯不太好。手机微信等事务容易分心,正是需要自己学会如何控制好心态与工作任务,把精力集中在需要学习上。

NextCloud起死回生

作为一个开源的网盘,NextCloud在我使用以来特别的方便,怎么安装使用它在以前的博客有介绍,但近期由于手贱搞了一下安全补丁,网盘瞬间就挂了。13G的精选数据就这样快完蛋了,心里很不滋味,当天肝到到凌晨3点多,无果。

间隔了一个多月后,最近深入了解了Docker的运作模式和产生错误的提示后,一下判断出了是Docker的空间关闭引起了故障。于是上知乎求教高手解决我的问题,刚一发布两个回复就把回路说了一下,备感高兴,感觉方向对了。于是再查资料,终于重启了Docker的空间,NextCloud一下子起死回生。

docker ps -a
先查看docker内的空间有哪些找到ID和名字

docker start/stop name/id
启动或停止空间,这里要注意,有端口映射的时候必须先停止才能启用其它的空间,否则提示出错端口重复

解决问题,虽然只有两行命令,但真是折腾死人了。

PS:5月15日升级了PHP7.4,服务器重启,发现Docker无法跟随服务器同步重启,怀疑为它的原因。

GUI进展:TreeView出坑,进入QSqlDatabese的小坑

通过仔细的思考,TreeView的数据模型,要想实现二维表格与树形菜单的互动,只有一种方式:查重->建立父级菜单->再遍历子菜单内的数据

要想获得TreeView内的数据,也只能通过遍历全Model内的所有Row即可。但Model数据是否有Child需要判断

以上方法,是我自己所创,理论上可行,效率需要优化。暂时只能这么干了。

所以再想想入QSqlDatabase的坑是有原因的,用别人数据库的轮子,试试香不香。

Python深度应用还真需要沉淀。

学习的一种孤独感

今天搞明白了QMenu右键菜单,基本搞熟悉了QMessage几个对话框的定义与获取返回数据的使用,本来是要研究QTreeView的右键菜单返回一个消息,看着看着又深入进去了,干脆学习了message,也不算难的基础知识。但GUI的Qt学习,个人感觉至少需要1至2个月,因为有太多的界面控件要学会运用,碰到QTreeView或QTableView需要自定义model的用法更需要时间去感受。

最近,学习推进比较顺利。基本已经搞清楚了很多程序应用的基本格式与原理,而且是深入脑中,学会的框架与控件,几乎都是以自己的写法来调用与盲写(不看说明与笔记)。也许这就是Python进入高阶的表现吧。

学习的东西很多了,软件构架已经成竹在胸,解决QTreeView的二维化与树形化转化,应该就开始动手写代码了。真心感觉,要写好一个软件:特别是好用的软件,不容易,需要深厚积累。

人生苦短,我用Python

现在,一个人战斗快要到顶点了,感觉是一种空前的孤独感。积累了很多知识“空有抱负,无法施展”。加油!~~少年,你的时间相比那些刷抖音、刷酒局的人说,胜利将属于我们!

GUI进展:解决了菜单栏、以及TreeView的任意位置编辑

上次写博文留下了两个问题:解决了一个半。(1)解决了拖拽控件的问题;(2)解决了任意位置的TreeView位置的增删改查的问题;也也就意味着,对树形菜单可以按自己要求进行操作;(3)顺带解决了菜单栏的运用(右键菜单没有搞定,还需要努力)

留下半个问题:也即是终级操作,通过递归数据处理,对树形菜单与数据库内的数据进行动态设计编辑。我有点想放弃这个功能了,因为对数据框架问题,远远比单纯操作表格来得困难。但有可能以后还是会碰到这个问题。我看到C++与Java的处理办法是通过对数据时行“树形化”与“扁平化”处理,两个自定义函数就搞定了,看了半天没有理解。慢慢解决吧,现在可以实现98%的功能了,也不急于一时完美。

1、解决拖拽问题:tree.setDragEnabled(bool)/tree.setDragDropMode(bool)/tree.setDragDropOverwriteMode(bool)

2、解决任意位置TreeView位置的问题:

model.itemFromIndex(tree.currentIndex())再通过这个位置寻自己所处的row以及parent()进行操作

基本操作:insertRow(0,QStandardItem(your_item))/appendRow(QStandardItem)/removeRow(你要删除的位置)

兄弟级数据:currentIndex().sibling(int row,int column)

要注意:itemFromIndex()取得位置,要删除自身的话:找到自己所处的parent()位置处于第几row(rowCount)再在parent()里删除所处的row(),暂未找到其它方法,好像直接删除自己有点不行。

3、菜单栏的问题:

menu=QMenuBar(window)

file_menu=menu.addMenu(‘file’)

file_menu.addAction(‘QAction’,window)

注:一定要加Window,不然不在窗口内。其次Mac Os的菜单栏在最顶上,有时候看不到。

解决后,GUI样子如下:

接下来继续研究:右键菜单栏,难点在于将菜单栏 获取/放入 相应鼠标的位置。

TreeView:与数据库的动态连接与操控,力求完美。

GUI进展:实现批量逻辑追加QTreeView树的功能

QTreeView不得不说是让人又爱又恨,树形菜单是工程应用很实用重量级的菜单,是分级展示工程实体位置、造价十分有用的控件。可惜能学习的的资料并不完整,需要不断的阅读QT手册与C++相关代码,而且对于英语不太好的人来说,简直是折磨。通过断断续续,艰苦的探索,将近期取得经验在这里做一个记录:

1、QTreeView相比QTreeWidget要更灵活,是基于Mode数据分离的一个框架,适合自已定义自己的数据组进行显示。

2、基本使用方法:

tree=QTreeView(window):定义tree并放入到Window

model=QStandardItemModel(tree):定义model并放入在tree

items=QStandardItem(‘your_item_text’):定义items元素

model.appendRow(items):将元素放入到model

tree.setModel(model):将model放入到tree里面

tree.show():将tree显示出来

3、tree的几个属性与操作:

4、model的几个属性与操作:

以上内容可以完成大部分Tree的常规操作:Tree的显示,增删查改基本顺序操作,以及model的增删查改的顺序操作。


但接下来仍需要研究解决的高阶应用:

(1)实现Tree拖放操作的应用;

(2)实现Tree分级非顺序:增删查改的应用;–>也即是Tree树内的“数据随时互通”

加油吧!胜利就在眼前。

GUI进展:QTreeView与QTreeWidget

为实现GUI的可操作性,最近主要解决控件内Tree列表的问题。

很希望软件能和预算管理软件一样,有树形菜单进行标准化模块作业,再进一步形成树形菜单的工程体系文件库。所以研究这个应用还是比较实用的。

网上的教程基本都只是怎么一个一个的增加元素,对于批量Tree的分支与数据库的连接还比较少。所以为了解决这个难点问题,我研究了很多天,一直无法批量实现树形菜单的数据互动。

希望在接下来的日子里,能找到好的解决办法。

GUI进展:PyQt5与MySql的突破

挣扎了接近三个月,终于实现PyQt5与MySql的平台对接了,也标志着桌面界面编程能与数据库进入协调工作,后面的工作只是学习怎么使用了。(然并卵用!桌面界面程序,实际不如PHP直接挂网上有效得多,这里又走了几个月的弯路)Python优点是数据分析与操作,PHP的优点是在线界面与数据收集前端。所以这个弯路,是为以后大数据分析做准备吧。

在这里,记录一下这几个软件平台的问题与经验:

1、PyQt5实测属于32位编程,对64位MySql支持是无法自动实现dll文件调用的。所以对应的Qt版本一定要与MySql严格对照,否则害人不浅。我就是在这个问题上停滞了两个月,各种版本装了又试,试了又卸载,搞死人;

2、MySql的版本安装,一般都会默认为操作系统一致;所以,你别想自己下载了32位安装程序,安装下来就是32位的MySql,no!安装完后,请自己进去好好看一看是不是你要的版本;

3、Python也分32位与64位,请注意区分;虽然影响不大,但我还没有正式用64位去操作32位QT与32位MySql,所以暂不做评价。但我预计如果要在这两个32位平台下用64位的Python保不准哪天会爆bug,连原因都找不到;

4、PyQt5与Mysql亲测有效:

引用出处:https://www.zhihu.com/question/358063348

原文:我试过最新的所有版本,PyQt5 5.12.1之后的所有版本都没有mysql驱动而且似乎都是64位的(bin目录里有的文件有x64字样)。5.12.1和之前的版本似乎都是32位的(bin目录里没有x64字样)。所以用pycharm安装pyqt5.12.1版本, python版本也换一个32位的(我把64位的python3.8换成了32位的python3.7.5)mysql换成32位的(我用的mysql5.6)然后将mysql里的lib目录下libmysql.dll文件放到pyqt的bin目录下就ok了。PyQt-sip版本安装最新的,要不QSql模块使用会有问题

我本人实测可用的是:

mysql-5.7.10 win32位

python-3.7.5 win32位

pip install PyQt5==5.12.1

不想费劲去官网找:传送下载地址 http://121.196.22.46:8080/s/iBnkioxTrZTpApg

mysql压缩包怎么安装与启动:下载->解压->修改my.ini配置(把路径与password跳过)->切换路径,用管理员权限->命令:mysqld install->successfully(成功注册)->初始化命令:mysqld –initialize –insecure –user==mysql ->启动 net start(stop) mysql ->mysql -u root -p开始登陆 注:环境变量只是路径的问题,要安装目录下可以不配置环境变量

https://www.cnblogs.com/gaogaoyanjiu/p/10411970.html

11月至12月的活动,开发进展缓慢

11月至12月时展缓慢,自己感觉有点泛力,一个人的前进越走越深、越走越难、越走越迷茫。11月底干脆调整了一下心情,看了一部小说《一念永恒》1500章的小说还把《天涯明月刀》玩到70级战力54000+,精力有限……汗。看完 没啥感觉,小部分章节还是写的不错,但大部头的写的有点水,现在的小说,还不如我自己来写。。游戏体验过后也没什么意思了,但佩服写游戏的人,我自己写的平台还那么多BUG且举步维艰。

开发上,主要搞GUI,但欠了很多知识现在慢慢的在补充。比如:self的运用,__init__函数的应用,研究了一次又一次没有理解的话,白学。现在感觉没有必要多写什么真正理解怎么用,什么 意思就是胜利。

代码真的是一门很有力的工具,什么时候可以“达到为所欲为 ”呀,继续努力。