python - Python tkinter:创建和控制许多小部件
问题描述
如果我有很多小部件,是否有一个小部件索引可以方便地控制它们?例如,假设我需要创建 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()
稍后的问题是如何更改一个特定标签的文本?显然,我不想一一手动定义标签(即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
对象的列表列表 - 一个列表(s 的第一行
Label
) - 第一
Label
排的第一个。
也只是为了展示如何更改Label
我添加的 a 的文本labels[0][1].config(text="New text")
,该文本会更改第一行中第二个标签的文本。
请记住,所有 python 列表都是基于 0 的。所以要得到你使用的第一个项目list_name[0]
,得到你使用的第二个项目list_name[1]
,...
推荐阅读
- javascript - Three.js - 如何计算弹丸的角度和弹道?
- office-js - 用于捕获取消会议事件的 Outlook 加载项
- node.js - 更新 cookie 和重定向返回 304 的快速路由
- typescript - 如何扩展父属性但使用 get/set
- android - 升级到 AGP 4.2.0,无法生成 Jacoco 代码覆盖率报告
- python - opencv:改善图片,删除背景
- c++ - 清除 std::string 对象的首选方法是什么?
- java - IntelliJ 找不到文件
- docker-compose - 在 wordpress docker-compose 安装上使用 wpcli
- node.js - 如何 $push 另一个集合中的 ObjectId?MongoDB