Tkinter——自动创建表格/批量创建文本框,并且支持修改元素属性。

一、最基本的元素批量创建方法

import tkinter

#数据内容
nameList=["name" ,"phone","email","homeAdess","class","love","sex","object","score"]
valueList=[1,2,3,4,5,6,7,8,9]
nL = iter(nameList)
vL=iter(valueList)

#主程序
root = tkinter.Tk()

rows=3#设置元素占用的行数
columns=6#设置每行元素占用的列数
for r in range(rows):
	for c in range(columns):
		cell= tkinter.Text(root, width=10, height=2)
		cell.grid(row=r, column=c)
		#设置字段名
		if c % 2 == 0:
			cell.insert("end", nL.__next__())
			cell.configure(state='disabled', bg="Gainsboro")
		#设置字段值
		else:
			cell.insert("end", vL.__next__())
root.mainloop()

运行效果:
在这里插入图片描述

这种方法一次性创建,缺点是创建后,就无法通过代码来修改某个文本框的属性。

二、批量创建文本框,并支持后续通过代码修改属性。

实现修改属性的效果是通过locals()方法,把元素名和元素身加入了locals()列表中。这样就能通过locals()[name]的方法来调用了。不单是文本框, 把代码稍微改一下,批量创建的按钮、标签等元素都能进行修改。如此一来,少了很多代码量,又能做到属性修改的效果,这样就能实现一些高级功能。

代码展示:

import tkinter

class biao():
    def __init__(self,maxr,maxc):
        '''
        :param maxr: 设置总行数
        :param maxc: 每行的字段数量,
        '''
        self.maxr=maxr
        self.maxc=2*maxc
        self.textList=locals()#自动生成的变量名合集
    def autoCreat_Text(self,farhter,nameList=None,valuelist=None):
        '''
        :param farhter: 父组件名称
        :param nameList: 表格的字段名
        :param valuelist: 字段名的值
        :return:
        '''
        nL = iter(nameList)
        vL=iter(valuelist)
        for r in range(self.maxr):
            for c in range(self.maxc):
                index = str(r) + str(c)
                name="text"+index#设置表格编号如text00,text01
                self.textList[name]=tkinter.Text(farhter, width=10, height=2)
                self.textList[name].grid(row=r, column=c)
               
                if c % 2 == 0:
                    #设置字段名
                    index = str(r) + str(c)
                    name = "text" + index#设置文本框编号如text00、text01
                    self.textList[name].insert("end", nL.__next__())
                    self.textList[name].configure(state='disabled', bg="Gainsboro")
                else:
                    #设置字段值
                    self.textList[name].insert("end", vL.__next__())

使用方法:


#数据
nameList = ["name", "phone", "email", "homeAdess", "class", "love", "sex", "object", "score"]
valueList = [1, 2, 3, 4, 5, 6, 7, 8, 9]
#-------------------------------------------------------------------------------------------
root = tkinter.Tk()
#批量创建文本框
a = biao(3, 3)
a.autoCreat_Text(root, nameList, valueList)

#添加一个按钮演示效果
def changeText001():
	a.textList["text01"].configure(state='disabled', bg="Gainsboro")
b=tkinter.Button(root,text="效果演示",command=changeText001)
b.grid()
#
root.mainloop()

效果演示:
1.运行
运行效果
2.点击按钮后,禁用名为text01的文本框,并更改背景颜色。
点击按钮后,禁用名为text01的文本框,并更改背景颜色

如果喜欢本文本,欢迎收藏、转发、讨论、打赏。如果有小伙伴有更好的方法,欢迎评论留言,谢谢!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值