python-tkinter-GUI简单化编程之数据组合框控件
创作不易,请多包涵支持,谢谢!
python tkinter GUI简单化编程之文章目录(点击可传送)
一、自我介绍、封装及使用方法
本系列文章将先以封装python的tkinter库为目标进行讲解,后续将会再封装其他python的GUI库。具体可从第一章开始浏览,后续不再阐述。
二、封装数据组合框控件
在第一章python-GUI简单化编程之基础窗口
中我们已经import载入封装的tkinter以及要用的的其他库,并添加了封装基础窗口
、封装顶层窗口
的代码。现在,我们在PythonGui.pyw
再添加以下代码封装数据组合框控件
。注意不要删除以前的代码。
def S_创建数据组合框控件(放置属性,组合框属性,变量属性):
'''
函数说明:\n\n
放置属性为一个列表,元素的意义分别为: 0.放置的窗口 1.放置于窗口的行 2.放置于窗口的列\n\n
组合框属性为一个列表,元素的意义分别为:0.组合框名称 1.是否开启输入(True,False) 2.是否开启输入保护 3.输入框宽度 4.字体大小 5.背景颜色\n\n
变量属性为一个列表,元素的意义分别为:0.变量类型(int,double,string,bool) 1.默认值 2.是否保存变量值 3.变量保存的文件夹名称\n\n
'''
放置窗体 = 放置属性[0]
放置位置 = 放置属性[1:]
组合框名称 = 组合框属性[0]
是否开启输入 = 组合框属性[1]
是否开启输入保护 = 组合框属性[2]
输入框宽度 = 组合框属性[3]
字体大小 = 组合框属性[4]
背景颜色 = 组合框属性[5]
变量类型 = 变量属性[0]
默认值 = 变量属性[1]
是否保存变量值 = 变量属性[2]
变量保存的文件夹名称 = 变量属性[3]
组合框变量 = tk.StringVar()
输入状态 = tk.DISABLED
if 变量类型 == 'int':
组合框变量 = tk.IntVar()
if 变量类型 == 'double':
组合框变量 = tk.DoubleVar()
if 变量类型 == 'string':
组合框变量 = tk.StringVar()
if 变量类型 == 'bool':
组合框变量 = tk.BooleanVar()
if 是否开启输入:
输入状态 = tk.NORMAL
子窗口 = tk.Frame(放置窗体,bg =背景颜色,height = 50,width = 200 )
子窗口.grid(row = 放置位置[0],column = 放置位置[1],padx = 2,pady= 2)
tk.Label(子窗口,text = 组合框名称 ,font=('黑体', 字体大小),bg=背景颜色).grid(row = 0,column = 0,padx = 1,pady= 1)
组合框变量.set(默认值)
if 是否保存变量值:
保存路径及名称 = os.path.dirname(os.path.realpath(sys.argv[0]))+"/"+变量保存的文件夹名称+"/"+组合框名称
try:
with open(保存路径及名称,"r") as f:
for line in f.readlines():
组合框变量.set(line.strip('\n'))
f.close()
except:
组合框变量.set(默认值)
with open(保存路径及名称,"w") as f:
f.write(str(组合框变量.get()))
f.close()
def 写入保存值(*args):
保存路径及名称 = os.path.dirname(os.path.realpath(sys.argv[0]))+"/"+变量保存的文件夹名称+"/"+组合框名称
with open(保存路径及名称,"w") as f:
f.write(str(组合框变量.get()))
f.close()
组合框变量.trace("w",写入保存值)
if 是否开启输入保护 == True:
tk.Entry(子窗口, textvariable = 组合框变量, width = 输入框宽度,font=('黑体', 字体大小),justify = tk.CENTER,state = 输入状态,show = '*').grid(row = 0,column = 1,padx = 1,pady= 1)
return 组合框变量
else:
tk.Entry(子窗口, textvariable = 组合框变量, width = 输入框宽度,font=('黑体', 字体大小),justify = tk.CENTER,state = 输入状态).grid(row = 0,column = 1,padx = 1,pady= 1)
return 组合框变量
三、封装库的使用
在test.pyw中添加以下代码准备测试,并在脚本文件的同一个文件夹下创建一个新的文件夹命名为'测试保存变量值文件夹'
:
import PythonGui as GUI
主窗体 = GUI.A_建立根页面(['测试软件',800,510,'Beige'],'')
测试数据组合框 = GUI.S_创建数据组合框控件([主窗体,0,0],['测试数据组合框',True,False,10,12,'Beige'],['int',123,False,'测试保存变量值文件夹'])
主窗体.mainloop()
S_创建数据组合框控件()
函数中有两个形参:1.放置属性 2.组合框属性 3.变量属性。
(1)放置属性为一个列表,元素的意义分别为: 0.放置的窗口 1.放置于窗口的行 2.放置于窗口的列
(2)组合框属性为一个列表,元素的意义分别为:0.组合框名称 1.是否开启输入(True,False) 2.是否开启输入保护(True,False) 3.输入框宽度 4.字体大小 5.背景颜色。其中是否开启输入
表示该控件是否接受外界的输入,设为False时,不启用输入功能;而是否开启输入保护
表示该控件输入的字符是否显示为’星号’,若为True则显示为’星号’,主要用于密码输入。
(3)变量属性为一个列表,元素的意义分别为:0.变量类型(int,double,string,bool) 1.默认值 2.是否保存变量值 3.变量保存的文件夹名称。其中是否保存变量值
表示是否保存程序运行时控件中的数值,以便在程序再次运行时载入,而变量保存的文件夹名称
则是该变量保存文件的文件夹,若为空,变量的保存文件与脚本同目录。建议在同目录下建立新的文件夹以存放保存文件。
当前程序的运行结果为:创建一个名为测试数据组合框
的数据组合框控件,该控件摆放于主窗体
的第0
行第0
列;控件的显示名称为测试数据组合框
,且开启输入功能
,不开启输入保护
,输入框的宽度为10
,字体大小为12
,控件的背景颜色为Beige
;控件的数据类型为int,初始值为123,不开启变量保存
下面测试该控件的是否开启输入功能,将是否开启输入
设为False,你会发现该组合框关闭了输入功能
import PythonGui as GUI
主窗体 = GUI.A_建立根页面(['测试软件',800,510,'Beige'],'')
测试数据组合框 = GUI.S_创建数据组合框控件([主窗体,0,0],['测试数据组合框',False,False,10,12,'Beige'],['int',123,False,'测试保存变量值文件夹'])
主窗体.mainloop()
下面测试该控件的是否开启输入保护,将是否开启输入保护
设为True,你会发现该组合框所显示的字符变成了’星号’
import PythonGui as GUI
主窗体 = GUI.A_建立根页面(['测试软件',800,510,'Beige'],'')
测试数据组合框 = GUI.S_创建数据组合框控件([主窗体,0,0],['测试数据组合框',True,True,10,12,'Beige'],['int',123,False,'测试保存变量值文件夹'])
主窗体.mainloop()
下面测试该控件的变量保存功能,将是否保存变量值
设置为True。运行程序后,你将会发现在测试保存变量值文件夹
的文件夹下会多出一个文件,名字为测试数据组合框
,也就是设置的组合框名称。将控件的值更改成其他数字,关闭程序后,再次启动程序,你会发现控件中的值将会变成你刚刚设置的值,从而实现了保存功能。
import PythonGui as GUI
主窗体 = GUI.A_建立根页面(['测试软件',300,210,'Beige'],'')
测试数据组合框 = GUI.S_创建数据组合框控件([主窗体,0,0],['测试数据组合框',True,True,10,12,'Beige'],['int',123,True,'测试保存变量值文件夹'])
主窗体.mainloop()
第一次运行程序的界面:
更改值为1234456后关闭程序,再次启动程序显示框中的数字将变成1234456
四、总结
若有建议之处,麻烦在评论区指出,共同进步,谢谢。ps:平常加班较多,我会抽空余时间更新后面章节。(请做一个手勤的程序猿,哪怕再简单的代码,自己书写一遍胜过粘贴十遍)
这个封装函数的好处在于将重复的代码进行函数化,如图假设需要建立一个显示51个数据显示框,你会怎么写?
答案:
将在下一章的总结中贴出