大量创建小部件

问题描述 投票:1回答:1

我正在使用tkinter为我的一个类创建一个计算器,我在网格布局中制作了20个标签,每次使用几乎相同的代码行,除了名称和行号。我只是想知道是否有一种标准的方法可以快速有效地制作这样的标签,或者是否有人用他们的快速方式来打破繁琐的工作?

例如,这就是我的“代码”基本上看起来像。

label0 = tk.Label(frame,
                  text="Label0")
label0.grid(row=0,
            column=0,
            sticky="E")

label1 = tk.Label(frame,
                  text="Label1")
label1.grid(row=1,
            column=0,
            sticky="E")

...

labeln = tk.Label(frame,
                  text="Labeln")
labeln.grid(row=n,
            column=0,
            sticky="E")

我尝试创建一个包含所有标签名称的列表或库,然后说出类似的内容

labelnames = ["label0",
              "labebl1",
               ...,
              "labeln"]

for i in len(labelnames):
    labelx = tk.Label(frame,
                      text=labelnames[i])
    labelx.grid(row=i,
                column=0,
                sticky="E")

这是有效的,但重点是要学习,我想知道是否有标准或“正确”的方法来做到这一点。我倾向于偏离使用课程,因为我仍然不理解它们(我知道具有讽刺意味),但我想知道这是否更适合他们。

这个方法出现的问题是我有一个输入框对应于使用类似循环创建的每个标签,我不知道如何以这种方式从条目中获取输入。

python tkinter widget
1个回答
2
投票

你正确地做到了。我们可以使用enumerate使它更整洁:

labels = []
for i, label in enumerate(labelnames):
    labelx = tk.Label(frame, text=label)
    labelx.grid(row=i, column=0, sticky="E")
    labels.append(labelx)

我还将生成的小部件添加到列表中。这样我以后可以访问它们。

labels[2].config(text='new text') # update the text on the 3rd Label
© www.soinside.com 2019 - 2024. All rights reserved.