簡體   English   中英

Python tkinter:創建和控制許多小部件

[英]Python tkinter: creating and controlling many widgets

如果我有很多小部件,是否有一個小部件索引可以方便地控制它們? 例如,假設我需要創建 10 x 10 個標簽,我可以運行以下簡單代碼:

from tkinter import *

root = Tk()
for i in range(10):
   for j in range(10):
      label = Label(root, text = f'{i}, {j}')
      label.grid(row = i, column = j, padx = 5, pady = 5)

root.mainloop()

稍后的問題是如何更改特定 label 的文本? 顯然,我不想一一手動定義標簽(即label0_0、label0_1、...、label9_9)。 那么有沒有辦法我們可以使用小部件索引之類的東西來控制它? 就像是

    from tkinter import *
    
    root = Tk()
    for i in range(10):
       for j in range(10):
          label[i][j] = Label(root, text = f'{i}, {j}')
          label[i][j].grid(row = i, column = j, padx = 5, pady = 5)
          # Clearly, there are mistakes here
    root.mainloop()
'''

試試這個代碼:

from tkinter import *

root = Tk()
# Create an empty list for the labels
labels = []

for i in range(3):
    row = [] # Create an empty list for the row of labels
    for j in range(3):
        label = Label(root, text=f"{i}{j}")
        label.grid(row=i, column=j, padx=5, pady=5)
        row.append(label) # Put the new label at the end of the list
    labels.append(row) # Put the list of labels at the end of the list

print("All of the labels:", labels, end="\n\n")
print("labels[0]:", labels[0], end="\n\n")
print("labels[0][0]:", labels[0][0], end="\n\n")

# Change the text in labels[0][1]
labels[0][1].config(text="New text")

root.mainloop()

看看它在屏幕上打印的內容:

  1. 包含所有Label對象的列表列表
  2. 一個列表( Label的第一行)
  3. 第一排的第一個Label

還只是為了展示如何更改Label的文本,我添加了labels[0][1].config(text="New text") ,它更改了第一行中第二個 label 的文本。

請記住,所有 python 列表都是從 0 開始的。 因此,要獲得使用list_name[0]的第一項,要獲得使用list_name[1]的第二項,...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM