【问题标题】:How can I create buttons for every item in a list using a for loop?如何使用 for 循环为列表中的每个项目创建按钮?
【发布时间】:2021-05-12 14:46:44
【问题描述】:

我正在开发一个关于室内植物的 python 应用程序,我正在使用 tkinter。我有一个使用 sqlite 从数据库调用的具有特定属性的植物列表(在这种情况下,它是植物“叶子”的类型)。我想使用 for 循环为列表中的每个项目创建一个按钮,并将每个按钮放在不同的行上,并使每个按钮的文本成为不同的项目。我想使用 for 循环,以便在将植物添加到数据库(以及列表)时,我不必每次都更改我的代码。

foliage_list = []
c.execute("SELECT name FROM plants WHERE type_of_plant = 'foliage'")
foliage_result = c.fetchall()
foliage_list.append(foliage_result)
foliage_num = len(foliage_list)

for item in foliage_list:
    for i in range(foliage_num):
        tk.Button(self, text=item)
        tk.Button[i].grid(row=i+1, column=0, padx=30, pady=30)

在这里,我创建了列表,然后尝试使用 for 循环为列表中的每个项目创建一个按钮。我知道这是错误的(它不起作用),但我不知道如何使它起作用。我该怎么做?

编辑: 我已将代码更改为:

for item in foliage_list:
    for i in range(foliage_num):
        tk.Button(self, text=item).grid(row=i+1, column=0, padx=30, pady=30)

我现在似乎为每行列表中的每个项目创建了一个按钮,用于显示有多少行。我认为这与使用嵌套的 for 循环有关。

【问题讨论】:

  • “不起作用”是什么意思?另外,这是否回答了您的问题:stackoverflow.com/q/17677649/7432
  • 我刚刚发现:stackoverflow.com/questions/21738149/… 回答了我的大部分问题,但我想使用 .grid 而不是 .pack
  • 我也收到此错误:“TypeError: 'type' object is not subscriptable” 这就是我所说的不起作用。
  • 我不知道怎么做,所以每个按钮都在不同的行
  • 该错误是因为tk.Button 是一种类型(类),而您正在尝试执行tk.Button[i]。这有点像int[i]str[i]

标签: python python-3.x sqlite tkinter


【解决方案1】:

这是错误的:

tk.Button(self, text=item)
tk.Button[i].grid(row=i+1, column=0, padx=30, pady=30)

用途:

tk.Button(self, text=item).grid(row=i+1, column=0, padx=30, pady=30)

【讨论】:

  • 谢谢,这解决了一个问题,尽管似乎出现了另一个问题!
  • 可能这就是你想要的:for i, item in enumerate(foliage_list): tk.Button...,不要使用两个 for 循环,一个 enumerate 就足够了。
猜你喜欢
  • 2021-07-16
  • 2021-10-10
  • 1970-01-01
  • 2017-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
  • 2019-09-29
相关资源
最近更新 更多