Python tkinter:创建和控制许多小部件



如果我有很多小部件,有没有小部件索引可以方便地控制它们?例如,假设我需要创建10乘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_0、label_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="nn")
print("labels[0]:", labels[0], end="nn")
print("labels[0][0]:", labels[0][0], end="nn")
# 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"),它会更改第一行中第二个标签的文本。

请记住,所有python列表都是基于0的。因此,要获得使用list_name[0]的第一个项目,要获得您使用list_name[1]的第二个项目。。。

最新更新