【问题标题】:How to create multiple buttons with different actions in a for-loop in tkinter? [duplicate]如何在 tkinter 的 for 循环中创建具有不同操作的多个按钮? [复制]
【发布时间】:2020-12-28 20:00:19
【问题描述】:

我的问题与 tkinter 有关。我正在创建一个 GUI,其中有 31 个不同的按钮,每个按钮上都有不同的徽标。以下是我在主窗口中创建这些按钮的方法:

logos = ['ducks.png', 'bruins.png', 'sabres.png', 'flames.png', 'canes.png', 'hawks.png', 'avs.png',
         'jackets.png', 'stars.png', 'redwings.png', 'oilers.png', 'panthers.png', 'kings.png',
         'wild.png', 'habs.png', 'preds.png', 'devils.png', 'isles.png', 'rangers.png', 'sens.png',
         'flyers.png', 'yotes.png', 'pens.png', 'blues.png', 'sharks.png', 'bolts.png', 'leafs.png',
         'canucks.png', 'knights.png', 'caps.png', 'jets.png']

for logo in logos:
    load = Image.open(logo)
    render = ImageTk.PhotoImage(load)
    teamButton = Button(self, image=render)
    teamButton.image = render
    teamButton.place(x=x_axis, y=y_axis)
    x_axis += 80
    if x_axis >= 300:
        y_axis += 55
        x_axis = 0

我想做什么:

  • 当用户单击某个按钮(例如“鸭子”)时,程序会打印一个值,比如 3。
  • 然后,当用户单击另一个按钮(例如“Bruins”)时,程序会打印值 2。

我的问题是:

  1. 如何将 Ducks 按钮与值 3 绑定,将 Bruins 按钮与值绑定
  2. 这是创建此类按钮的最佳方式(for 循环)吗?如果不是,那是什么?

【问题讨论】:

    标签: python for-loop tkinter button bind


    【解决方案1】:

    使用functools.partial 即时创建函数。

    from functools import partial
    
    for value, logo in enumerate(logos):
        # not sure where this value is coming from ... so used enumerate for now
        load = Image.open(logo)
        render = ImageTk.PhotoImage(load)
        teamButton = Button(self, image=render)
        teamButton.image = render
        teamButton.config(command=partial(print, value))
        teamButton.place(x=x_axis, y=y_axis)
    

    【讨论】:

    • partial() 不生成函数,它使“部分”对象的行为类似于自动传递原始函数所需的部分或全部参数的函数。除了挑剔之外,您的答案是正确的(也是很好的建议)IMO。
    • 谢谢!这至少是一个开始......你看,我在我的问题中使用的值 2 和 3 实际上只是示例,我已经对这个结果感到非常满意。要解决我的真正问题:我需要绑定让我们说 Button #1从 xlsx 文件的 A1 列获取值。所以我想我想要做的是将这个按钮单击绑定为从excel文件中收集某些值的用户输入......
    • @JoonasJunttila 好的,所以创建一个函数来执行您想做的任何事情,并将其用作 command=partial(my_function, logo) 或您想要用作值的任何内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 2022-11-04
    相关资源
    最近更新 更多