一、基礎概念
Listbox:Listbox是一種圖形用戶界面(GUI)小部件,通常用於顯示文本或選擇列表中的項目。
Python Tkinter:是一個用於Python編程語言的標準GUI工具包,它是Python內置的模塊,無需額外安裝。
結合Python Tkinter框架中的Listbox小部件,可以實現快速的數據篩選和展示。在本文中,我們將以展示不同地區銷售數據為例,介紹如何使用Python Tkinter框架中的Listbox小部件實現快速數據篩選和展示。
二、繪製GUI界面
首先,我們需要繪製GUI界面。在這個界面中,我們要繪製一個表格和一個列表,用於展示數據。以下是界面繪製的代碼:
import tkinter as tk
root = tk.Tk()
root.title('數據篩選和展示')
root.geometry('600x400')
label_area = tk.Label(root, text='地區')
label_area.grid(row=0, column=0, padx=10, pady=10)
listbox_area = tk.Listbox(root)
listbox_area.grid(row=0, column=1, padx=10, pady=10)
label_table = tk.Label(root, text='數據表格')
label_table.grid(row=1, column=0, padx=10, pady=10)
frame_table = tk.Frame(root)
frame_table.grid(row=1, column=1, padx=10, pady=10)
root.mainloop()
代碼解析:
- 首先,我們導入了Tkinter模塊,並創建了一個名為root的主窗口。
- 接著,我們設置主窗口的標題和大小。
- 然後,我們創建了一個文本標籤label_area,用於顯示「地區」文本,並設置其在第0行,第0列,邊距為10的位置。
- 接著,我們創建了一個列表框listbox_area,用於顯示可選的地區列表,並設置其在第0行,第1列,邊距為10的位置。
- 然後,我們創建了一個文本標籤label_table,用於顯示「數據表格」文本,並設置其在第1行,第0列,邊距為10的位置。
- 接著,我們創建了一個框架frame_table,用於顯示數據表格,並設置其在第1行,第1列,邊距為10的位置。
- 最後,我們通過root.mainloop()運行主窗口。
<
三、處理數據
接下來我們需要準備數據,並對其進行處理。在這個例子中,我們將使用一個Python列表來存儲所有的銷售數據。以下是數據處理的代碼:
sales_data = [
{'region': '華北', 'product': '牛奶', 'sales': 5000},
{'region': '華北', 'product': '麵包', 'sales': 2000},
{'region': '華北', 'product': '香腸', 'sales': 1500},
{'region': '華東', 'product': '牛奶', 'sales': 3000},
{'region': '華東', 'product': '麵包', 'sales': 2500},
{'region': '華東', 'product': '香腸', 'sales': 1000},
{'region': '華南', 'product': '牛奶', 'sales': 6000},
{'region': '華南', 'product': '麵包', 'sales': 5000},
{'region': '華南', 'product': '香腸', 'sales': 4000},
]
# 獲取所有地區
regions = set()
for data in sales_data:
regions.add(data['region'])
regions = list(regions)
regions.sort()
代碼解析:
- 首先,我們創建了一個名為sales_data的Python列表,用於存儲所有的銷售數據。每條銷售數據都是一個字典,包含了地區、產品和銷售量三個屬性。
- 然後,我們通過遍歷所有銷售數據的方式,獲取了所有地區,並以列表的形式存儲。
- 最後,我們對地區列表進行排序,以便在GUI界面中按照順序顯示。
四、綁定列表框和數據表格
接下來我們需要將列表框和數據表格綁定,並實現數據的動態顯示。以下是綁定列表框和數據表格的代碼:
def show_data(region):
# 刪除原來的數據表格
for widget in frame_table.winfo_children():
widget.destroy()
# 構建新的數據表格
for i, data in enumerate(sales_data):
if data['region'] == region:
label_product = tk.Label(frame_table, text=data['product'])
label_product.grid(row=i, column=0)
label_sales = tk.Label(frame_table, text=data['sales'])
label_sales.grid(row=i, column=1)
for region in regions:
listbox_area.insert(tk.END, region)
region = regions[0]
listbox_area.selection_set(0)
show_data(region)
def on_select(event):
region = listbox_area.get(listbox_area.curselection())
show_data(region)
listbox_area.bind("<>", on_select)
代碼解析:
- 首先,我們創建了一個名為show_data的函數,用於根據選中的地區,在數據表格中顯示相應的銷售數據。
- 然後,我們通過刪除數據表格原有所有控制項的方式,清空了數據表格。
- 接著,我們通過遍歷所有銷售數據的方式,在數據表格中添加了與選中的地區相匹配的數據行。
- 在主程序中,我們通過對地區列表的遍歷,將所有地區都添加到了列表框中,並選中第一個地區。同時,我們還調用了show_data函數,展示了第一個地區的銷售數據。
- 最後,我們通過綁定「ListboxSelect」事件並傳入on_select函數,來實現了當用戶在列表框中選擇不同地區時,數據表格的刷新和更新。
五、完整代碼
import tkinter as tk
sales_data = [
{'region': '華北', 'product': '牛奶', 'sales': 5000},
{'region': '華北', 'product': '麵包', 'sales': 2000},
{'region': '華北', 'product': '香腸', 'sales': 1500},
{'region': '華東', 'product': '牛奶', 'sales': 3000},
{'region': '華東', 'product': '麵包', 'sales': 2500},
{'region': '華東', 'product': '香腸', 'sales': 1000},
{'region': '華南', 'product': '牛奶', 'sales': 6000},
{'region': '華南', 'product': '麵包', 'sales': 5000},
{'region': '華南', 'product': '香腸', 'sales': 4000},
]
# 獲取所有地區
regions = set()
for data in sales_data:
regions.add(data['region'])
regions = list(regions)
regions.sort()
def show_data(region):
# 刪除原來的數據表格
for widget in frame_table.winfo_children():
widget.destroy()
# 構建新的數據表格
for i, data in enumerate(sales_data):
if data['region'] == region:
label_product = tk.Label(frame_table, text=data['product'])
label_product.grid(row=i, column=0)
label_sales = tk.Label(frame_table, text=data['sales'])
label_sales.grid(row=i, column=1)
root = tk.Tk()
root.title('數據篩選和展示')
root.geometry('600x400')
label_area = tk.Label(root, text='地區')
label_area.grid(row=0, column=0, padx=10, pady=10)
listbox_area = tk.Listbox(root)
listbox_area.grid(row=0, column=1, padx=10, pady=10)
label_table = tk.Label(root, text='數據表格')
label_table.grid(row=1, column=0, padx=10, pady=10)
frame_table = tk.Frame(root)
frame_table.grid(row=1, column=1, padx=10, pady=10)
for region in regions:
listbox_area.insert(tk.END, region)
region = regions[0]
listbox_area.selection_set(0)
show_data(region)
def on_select(event):
region = listbox_area.get(listbox_area.curselection())
show_data(region)
listbox_area.bind("<>", on_select)
root.mainloop()
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/228811.html