如何实现CSV周列数据在Tkinter Treeview中按当日自动展示
实现Tkinter Treeview自动匹配当日展示CSV对应列数据
核心思路
- 获取当前星期几,映射到CSV对应的列名
- 读取CSV文件,提取目标列的数据
- 将数据插入到Treeview的单列中展示
代码实现(基础版,使用csv模块)
from datetime import datetime import tkinter as tk from tkinter import ttk import csv # 1. 获取当日对应的CSV列名 today_weekday = datetime.today().weekday() # 0=周一,6=周日 # 请确保此处列名与CSV文件的表头完全一致 csv_columns = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"] target_col = csv_columns[today_weekday] # 2. 读取CSV并提取目标列数据 target_data = [] try: with open("your_data.csv", "r", encoding="utf-8") as csv_file: csv_reader = csv.DictReader(csv_file) # 校验目标列是否存在 if target_col not in csv_reader.fieldnames: raise ValueError(f"CSV文件中未找到列:{target_col}") # 逐行提取数据 for row in csv_reader: target_data.append(row[target_col]) except FileNotFoundError: print("错误:指定的CSV文件不存在,请检查路径") except ValueError as e: print(e) # 3. 创建Tkinter界面与Treeview root = tk.Tk() root.title(f"{target_col}数据展示") # 初始化Treeview,仅保留一个展示列 tree = ttk.Treeview(root, columns=("data",), show="headings") tree.heading("data", text=target_col) tree.column("data", width=300, anchor="center") # 插入数据到Treeview for item in target_data: tree.insert("", tk.END, values=(item,)) tree.pack(fill=tk.BOTH, expand=True, padx=10, pady=10) root.mainloop()
代码实现(简化版,使用pandas)
如果已经安装了pandas,代码会更简洁:
from datetime import datetime import tkinter as tk from tkinter import ttk import pandas as pd # 获取当日列名 today_weekday = datetime.today().weekday() csv_columns = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"] target_col = csv_columns[today_weekday] # 读取CSV并提取数据 try: df = pd.read_csv("your_data.csv", encoding="utf-8") if target_col not in df.columns: raise ValueError(f"CSV文件中未找到列:{target_col}") target_data = df[target_col].tolist() except FileNotFoundError: print("错误:指定的CSV文件不存在") except ValueError as e: print(e) # 创建界面 root = tk.Tk() root.title(f"{target_col}数据展示") tree = ttk.Treeview(root, columns=("data",), show="headings") tree.heading("data", text=target_col) tree.column("data", width=300, anchor="center") for item in target_data: tree.insert("", tk.END, values=(item,)) tree.pack(fill=tk.BOTH, expand=True, padx=10, pady=10) root.mainloop()
关键注意事项
- 替换代码中的
your_data.csv为实际的CSV文件路径 - 确保
csv_columns列表中的列名与CSV表头完全一致(包括汉字、大小写、空格) - 如果需要每日自动刷新数据,可以添加定时器逻辑,例如使用
root.after(86400000, refresh_function)(86400000毫秒=24小时),在refresh_function中重新获取日期、读取数据并更新Treeview
内容的提问来源于stack exchange,提问作者user19851007
相关产品推荐
相关产品推荐

