如何在迴圈中建立Tkinter框架並更新物件值?


在本教程中,我們將探討如何在迴圈中動態建立 Tkinter 框架,以及如何在這些框架內即時更新物件值。我們將透過一個實際示例——構建一個動態任務管理器,允許使用者管理任務列表並切換狀態——來逐步講解。

設定 Tkinter 和 Task 類

在深入主要功能之前,請確保已安裝 Tkinter:

pip install tk

讓我們定義一個簡單的 Task 類,它表示具有名稱和狀態的任務:

import tkinter as tk

class Task:
   def __init__(self, name, status):
      self.name = name
      self.status = status

動態任務管理器 GUI

現在,讓我們建立一個動態任務管理器,它為列表中的每個任務生成框架,顯示任務詳細資訊和一個用於切換狀態的按鈕:

# Sample list of tasks
tasks = [
   Task("Task 1", "Incomplete"),
   Task("Task 2", "Incomplete"),
   Task("Task 3", "Incomplete"),
]

# Update function
def update_status(task, label):
   if task.status == "Incomplete":
      task.status = "Complete"
   else:
      task.status = "Incomplete"
   label.config(text=f"Status: {task.status}")

# Main function to create Tkinter GUI
def create_task_manager():
   root = tk.Tk()
   root.title("Tkinter Frames in Loop")
   root.geometry("720x300")

   # Create frames, labels, and buttons dynamically
   frames = []
   for task in tasks:
      frame = tk.Frame(root, padx=10, pady=10)
      frame.pack(fill=tk.X)

      # Label to display task name
      name_label = tk.Label(frame, text=f"Task: {task.name}")
      name_label.pack(anchor=tk.W)

      # Label to display task status
      status_label = tk.Label(frame, text=f"Status: {task.status}")
      status_label.pack(anchor=tk.W)

      # Button to update task status
      update_button = tk.Button(
         frame, text="Toggle Status", 
         command=lambda task=task, label=status_label: update_status(task, label)
      )
      update_button.pack(anchor=tk.E)
      frames.append(frame)

   root.mainloop()

# Run the task manager GUI
if __name__ == "__main__":
   create_task_manager()

程式碼理解

  • 我們定義了一個 Task 類,其屬性為任務名稱和狀態。

  • 建立了一個包含初始狀態的任務樣本列表 (tasks)。

  • update_status 函式在呼叫時切換任務狀態。

  • 在 create_task_manager 函式中,為每個任務動態建立框架、標籤和按鈕。update_button 與 update_status 函式關聯。

  • 最後,使用 root.mainloop() 啟動 Tkinter 視窗。

執行任務管理器

將程式碼儲存在檔案中(例如,dynamic_task_manager.py)並執行它。將出現一個 Tkinter 視窗,顯示每個任務的框架,其中包含任務名稱、狀態和“切換狀態”按鈕。單擊按鈕將動態更新任務狀態。

綜合所有步驟

現在讓我們結合所有步驟並檢查最終輸出:

示例

import tkinter as tk

class Task:
   def __init__(self, name, status):
      self.name = name
      self.status = status

# Sample list of tasks
tasks = [
   Task("Task 1", "Incomplete"),
   Task("Task 2", "Incomplete"),
   Task("Task 3", "Incomplete"),
]

# Update function
def update_status(task, label):
   if task.status == "Incomplete":
      task.status = "Complete"
   else:
      task.status = "Incomplete"
   label.config(text=f"Status: {task.status}")

# Main function to create Tkinter GUI
def create_task_manager():
   root = tk.Tk()
   root.title("Tkinter Frames in Loop")
   root.geometry("720x300")

   # Create frames, labels, and buttons dynamically
   frames = []
   for task in tasks:
      frame = tk.Frame(root, padx=10, pady=10)
      frame.pack(fill=tk.X)

      # Label to display task name
      name_label = tk.Label(frame, text=f"Task: {task.name}")
      name_label.pack(anchor=tk.W)

      # Label to display task status
      status_label = tk.Label(frame, text=f"Status: {task.status}")
      status_label.pack(anchor=tk.W)

      # Button to update task status
      update_button = tk.Button(
         frame, text="Toggle Status",
         command=lambda task=task, label=status_label: update_status(task, label)
      )
      update_button.pack(anchor=tk.E)

      frames.append(frame)

   root.mainloop()

# Run the task manager GUI
if __name__ == "__main__":
   create_task_manager()

輸出

以上程式碼具有一個 Task 類,表示具有名稱和狀態(“未完成”或“已完成”)的任務。GUI 為每個任務動態建立框架,顯示任務名稱、狀態和一個用於切換狀態的按鈕。

結論

總而言之,本文闡述了 Tkinter 在建立響應式任務管理器方面的動態功能。透過使用動態框架和即時物件更新,開發人員可以為各種應用程式建立互動式介面。

更新於:2024年2月15日

461 次瀏覽

啟動你的職業生涯

透過完成課程獲得認證

開始
廣告