Кнопка Python Связать две функции и отправить аргументы с привязкой - PullRequest
1 голос
/ 09 июня 2011

Я все еще новичок в 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)

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

1 Ответ

1 голос
/ 09 июня 2011

Единственный способ использовать связывание - вызывать функцию.Когда вы используете 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...