【问题标题】:Mass creation of widgets大量创建小部件
【发布时间】:2017-12-19 01:31:06
【问题描述】:

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

这行得通,但这样做的目的是为了学习,我想知道是否有标准或“正确”的方法来做到这一点。我倾向于远离使用类,因为我仍然不理解它们(我知道具有讽刺意味),但我想知道这是否对它们更有用。

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

【问题讨论】:

  • IMO 列表和循环并没有什么问题
  • 顺便说一句,如果您对在这里提出非常简单的问题感到不快,还有更多面向初学者的论坛,例如 reddit.com/r/learnpython。

标签: python tkinter widget


【解决方案1】:

你做得对。我们可以使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-15
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多