Tkinter 中可變數量的輸入欄位


Tkinter 是 Python 中一個流行的 GUI 工具包,它提供了一套強大的工具來建立視覺上吸引人的介面。在本教程中,我們將探討使用 Tkinter 建立動態表單,其中輸入欄位的數量根據使用者需求進行調整。

瞭解動態表單的需求

在許多應用程式中,需要一個可以處理可變數量輸入欄位的動態表單。考慮使用者可能需要輸入任意數量的專案、問題或偏好的資訊的情況。對固定數量的輸入欄位進行硬編碼變得不切實際,因此需要採用動態方法。

Tkinter:簡要概述

Tkinter 與 Python 捆綁在一起,是一個多功能的 GUI 工具包,簡化了建立圖形介面的過程。Tkinter 中的 Entry 小部件通常用於捕獲使用者輸入。為了演示 Tkinter 的動態功能,讓我們建立一個場景,使用者可以在其中動態地向表單新增輸入欄位。

設計動態輸入表單

為了實現動態輸入表單,我們將使用一個實際示例將流程分解成關鍵步驟。在本示例中,我們的目標是允許使用者輸入任意數量的問題的資訊。表單將透過根據使用者的輸入動態新增輸入欄位來適應使用者的需求。

設定 Tkinter 應用程式

首先設定 Tkinter 應用程式視窗並初始化任何必要的變數。

import tkinter as tk
app = tk.Tk()
app.title("Dynamic Input Form")

定義新增輸入欄位的函式

建立一個名為 add_input_fields 的函式,它將所需欄位的數量作為引數,並動態生成相應的輸入欄位。

# List to store user inputs
user_inputs = []

def add_input_fields(num_fields):
   for i in range(num_fields):
      tk.Label(app, text=f"Input {i + 1}").pack()
      entry = tk.Entry(app)
      entry.pack()
      user_inputs.append(entry)  # Store the Entry widget in the list

允許使用者輸入欄位數量

建立一個 Entry 小部件,允許使用者指定他們需要的輸入欄位的數量。

num_fields_entry = tk.Entry(app)
num_fields_entry.pack()

觸發動態欄位新增

定義一個名為 get_num_fields 的函式,該函式檢索使用者輸入,動態新增輸入欄位,幷包含一個按鈕來觸發值的列印。

  • def get_num_fields(): try: num_fields = int(num_fields_entry.get()) add_input_fields(num_fields) except ValueError: tk.messagebox.showerror("錯誤", "請輸入有效的數字。") # 新增一個按鈕來觸發值的列印 print_values_button = tk.Button(app, text="列印值", command=print_values) print_values_button.pack()

列印使用者輸入

建立一個名為 print_values 的函式,該函式從每個輸入欄位檢索值並在控制檯上列印它們。

def print_values():
   values = [entry.get() for entry in user_inputs]
   print("User inputs:", values)

執行 Tkinter 主迴圈

執行 Tkinter 主迴圈以顯示 GUI 並處理使用者互動。

app.mainloop()

將所有內容整合在一起

現在,讓我們將這些元件整合到一個連貫的指令碼中 -

示例

import tkinter as tk

# Create the main Tkinter application window
app = tk.Tk()
app.title("Dynamic Input Form")
app.geometry("720x250")

# List to store user inputs
user_inputs = []

# Function to add dynamically generated input fields
def add_input_fields(num_fields):
    for i in range(num_fields):
        # Create a label for each question
        tk.Label(app, text=f"Input {i + 1}").pack()
        # Create an Entry widget for user input and store it in the list
        entry = tk.Entry(app)
        entry.pack()
        user_inputs.append(entry)  # Store the Entry widget in the list

# Entry widget for the user to input the number of fields
num_fields_entry = tk.Entry(app)
num_fields_entry.pack()

# Function to retrieve user input, dynamically add input fields, and add a button to print values
def get_num_fields():
   try:
      num_fields = int(num_fields_entry.get())
      add_input_fields(num_fields)
   except ValueError:
      # Display an error message if the user input is not a valid number
      tk.messagebox.showerror("Error", "Please enter a valid number.")

   # Add a button to trigger printing the values
   print_values_button = tk.Button(app, text="Print Values", command=print_values)
   print_values_button.pack()

# Function to print user inputs on the console
def print_values():
   values = [entry.get() for entry in user_inputs]
   print("User inputs:", values)

# Button to trigger the dynamic addition of input fields
add_fields_button = tk.Button(app, text="Add Input Fields", command=get_num_fields)
add_fields_button.pack()

# Run the Tkinter main loop to display the GUI and handle user interactions
app.mainloop()

輸出

執行此指令碼後,將出現一個視窗,允許使用者輸入他們所需的欄位數量。單擊“新增輸入欄位”按鈕將在下方動態生成指定數量的輸入欄位。隨後,單擊“列印值”按鈕將檢索使用者輸入並在控制檯上列印它們。

結論

在 Tkinter 中建立可變數量的輸入欄位可以建立更靈活和使用者友好的 GUI。透過在應用程式中加入動態元素,您可以更好地滿足使用者需求和偏好。

更新於: 2024 年 2 月 15 日

610 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.