如何在tkinter中的forloop中创建具有不同操作的多个按钮?

2024-06-16 10:30:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题与特金特有关。我正在创建一个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

我想做的是:

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

我的问题是:

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

Tags: 用户image程序forpngloadbuttonrender
1条回答
网友
1楼 · 发布于 2024-06-16 10:30:46

使用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)

相关问题 更多 >