1
This commit is contained in:
98
components/page2.py
Normal file
98
components/page2.py
Normal file
@@ -0,0 +1,98 @@
|
||||
# 统计数据页
|
||||
|
||||
import tkinter as tk
|
||||
from tkinter import ttk
|
||||
|
||||
class Page2:
|
||||
def __init__(self, root):
|
||||
self.root = root
|
||||
|
||||
# 创建主框架
|
||||
main_frame = ttk.Frame(root, padding="20")
|
||||
main_frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
|
||||
main_frame.columnconfigure(0, weight=1)
|
||||
main_frame.rowconfigure(1, weight=1)
|
||||
|
||||
# 标题
|
||||
title_label = ttk.Label(main_frame, text="当前数据统计", font=("Arial", 16, "bold"))
|
||||
title_label.grid(row=0, column=0, columnspan=4, pady=(0, 20))
|
||||
|
||||
# === 关键指标区域 ===
|
||||
self.kpi_data = []
|
||||
|
||||
# KPI 容器
|
||||
self.kpi_container = ttk.Frame(main_frame)
|
||||
self.kpi_container.grid(row=1, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
|
||||
for i in range(4):
|
||||
self.kpi_container.columnconfigure(i, weight=1)
|
||||
|
||||
self.value_labels = []
|
||||
self.create_dashboard_units_4col()
|
||||
|
||||
def create_kpi_unit(self, parent, name, value, row, col):
|
||||
"""创建单个单元"""
|
||||
unit_frame = ttk.Frame(parent, relief="solid", borderwidth=1, padding=10)
|
||||
unit_frame.grid(row=row, column=col, padx=8, pady=8, sticky="nsew")
|
||||
|
||||
# 设置行权重,使内容垂直居中
|
||||
parent.rowconfigure(row, weight=1)
|
||||
|
||||
if name and value:
|
||||
name_label = ttk.Label(unit_frame, text=f"{name}:", font=("Arial", 11))
|
||||
name_label.pack(anchor="w")
|
||||
value_label = ttk.Label(unit_frame, text=value, font=("Arial", 11, "bold"))
|
||||
value_label.pack(anchor="e")
|
||||
return value_label
|
||||
else:
|
||||
# 如果 name 或 value 为空,显示占位符或空白
|
||||
ttk.Label(unit_frame, text="—", foreground="gray").pack()
|
||||
return None
|
||||
|
||||
def create_dashboard_units_4col(self):
|
||||
"""创建4列布局的单元"""
|
||||
rows = (len(self.kpi_data) + 3) // 4 # 向上取整
|
||||
|
||||
for r in range(rows):
|
||||
self.kpi_container.rowconfigure(r, weight=1)
|
||||
|
||||
for idx, item in enumerate(self.kpi_data):
|
||||
row_idx = idx // 4
|
||||
col_idx = idx % 4
|
||||
|
||||
if item and len(item) >= 2:
|
||||
name, value = item[0], item[1]
|
||||
else:
|
||||
name, value = None, None
|
||||
value_label = self.create_kpi_unit(self.kpi_container, name, value, row_idx, col_idx)
|
||||
self.value_labels.clear()
|
||||
self.value_labels.append(value_label)
|
||||
|
||||
def update_data(self, new_values):
|
||||
self.kpi_data = new_values
|
||||
self.create_dashboard_units_4col()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import backend
|
||||
import random
|
||||
# 实例化后端
|
||||
c_backend = backend.Backend()
|
||||
|
||||
# 创建 GUI
|
||||
root = tk.Tk()
|
||||
root.title("统计面板")
|
||||
root.geometry("800x600")
|
||||
app = Page2(root)
|
||||
|
||||
def on_refresh():
|
||||
s = c_backend.get_statistics()
|
||||
for v in s:
|
||||
if v is not None and len(v) >= 2:
|
||||
v[1] = str(random.randint(1,100))
|
||||
app.update_data(s)
|
||||
|
||||
# 刷新按钮
|
||||
refresh_btn = ttk.Button(root, text="刷新数据", command=on_refresh)
|
||||
refresh_btn.grid(row=2, column=0, pady=10)
|
||||
|
||||
root.mainloop()
|
||||
Reference in New Issue
Block a user