Кнопка Python Связать две функции и отправить аргументы с привязкой

1

Я еще немного новичок в python, и я работаю над проектом, включая графический интерфейс. Я много использую с Tkinter и кнопками, и мне любопытно, есть ли способ запустить функцию с привязкой, потому что я хочу, чтобы одна вещь случалась, когда она нажимает и что-то еще, когда она отпущена.

        s = str(x+1) + ":" + str(y+1)
        img = ImageTk.PhotoImage(Image.open('button.png'))
        b = Tkinter.Button(field_hid, image=img, borderwidth=0, highlightthickness=0, background='grey')
        b.bind("<ButtonPress-1>", lambda s=s, button=b: location_down(event,s,button))
        b.bind("<ButtonRelease-1>", lambda s=s, button=b: location_up(event,s,button))
        b.img = img
        b.pack()
        b.grid(row=x, column=y)

Я не понимаю, как это сделать, поскольку единственное, что может быть передано функции, - это событие, но моя программа требует аргументов.

Теги:
button
tkinter
events
bind

1 ответ

1
Лучший ответ

Единственный способ использовать bind - это вызвать функцию. Когда вы используете lambda, вы просто создаете анонимную функцию. Вы можете легко сделать:

b.bind("<ButtonPress-1>", self.SomeOtherFunction)

lambda полезен, когда вы хотите передать дополнительные аргументы функции. В отличие от использования опции command, с привязками вы получаете объект события с большим количеством полезной информации, поэтому вам может не понадобиться передавать какую-либо дополнительную информацию.

Например, вы можете сделать это:

def OnPress(event):
    print "widget %s was pressed" % event.widget
def OnRelease(event):
    print "widget %s was released" % event.widget

b = Button(...)
b.bind("<ButtonPress-1>", OnPress)
b.bind("<ButtonRelease-1>", OnRelease)

Для хорошего введения в привязку смотрите События и привязки на сайте effbot.org.

  • 0
    Спасибо, лямбды были очень интересными

Ещё вопросы

Сообщество Overcoder
Наверх
Меню