GUI-文本控件Test中写入表格内容

在文本控件中写入类似表格样式,需要自己调整,且值大于字段名设置长度时用省略号表示(目前只能用这种笨的方法,先记录,以后有新的方法再改动)
其中用了两种方式窗口展示:

1.自定义改动窗口大小显示所有值,且垂直拉动窗口时垂直拉条隐藏, 测试代码如下:

可参考文章:链接: https://zhuanlan.zhihu.com/p/344287019?utm_id=0

import tkinter as tk
from tkinter import ttk

class AutoHideScrollbar(ttk.Scrollbar):
    def set(self,upper,lower):  # 继承ttk.Scrollbar (tk.Scrollbar),重写覆盖父类的set()方法,实现自动隐藏滚动条
        #滚动条可以看做一个在0到1之间从上到下的单向坐标系,upper 起始值为0,表示滚动条上方在坐标系中的值(浮点值表示);lower 表示滚动条最下方在坐标系中对应的值,最大为1。而当upper=0,lower=1时,就表示滚动条占据了整个空间,此时就可以触发他的隐藏方法。
        if float(upper) <= 0.0 and float(lower) >= 1.0:
            self.grid_remove() # 需要注意的是,隐藏滚动条组件的方法是用的grid_remove(),而不能使用grid_forget()方法
        else:
            self.grid()
        ttk.Scrollbar.set(self,upper,lower)
        
root = tk.Tk()        
screenwidth = root.winfo_screenwidth()  # 屏幕宽度
screenheight = root.winfo_screenheight()  # 屏幕高度
width = 1310
height = 200
x = int((screenwidth - width) / 2)
y = int((screenheight - height) / 2)
root.geometry('{}x{}+{}+{}'.format(width, height, x, y))
root.rowconfigure(0, weight=1)
root.columnconfigure(0, weight=1)

root.title('test')
a=[[{'AC_DT': datetime.datetime(2023, 1, 9, 0, 0), 'T42_MERC_ID': '826daposb000057', 'CARD_TYPE': '01', 'T41_TRM_NO': 'daphl057', 'AGT_MERC_ID': '8011027000003X6',
     'T4_TXN_COUNT': 1, 'T4_TXN_AMT': 8800000, 'MERC_FEE_AMT': None}],
   [{'AC_DT': datetime.datetime(2022, 12, 10, 0, 0),
 'T42_MERC_ID': '826daposb000057+++++5556', 'CARD_TYPE': '01', 'T41_TRM_NO': 'daphl057', 'AGT_MERC_ID': '8011027000003X6',
     'T4_TXN_COUNT': 1, 'T4_TXN_AMT': 8800000,
     'MERC_FEE_AMT': None}],
   [{'AC_DT': datetime.datetime(2022, 11, 10, 0, 0), 'T42_MERC_ID': '826daposb000057', 'CARD_TYPE': '01',
     'T41_TRM_NO': 'daphl057', 'AGT_MERC_ID': '8011027000003X6',
     'T4_TXN_COUNT': 1, 'T4_TXN_AMT': 8800000,
     'MERC_FEE_AMT': None}],[{'AC_DT': datetime.datetime(2022, 10, 10, 0, 0), 'T42_MERC_ID': '826daposb000057', 'CARD_TYPE': '01',
     'T41_TRM_NO': 'daphl057', 'AGT_MERC_ID': '8011027000003X6',
     'T4_TXN_COUNT': 1, 'T4_TXN_AMT': 8800000,
     'MERC_FEE_AMT': None}],[{'AC_DT': datetime.datetime(2022, 10, 10, 0, 0), 'T42_MERC_ID': '826daposb000057', 'CARD_TYPE': '01',
     'T41_TRM_NO': 'daphl057', 'AGT_MERC_ID': '8011027000003X6',
     'T4_TXN_COUNT': 1, 'T4_TXN_AMT': 8800000,
     'MERC_FEE_AMT': None}],[{'AC_DT': datetime.datetime(2022, 10, 10, 0, 0), 'T42_MERC_ID': '826daposb000057', 'CARD_TYPE': '01',
     'T41_TRM_NO': 'daphl057', 'AGT_MERC_ID': '8011027000003X6',
     'T4_TXN_COUNT': 1, 'T4_TXN_AMT': 8800000,
     'MERC_FEE_AMT': None}],[{'AC_DT': datetime.datetime(2022, 10, 10, 0, 0), 'T42_MERC_ID': '826daposb000057', 'CARD_TYPE': '01',
     'T41_TRM_NO': 'daphl057', 'AGT_MERC_ID': '8011027000003X6',
     'T4_TXN_COUNT': 1, 'T4_TXN_AMT': 8800000,
     'MERC_FEE_AMT': None}],[{'AC_DT': datetime.datetime(2022, 10, 10, 0, 0), 'T42_MERC_ID': '826daposb000057', 'CARD_TYPE': '01',
     'T41_TRM_NO': 'daphl057', 'AGT_MERC_ID': '8011027000003X6',
     'T4_TXN_COUNT': 1, 'T4_TXN_AMT': 8800000,
     'MERC_FEE_AMT': None}],[{'AC_DT': datetime.datetime(2022, 10, 10, 0, 0), 'T42_MERC_ID': '826daposb000057', 'CARD_TYPE': '01',
     'T41_TRM_NO': 'daphl057', 'AGT_MERC_ID': '8011027000003X6',
     'T4_TXN_COUNT': 1, 'T4_TXN_AMT': 8800000,
     'MERC_FEE_AMT': None}],[{'AC_DT': datetime.datetime(2022, 10, 10, 0, 0), 'T42_MERC_ID': '826daposb000057', 'CARD_TYPE': '01',
     'T41_TRM_NO': 'daphl057', 'AGT_MERC_ID': '8011027000003X6',
     'T4_TXN_COUNT': 1, 'T4_TXN_AMT': 8800000,
     'MERC_FEE_AMT': None}],[{'AC_DT': datetime.datetime(2022, 10, 10, 0, 0), 'T42_MERC_ID': '826daposb000057', 'CARD_TYPE': '01',
     'T41_TRM_NO': 'daphl057', 'AGT_MERC_ID': '8011027000003X6',
     'T4_TXN_COUNT': 1, 'T4_TXN_AMT': 8800000,
     'MERC_FEE_AMT': None}],[{'AC_DT': datetime.datetime(2022, 10, 10, 0, 0), 'T42_MERC_ID': '826daposb000057', 'CARD_TYPE': '01',
     'T41_TRM_NO': 'daphl057', 'AGT_MERC_ID': '8011027000003X6',
     'T4_TXN_COUNT': 1, 'T4_TXN_AMT': 8800000,
     'MERC_FEE_AMT': None}]]
     
"""ww=x-130
hh=y-10
test_1=tk.Text(root,wrap=tk.NONE, width=ww,height=hh)"""
test_1=tk.Text(root,wrap=tk.NONE)
test_1.grid(row=0, column=0, padx=5, sticky=tk.N + tk.E + tk.W + tk.S)

#垂直拉条
bar=AutoHideScrollbar(root)  #调用方法
bar.grid(row=0, column=10, sticky='N' + 'S')
bar.config(command=test_1.yview)
test_1.config(yscrollcommand=bar.set)  #拉条跟着移动方向

aa=list(a[0][0].keys())  #取数组中字典的key
global d,r
#循环取数组中的key插入作为字段名
for r in range(len(aa)):
    #name = tk.Text(root, width=15, height=1)
    test_1.insert('end', aa[r])
    if len(aa[r])<20:
        test_1.insert('end', ' '*(20-len(str(aa[r])))) #插入20减去字符数的空格
    test_1.insert('end', ' | ') #增加表格线
    #name.grid(row=0, column=r)

    if aa[r]=='MERC_FEE_AMT':
        test_1.insert('end', '\n')
        #test_1.insert('end', '-'*(26*r)+'|\n')
        test_1.insert('end', ('-' * 20 +'-|-')* (r+1) + '\n')  #增加表格线
#循环取数组中的值作为字段值,因为是数组所以需要先取有多少组值
for d in range(len(a)):
    bb = list(a[d][0].values()) #取数组中字典的值
    for j in range(len(bb)):
        #值为none时插入失败,需要加判断
        if bb[j] == None:
            test_1.insert('end', 'None'+' '*16+' |\n')
        else:
            #字段名的空间设置了长度约20
            if len(str(bb[j]))<20:
                test_1.insert('end', bb[j])
                test_1.insert('end', ' '*(20-len(str(bb[j]))))
            #长度大于20的其余值显示为省略号(目前的效果)
            elif len(str(bb[j])) >= 20:
                print(bb[j][:15])
                test_1.insert('end', bb[j][:17])
                test_1.insert('end', '.' * (20 - len(str(bb[j][:17]))))
            test_1.insert('end', ' | ')
    test_1.insert('end', ('-' * 20 +'-|-')* (r+1) + '\n')  #增加表格线
root.mainloop()  #运行窗口

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

拉动放大窗口后垂直条隐藏:
在这里插入图片描述
最大化:
在这里插入图片描述

2.设置水平与垂直拉条显示,代码如下:

import tkinter as tk
root = tk.Tk()
root.geometry('950x200+100+100')
root.title('test')

a=[[{'AC_DT': datetime.datetime(2023, 1, 9, 0, 0), 'T42_MERC_ID': '826daposb000057', 'CARD_TYPE': '01', 'T41_TRM_NO': 'daphl057', 'AGT_MERC_ID': '8011027000003X6',
     'T4_TXN_COUNT': 1, 'T4_TXN_AMT': 8800000, 'MERC_FEE_AMT': None}],
   [{'AC_DT': datetime.datetime(2022, 12, 10, 0, 0), 'T42_MERC_ID': '826daposb000057+++++5556', 'CARD_TYPE': '01', 'T41_TRM_NO': 'daphl057', 'AGT_MERC_ID': '8011027000003X6',
     'T4_TXN_COUNT': 1, 'T4_TXN_AMT': 8800000,
     'MERC_FEE_AMT': None}],
   [{'AC_DT': datetime.datetime(2022, 11, 10, 0, 0), 'T42_MERC_ID': '826daposb000057', 'CARD_TYPE': '01',
     'T41_TRM_NO': 'daphl057', 'AGT_MERC_ID': '8011027000003X6',
     'T4_TXN_COUNT': 1, 'T4_TXN_AMT': 8800000,
     'MERC_FEE_AMT': None}],[{'AC_DT': datetime.datetime(2022, 10, 10, 0, 0), 'T42_MERC_ID': '826daposb000057', 'CARD_TYPE': '01',
     'T41_TRM_NO': 'daphl057', 'AGT_MERC_ID': '8011027000003X6',
     'T4_TXN_COUNT': 1, 'T4_TXN_AMT': 8800000,
     'MERC_FEE_AMT': None}],[{'AC_DT': datetime.datetime(2022, 10, 10, 0, 0), 'T42_MERC_ID': '826daposb000057', 'CARD_TYPE': '01',
     'T41_TRM_NO': 'daphl057', 'AGT_MERC_ID': '8011027000003X6',
     'T4_TXN_COUNT': 1, 'T4_TXN_AMT': 8800000,
     'MERC_FEE_AMT': None}],[{'AC_DT': datetime.datetime(2022, 10, 10, 0, 0), 'T42_MERC_ID': '826daposb000057', 'CARD_TYPE': '01',
     'T41_TRM_NO': 'daphl057', 'AGT_MERC_ID': '8011027000003X6',
     'T4_TXN_COUNT': 1, 'T4_TXN_AMT': 8800000,
     'MERC_FEE_AMT': None}],[{'AC_DT': datetime.datetime(2022, 10, 10, 0, 0), 'T42_MERC_ID': '826daposb000057', 'CARD_TYPE': '01',
     'T41_TRM_NO': 'daphl057', 'AGT_MERC_ID': '8011027000003X6',
     'T4_TXN_COUNT': 1, 'T4_TXN_AMT': 8800000,
     'MERC_FEE_AMT': None}],[{'AC_DT': datetime.datetime(2022, 10, 10, 0, 0), 'T42_MERC_ID': '826daposb000057', 'CARD_TYPE': '01',
     'T41_TRM_NO': 'daphl057', 'AGT_MERC_ID': '8011027000003X6',
     'T4_TXN_COUNT': 1, 'T4_TXN_AMT': 8800000,
     'MERC_FEE_AMT': None}],[{'AC_DT': datetime.datetime(2022, 10, 10, 0, 0), 'T42_MERC_ID': '826daposb000057', 'CARD_TYPE': '01',
     'T41_TRM_NO': 'daphl057', 'AGT_MERC_ID': '8011027000003X6',
     'T4_TXN_COUNT': 1, 'T4_TXN_AMT': 8800000,
     'MERC_FEE_AMT': None}],[{'AC_DT': datetime.datetime(2022, 10, 10, 0, 0), 'T42_MERC_ID': '826daposb000057', 'CARD_TYPE': '01',
     'T41_TRM_NO': 'daphl057', 'AGT_MERC_ID': '8011027000003X6',
     'T4_TXN_COUNT': 1, 'T4_TXN_AMT': 8800000,
     'MERC_FEE_AMT': None}],[{'AC_DT': datetime.datetime(2022, 10, 10, 0, 0), 'T42_MERC_ID': '826daposb000057', 'CARD_TYPE': '01',
     'T41_TRM_NO': 'daphl057', 'AGT_MERC_ID': '8011027000003X6',
     'T4_TXN_COUNT': 1, 'T4_TXN_AMT': 8800000,
     'MERC_FEE_AMT': None}],[{'AC_DT': datetime.datetime(2022, 10, 10, 0, 0), 'T42_MERC_ID': '826daposb000057', 'CARD_TYPE': '01',
     'T41_TRM_NO': 'daphl057', 'AGT_MERC_ID': '8011027000003X6',
     'T4_TXN_COUNT': 1, 'T4_TXN_AMT': 8800000,
     'MERC_FEE_AMT': None}]]
     
test_1=tk.Text(root,wrap=tk.NONE, width=130,height=10)
test_1.grid(row=0, column=0, padx=5, sticky=tk.N + tk.E + tk.W + tk.S)
aa=list(a[0][0].keys())  #取数组中字典的key

#水平拉条
bar1 = tk.Scrollbar(root, orient=tk.HORIZONTAL)
bar1.config(command=test_1.xview)
bar1.grid(row=6, column=0,columnspan=50, sticky='W' + 'E')  #
test_1.config(xscrollcommand=bar1.set)

#垂直拉条
bar=tk.Scrollbar(root, orient=tk.VERTICAL)
bar.grid(row=0, column=50, sticky='N' + 'S')
bar.config(command=test_1.yview)
test_1.config(yscrollcommand=bar.set)  #拉条跟着移动方向

global d,r
#循环取数组中的key插入作为字段名
for r in range(len(aa)):
    #name = tk.Text(root, width=15, height=1)
    test_1.insert('end', aa[r])
    if len(aa[r])<20:
        test_1.insert('end', ' '*(20-len(str(aa[r])))) #插入20减去字符数的空格
    test_1.insert('end', ' | ') #增加表格线
    #name.grid(row=0, column=r)

    if aa[r]=='MERC_FEE_AMT':
        test_1.insert('end', '\n')
        #test_1.insert('end', '-'*(26*r)+'|\n')
        test_1.insert('end', ('-' * 20 +'-|-')* (r+1) + '\n')  #增加表格线
        
#循环取数组中的值作为字段值,因为是数组所以需要先取有多少组值
for d in range(len(a)):
    bb = list(a[d][0].values()) #取数组中字典的值
    for j in range(len(bb)):
        #值为none时插入失败,需要加判断
        if bb[j] == None:
            test_1.insert('end', 'None'+' '*16+' |\n')
        else:
            #字段名的空间设置了长度约20
            if len(str(bb[j]))<20:
                test_1.insert('end', bb[j])
                test_1.insert('end', ' '*(20-len(str(bb[j]))))
            #长度大于20的其余值显示为省略号(目前的效果)
            elif len(str(bb[j])) >= 20:
                print(bb[j][:15])
                test_1.insert('end', bb[j][:17])
                test_1.insert('end', '.' * (20 - len(str(bb[j][:17]))))
            test_1.insert('end', ' | ')
    test_1.insert('end', ('-' * 20 +'-|-')* (r+1) + '\n')  #增加表格线
root.mainloop() 

运行效果如下:
在这里插入图片描述
拉动水平条:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值