[英]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()
看看它在屏幕上打印的內容:
Label
對象的列表列表Label
的第一行)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.