【Python】tkinter实现多列表水平排列并插入excel文件中的数值

现有一个处理好数据的excel文件,需要通过tkinter来进行直观上的窗口列表展示,并按照相同的格式为一栏,水平排列保持窗口美观。

df为提取excel数值的变量

左右两栏、两个列表时,可以通过奇数偶数来插入数值并有其对应的标题

# 创建标签显示关键词、次数、时间
frame_table = tk.Frame(result_window)
frame_table.pack(pady=10)

# 创建左侧栏
left_frame = tk.Frame(frame_table)
left_frame.grid(row=0, column=0)

# 创建右侧栏
right_frame = tk.Frame(frame_table)
right_frame.grid(row=0, column=1)

# 定义标题文本
headers = ["关键词", "次数", "时长/s"]

# 创建标题标签并放置在左侧栏
for col, header in enumerate(headers):
    tk.Label(left_frame, text=header, font=("Helvetica", 12)).grid(row=0, column=col, padx=10, pady=10, sticky="nsew")

# 创建标题标签并放置在右侧栏
for col, header in enumerate(headers):
    tk.Label(right_frame, text=header, font=("Helvetica", 12)).grid(row=0, column=col, padx=10, pady=10, sticky="nsew")

# 向标签中插入数据
for index, row in df.iterrows():
    if index % 2 == 0:  # 偶数行放在左侧栏
        for col, value in enumerate(row):
            tk.Label(left_frame, text=value).grid(row=index//2+1, column=col, padx=10, pady=5, sticky="nsew")
    else:  # 奇数行放在右侧栏
        for col, value in enumerate(row):
            tk.Label(right_frame, text=value).grid(row=index//2+1, column=col, padx=10, pady=5, sticky="nsew")

# 设置标题栏列宽统一
for i in range(len(headers)):
    left_frame.grid_columnconfigure(i, weight=1, uniform="column")
    right_frame.grid_columnconfigure(i, weight=1, uniform="column")

执行之后你会发现标题行无法对齐,那么将未插入数值的列加入空白行

# 向标签中插入数据
for index, row in df.iterrows():
    if index % 2 == 0:  # 偶数行放在左侧栏
        for col, value in enumerate(row):
            tk.Label(left_frame, text=value).grid(row=index//2+1, column=col, padx=10, pady=5, sticky="nsew")
    else:  # 奇数行放在右侧栏
        for col, value in enumerate(row):
            tk.Label(right_frame, text=value).grid(row=index//2, column=col, padx=10, pady=5, sticky="nsew")

# 如果左右两栏行数不同,就将右栏最后添加一个空白行保证对齐
if len(df) % 2 != 0:
    for col in range(len(headers)):
        tk.Label(right_frame, text="").grid(row=len(df)//2+1, column=col, padx=10, pady=5, sticky="nsew")

同理,可以使用三栏水平排列的列表栏

    # 创建标题框架
    frame_table  = tk.Frame(result_window)
    frame_table .pack(pady=10)
    # 创建左侧栏
    left_frame = tk.Frame(frame_table)
    left_frame.grid(row=0, column=0)
    # 创建中间栏
    middle_frame = tk.Frame(frame_table)
    middle_frame.grid(row=0, column=1)
    # 创建右侧栏
    right_frame = tk.Frame(frame_table)
    right_frame.grid(row=0, column=2)

    # 定义标题文本
    headers = ["关键词", "次数", "时长/s"]

    # 创建标题标签并放置在左侧栏
    for col, header in enumerate(headers):
        tk.Label(left_frame, text=header, font=("Helvetica", 12)).grid(row=0, column=col, padx=10, pady=10, sticky="nsew")
        tk.Label(middle_frame, text=header, font=("Helvetica", 12)).grid(row=0, column=col, padx=10, pady=10, sticky="nsew")
        tk.Label(right_frame, text=header, font=("Helvetica", 12)).grid(row=0, column=col, padx=10, pady=10, sticky="nsew")
    
    # 计算整除后每栏应该插入的行数
    rows_per_column = len(df) // 3

    # 向标签中插入数据
    for index, row in df.iterrows():
        if index % 3 == 0:  # 每三行放在左侧栏
            for col, value in enumerate(row):
                tk.Label(left_frame, text=value).grid(row=index//3+1, column=col, padx=10, pady=5, sticky="nsew")
        elif index % 3 == 1:  # 每三行放在中间栏
            for col, value in enumerate(row):
                tk.Label(middle_frame, text=value).grid(row=index//3+1, column=col, padx=10, pady=5, sticky="nsew")
        else:  # 每三行放在右侧栏
            for col, value in enumerate(row):
                tk.Label(right_frame, text=value).grid(row=index//3+1, column=col, padx=10, pady=5, sticky="nsew")
        # 如果最后的右栏没有被3整除,用空白行填充
        if len(df) % 3 != 0:
            for index in range(rows_per_column * 3, len(df)):
                for col in range(len(headers)):
                    tk.Label(middle_frame, text="").grid(row=index//3+2, column=col, padx=10, pady=5, sticky="nsew")
                    tk.Label(right_frame, text="").grid(row=index//3+2, column=col, padx=10, pady=5, sticky="nsew")
            
    # 设置标题栏列宽统一
    for i in range(len(headers)):
        left_frame.grid_columnconfigure(i, weight=1, uniform="column")
        middle_frame.grid_columnconfigure(i, weight=1, uniform="column")
        right_frame.grid_columnconfigure(i, weight=1, uniform="column")

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hellenionia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值