如何获取我刚刚点击的按钮的变量名称,tkinter

时间:2015-09-15 08:17:12

标签: python-3.x button tkinter

我目前正在编写一个带有按钮字段的游戏,每个按钮都有一个唯一的变量名称。每个按钮都是课程的一部分" Space"有几个属性。每个按钮都有与之关联的相同命令:" move()"。当我单击一个按钮时,我希望代码使用" .getM()"来获取该特定按钮的属性。功能。我的移动代码如下,它不完整。如何将按钮名称分配给var。?

def move():
    var = "???????"
    mGridv = var.getM()
    iGridv = var.getI()
    playv = var.getPlay()

    if playv != None:
        message = "This play is invalid"

2 个答案:

答案 0 :(得分:1)

假设您以常规方式创建按钮,可以使用lambda传递参数。 lambda允许您使用参数创建一个匿名函数,然后您可以使用它来调用您的函数。

如果要传递实际的按钮引用,则需要分两步完成,因为按钮对象在创建之前不会存在。

for i in range(10):
    button = tk.Button(...)
    button.configure(command=lambda b=button: move(b))

您的move功能需要如下所示:

def move(var):
    mGridv = var.getM()
    iGridv = var.getI()
    ...

您不必传递按钮实例,也可以传递该按钮的属性。

答案 1 :(得分:0)

你可以Bind the button event to the function

from Tkinter import *

def move(event):
    """will print button property _name"""
    w = event.widget                      # here we recover your Button object
    print w._name

root = Tk()

but_strings = ['But1', 'But2', 'But3']    # As many as buttons you want to create
buttons = []                              # let's create buttons automatically
for label in but_strings:                 # and store them in the list 'buttons'
    button_n = Button(root, text=label)
    button_n.pack()
    button_n.bind('<Button-1>', move)     # here we bind the button press event with
                                          #  the function 'move()' for each widget
    buttons.append(button_n)

root.mainloop()