我目前正在编写一个带有按钮字段的游戏,每个按钮都有一个唯一的变量名称。每个按钮都是课程的一部分" Space"有几个属性。每个按钮都有与之关联的相同命令:" move()"。当我单击一个按钮时,我希望代码使用" .getM()"来获取该特定按钮的属性。功能。我的移动代码如下,它不完整。如何将按钮名称分配给var。?
def move():
var = "???????"
mGridv = var.getM()
iGridv = var.getI()
playv = var.getPlay()
if playv != None:
message = "This play is invalid"
答案 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()