解决了Qt表格内数据读取,并用正则表达式提取想要的“参数”

近期开发有点慢,主要是坚持弱了一点点。虽然近期解决了技术上很多功能问题,但发现一个软件的开发工作量真的太大太大。尽管用Python已大大简化了开发难度,但专业的软件需要考虑的东西真的很多,而且专业要求的功能只得一步一步的来。

在此给专业写库(轮子)的高手至以高度崇敬,这也说明自己的东西已经向专业级进发……哪怕是专业计算专业的人员写行业软件,技术到了行业不了解也白搭;其次行业人员,代码不会写,也白搭。软便双修之士,注定是孤独的。

代码越写越多,越复杂,越难以维护;如何提高效率成了一大问题。

近期要实现的功能为:提取表格对应的mode内的数据,再将数据内的计算式字母参数提取出来,写入到一个写字板zj_parameter对像内。

# 查找标准数据当中的计算参数函数:
def find_x(self):
    self.zj_parameter.clear()#清空列表

#将model的数据拿出来至list_data
    row_n = table_model.rowCount()
    column_n = table_model.columnCount()
    list_data = pd.DataFrame(index=range(row_n), columns=range(column_n))
    for i in range(row_n):
        for j in range(column_n):
            list_data.loc[i, j] = table_model.record(i).value(j)
    get_x_list = list_data[list_data.columns[4:6]]#我只需要4,5列
    print(get_x_list)

#用正则表达式找出自己需要参数,当然先要import re
    list_x = []
    get_x_compile = re.compile("[a-z]\'|[a-z]|[A-Z]")
    for n in get_x_list[4] + get_x_list[5]:#python福利:列表相加
        add_item = re.findall(get_x_compile, n)
        for m in add_item:
            if m not in list_x:#python福利:有不同元素就放入
                list_x.append(m)
                self.zj_parameter.appendPlainText(m)#顺便将数据写入列表
    print(list_x)

功能非常顺利与成功。

QT5搞定跨区域对像访问

在主界面内,部分控件在其它控件与函数的(跨区域)访问,一般是由于对像不在self当中引起的。

所以只要将该控件重新定义一次即可:

self.list_1=list_1

接下来,在其它函数当中,调用self.list_1都能找到它

关于model的更新

最近由于model的更新,一直卡住了很多天。最后解决办法是:model.fetchMore()

所有程序语言,参数都没有错。

所有程序拆分运行,也都正常。

实在没有办法,一段代码一段代码的注解,后运行。

最终才找到由于model.fechMore()的一个model.select()无法运行,导致的问题是由于其它表格数据加载没有拉到底部的原因。

这个经验,bug的棑查主要是轮子问题。

所以,加油吧,少年。

Qt5标准模块的调用非常方便

一开始,自己做界面的时候,往往不看手册。

Qt5自己就提供很多很好的标准控件:

1、文件输入控件;

2、颜色输入控件;

3、对话框输入控件;

十分容易有用,最重要的是学习完一个后面都差不多一样的调用,很方便。

算法的理解(排序与递归)

程序的使用,最多的还是理解要解决问题的方法。而解决问题的方法,即是算法。

认真理解和学会算法,是最有用的科学。

1、冒泡排序法:a=[11,29,30,44,56,20]

for i in range(len(a)):
… for j in range(len(a)-1-i):
… if a[j]>a[j+1]:
… a[j],a[j+1]=a[j+1],a[j]
… print(a)

[11, 29, 30, 44, 20, 56]
[11, 29, 30, 20, 44, 56]
[11, 29, 20, 30, 44, 56]
[11, 20, 29, 30, 44, 56]

2、递归:当需要解决一个复杂问题,能够将这个问题拆分成若干子问题,函数自己调用自己(子问题),直到条件出口,执行完成。

  • >>> def fox(n):
  • …     if n==1:
  • …             return 1
  • …     else:
  • …             print(n)
  • …             return n+fox(n-1)
  • … 
  • >>> fox(100)
  • 100
  • 99
  • 98
  • 97
  • ……
  • 5050

最典型的是斐波拉切数列:

  • >>> def fibonacci(n):
  • …     if n==1:
  • …             return 1
  • …     elif n==2:
  • …             return 2
  • …     else:
  • …             return fibonacci(n-1)+fibonacci(n-2)
  • … 
  • >>> fibonacci(10)
  • 89
  • >>> fibonacci(3)
  • 3
  • >>> fibonacci(4)
  • 5
  • >>> fibonacci(5)
  • 8

最典型的游戏:汉诺塔游戏

我估计我又要在算法的领域里折腾一段时间了……数学强+算法强,注定软件非常强的。

作为研究方向,有机会就写一本工程领域常用到的算法书。

GUI的数据库连接出现已连接情况解决

QSqlDatabase db;
if(QSqlDatabase::contains(“qt_sql_default_connection”))
db = QSqlDatabase::database(“qt_sql_default_connection”);
else
db = QSqlDatabase::addDatabase(“QSQLITE”)
原文出处链接及本声明。
原文链接:https://blog.csdn.net/simmerlee/article/details/37872793/

下一步解决:pandas 与Sqlite如何实现数据互导的方法

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无法跟随服务器同步重启,怀疑为它的原因。