知道哪个按钮的Python函数(Tkinter)

时间:2016-02-15 20:19:27

标签: python button tkinter

我在一个窗口中放了9个按钮。每个按钮上都有一张图片,我想在点击按钮时更改图片。

我所看到的所有方法都太复杂了,我无法理解(lambda,self等),所以我想知道是否有一个简单的方法。

到目前为止,这是我的三个按钮:

tl=Button(root)
tm=Button(root)
tr=Button(root)

photo1=PhotoImage(file="/Users/apple/Desktop/images Tkinter/arrowhead.gif")
photo2=PhotoImage(file="/Users/apple/Desktop/images Tkinter/arrowhead_plus.gif")

tl.config(image=photo1,width="100",height="100",command=function)
tl.grid(row=1, column=1)

tm.config(image=photo1,width="100",height="100")
tm.grid(row=1, column=2)

tr.config(image=photo1,width="100",height="100")
tr.grid(row=1, column=3)

'功能'是?我不希望它成为:

def function():
   tl.config(image=photo2,width="100",height="100",command=function)
   tl.grid(row=1, column=1)

因为此功能仅适用于此按钮,我不想为每个按钮编写功能。

我希望我已经足够清楚了。提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用lambda关键字来执行此操作:

tl.config(image=photo2,width="100",height="100",command=lambda: function(1))

依此类推。
检查Tkinter Callbacks并搜索lambda

答案 1 :(得分:1)

lambda是你的答案:)

如果要为所有按钮设置常规功能,则必须将按钮实例传递给lambda回调 这是一个简单的例子,用颜色代替图像(测试并且有效):

from Tkinter import Tk, Button


def function(btn, color):
    btn.config(bg=color)

def main():

    root = Tk()
    root.geometry("250x150+300+300")
    tl = Button(root)
    tm = Button(root)

    tl.config(bg="red", command=lambda: function(tl, 'green'))
    tl.grid(row=1, column=1)

    tm.config(bg="red", command=lambda: function(tm, 'yellow'))
    tm.grid(row=1, column=2)

    root.mainloop()

if __name__ == '__main__':
    main()

单击第一个按钮时,其背景颜色将从红色变为绿色。第二个按钮将从红色变为黄色。

您可以将其应用于您的代码以更改图片。