大量创建小部件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大量创建小部件相关的知识,希望对你有一定的参考价值。

我正在使用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")

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

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

答案

你正确地做到了。我们可以使用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

以上是关于大量创建小部件的主要内容,如果未能解决你的问题,请参考以下文章

此应用小部件片段中所有意图 (PendingIntents) 的逻辑流

单击主屏幕小部件时如何打开特定片段

AppCompat v22.1.0 没有为片段正确主题化所有 xml 小部件

将小部件放在键盘顶部 - 我目前在该小部件下方获得了大量空间

如何更新导航抽屉中的有状态小部件,同时在 Android 中保持与片段相同的类?

ListView 不可点击,行中的所有小部件都是 TextView