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

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

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

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

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

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__函数的应用,研究了一次又一次没有理解的话,白学。现在感觉没有必要多写什么真正理解怎么用,什么 意思就是胜利。

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

GUI的坑有点难爬出来

为了实现数据方便的输入,我最近一直在学习GUI怎么弄。首先第一个坑就是选哪个模块来做GUI成了困绕我很多天的难题。Python3的优点在于数据处理,不利于面版制作的先天性缺陷来了~~原生态的tkinter用起来感觉手册真难看,自己东拼西凑终于自己给自己写了一本手册,开始写的时候就先来解决:表格显示的问题。

所有数据进出都是表格来实现,搞定表格就搞定了所有。但坑太大了,用label要一行一行的来循环实现交互,这不是要命吗?那转用Treeview发现手册几本没有,看别人有一段,没一段的代码与博客,想要解决输入问题搞了个把月今天终于搞定了。

但接着又是提取treeview的数据的天坑,太难了……

现在有种想转pyqt5的打算。

终于完成了pandas矩阵内部字符串的正则判断与替换

前两天已经完成了,在Python环境下,进行正则判断并抽换字符的学习。为了进一步运用到数据读完后的公式清理,在pandas矩阵下进行迭代修改。花了两天时间小心测试,今天很开心解决了几个坑,终于成功!从此以后,可以手撕代码,自己搞定所有pandas二维表格里面所有对字符串的正则判断后的操作,可以说是精确操作每一个字符了。Oh Ye!

避坑指南:

正则找出符合要求的字符串,这个不再多说,看前一天的博客。

现在进一步要做的就是把正则做成三个函数:(以我查找a里面每一行公式更改为例)

目标用于计算:

解决办法:3个自字义函数+1个循环解决:

先写两个正则表达式存前备用,一个找字母在数字右边的正则;一个找字母在数字左边的正则:

再把它们搞成函数:这一步是re.sub(正则,替换函数/或数值,原数据),里面替换函数必须要正则group()对像否则会失败。新手小心脱坑!

建立两个替换函数,把需要替换的数字,直接改好,再return 出来。函数名和里面的参数就别计较了,我乱写的需要规范一些自己改,我是命令行下测试得急,没有规范操作。(注意*号加的位置,一个在后,一个在前)马上用re.sub

我为了方便一次将左右两个条件替换完,用了一个函数一次运行出结果。笨是笨了一点,但简单好理解,高手可以一次写好正则再用if来区分。函数写完了,拿随便写了一个b的字符串测试一下看对不对:

OK正确:说明正式表达式替换字符串没有什么问题了,接下来就只要将find_all(x)函数扒下来,写入到循环让二维表数值进行迭代替换就行了。

简单到五行代码就把a[0]里面的所有字符串跑了一遍,并把公式没有*的位置迭代进来了。a.loc[i,0]=your_number这种方法是避开pandas强行改数字出现警报的坑,新手注意避坑。

大功告成!

终于完成正则表达的内涵

((?<=[0-9]{1})([a-z]|[A-Z]))|(([a-z]|[A-Z])(?=[0-9]{1}))

为了解决数据公式表里面的数字与字母的进行乘法的问题,我学习了正则表达式一个星期。总是感觉自己会了,又写不出来需要的东西。几次测试与反复看教程一个星期,终于今天搞明白了:原来还是基础的东西没有理解透:正则表达式的“正向先行断言”、“反向先行断言”、“正向后行断言”、“反向后行断言”的基本含义,所以写不对。

今天认真看了一下字面意见,晃然大悟,一切迷题终于解开,豁然开朗!

12223x+333y+n444+c

终于提取出了上面几个字母,等待迭代写入新的公式:

12223*x+333*y+n*444+c

不可否认,正则表达式的强大,可以搞定所有需要处理文字与公式妥妥的。

MySQL两行命令解决了我这个小白折磨两天的问题

cd /usr/local/bin

ln -fs /usr/local/mysql-8.0.11-macos10.13-x86_64/bin/mysql mysql

由于pycharm无法连接Mysql 8.0+数据库(提示缺少驱动),我想安装5.7版本的Mysql,结果又安装不了:提示已有更高的版本,无耐又安装回8.0。也不知道是原来就有问题一直没有注意,命令行内无法:mysql -u root -p

折磨了我两天,终于找到了上面两行办法。因为默认安装路径无法映射启动,搞死人了。试完两行命心里面还没有底,结果居然改连成功。可以直接命令进入了,开心。接下来只要解决IDE怎么连接就好了。