最近在做企业微信和飞书的群webhook机器人,打算做一个桌面带UI的程序,也就是把py封装成exe
做的过程中几个关于tkinter小问题折腾了很久,总结一下,以供后来者参考。
同时也是对本次项目的总结。
一、组件定位问题
一开始只会写
text = tkinter.Text(root)
text.pack()
这样写了几个组件,发现只会按照从上到下顺序布局,不美观
后面通过https://www.jianshu.com/p/9adc8f6a8da6
了解到了place,改成用place布局
二、获取多个entry内数字,并进行计算
之前爬虫或者其他啥的都是用get()来获取text或者entry组件的函数,这次发现get不好使了
一对多个entry内数据进行计算,就出现
ValueError: invalid literal for int() with base 10
一番搜索,大部分人说没有对输入内容进行限定,要限定输入字符为数字才有效;
后来经过测验,发现并不是这样的,
原因是:
多个entry中有空值的时候【我做的是时间的运算,为了方便测试,只输了秒数框,没有输分钟和小时】,使用int(entry1.get()),会获取不到值,因为字符可以为空值,空值不可以转化为int型【这个空值是None,还是什么也没有,暂时没研究】
找到这个原因就好办了,使用insert(0,“0”)对entry赋予初始值,就可以解决了
三、定时执行
自己提的问题
https://ask.youkuaiyun.com/questions/7936612/54186013
站内大佬提供了代码,本地化项目的时候,发现一开始执行定时运行功能,程序就会无响应,后来一步步查找,一步步定位,发现t = Thread(target=a, args=())
本地项目测试的时候,target=a后面加了(),也就是本地代码变成了t = Thread(target=a(), args=())导致的程序无响应,去掉()就好了
———————————————————————————————————————————
关于text组件的问题
一、如何获取text组件第一行内容
text1.get("1.0", "1.end")
二、如何获取text组件最后一行内容
text1.get("end-1c linestart", "end-1c")
三、如何获取text组件所有内容
text1.get()
四、如何删除text组件所有内容
text1.delete('1.0', tkinter.END)
五、如何在第一行前添加内容
text1.insert(‘1.0’,‘内容’)
六、如何在最后一行后添加内容
text1.insert('end+1c','内容')
关于entry组件
一、如何获取entry组件内容
entry.get() # 因为entry本身就是单行的
二、如何获取entry组件前10个字符
entry.get()[:10]
获取后10个字符就是entry.get()[10:]
三、删除entry组件内容
entry.delete(0,'end')
四、在entry组件第5个字符前插入内容
entry.insert(4,‘插入的内容’)
五、在entry组件最后追加内容
entry.insert('end','追加的内容')
在开头添加就是entry.insert(0,'内容')
六、修改entry中第3到5个字符
entry = entry[:2] + "新内容" + entry[5:]
七、获取entry中A字符前内容
index = input_str.find("A")
if index != -1:
result = input_str[:index]
else:
result = input_str