(三)python tkinter GUI简单化编程之数据组合框控件


创作不易,请多包涵支持,谢谢!


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个数据显示框,你会怎么写?
在这里插入图片描述
答案:

将在下一章的总结中贴出

猜你喜欢

转载自blog.csdn.net/baidu_37611158/article/details/114831389
今日推荐