【问题标题】:How to assign an Array element to a tkinter button via for each loop?如何通过每个循环将 Array 元素分配给 tkinter 按钮?
【发布时间】:2019-09-08 02:02:30
【问题描述】:

我正在构建一个基本的 GUI,我希望能够将数组中的每个项目分配给一个按钮。这些按钮是通过 foreach 循环创建的。

我试图让按钮在点击时显示其各自的字母。

最初,我认为只需向按钮添加“命令”属性即可创建所需的关联。这只会打印所有字母的列表。我不希望它打印每个字母,而只是打印我单击的按钮的任何字母

以下是我当前的代码。

    alphabet = ["A", "B", "C", "D" , "E" , "F" , "G" , "H" , "I" , "J" , "K" , "L" , "M" , "N", "O" , "P" , "Q" , "R" , "S" , "T" , "U" , "V" , "W" , "X" , "Y" , "Z", " ", " "]
    count = 0

    for r in range(7):
        for c in range(4):
            tk.Button(self.searchFrame, text=alphabet[count], height='4', width='8', bg='white', fg='deep sky blue',
            font=("Helvetica", 18),command=self.listitems(alphabet[count])).grid(row=r,column=c)
            count += 1

def listitems(self, letter):
    print(letter)

我希望每个按钮在点击时显示它们各自的字母。

这就是 GUI 的样子

【问题讨论】:

  • 使用lambda: self.listitems(alphabet[count]),因为你不能将这样的参数传递给函数。
  • 按钮对象的命令选项是可调用的(所以 Saad 的建议是正确的)。您在这里所拥有的会将命令设置为 listitems 的返回值,我猜它是 None。您将获得所有字母的列表,因为在创建每个按钮时都会调用命令 listitems。

标签: python button tkinter


【解决方案1】:

问题:为每个循环分配一个 Array 元素到 tkinter 按钮?

如果您想在单击时获得Button['text'],请使用.bind(<Button-1>... 而不是command=

import tkinter as tk

class App(tk.Tk):
    def __init__(self):
        super().__init__()

        for r in range(1, 8):
            for c in range(1, 5):
                btn = tk.Button(self, text=chr((r*4)+c+60),
                                height='1', width='1',
                                bg='white', fg='deep sky blue', font=("Helvetica", 18))
                btn.grid(row=r,column=c)
                btn.bind('<Button-1>', self.listitems)

    def listitems(self, event):
        print(event.widget['text'])

if __name__ == "__main__":
    App().mainloop()

用 Python 测试:3.5

【讨论】:

  • 非常感谢!这正是我所需要的!
猜你喜欢
  • 1970-01-01
  • 2022-08-03
  • 2016-06-09
  • 1970-01-01
  • 2021-11-11
  • 2020-04-05
  • 1970-01-01
  • 2016-11-30
  • 1970-01-01
相关资源
最近更新 更多