2013-06-09 6 views
2

У меня есть скелет программы, которую я хочу использовать:Нажмите Enter Вместо нажатия кнопки

from tkinter import * 
import urllib 
import urllib.request 
import xml.etree.ElementTree as ET 
root = Tk() 

def program(): 
    print('Hello') 

tex=Text(root) 
tex.pack(side='right') 
inputfield = Entry(root) 
inputfield.pack(side='bottom') 
text = inputfield.get() 
but = Button(root,text="Enter", command = program) 
but.pack(side='bottom') 

root.mainloop() 

Хорошо так резюмируя, программа просто кадр с текстовым полем, полями ввода и кнопками, говорит Enter. Я хочу, чтобы программа вызывала кнопку, фактически не нажимая кнопку. Я хочу ввести текст в поле ввода и нажать Введите на клавиатуре, чтобы вызвать функцию.

Возможно ли это через tkinter?

ответ

5

Да, это возможно. Вам нужно только связать виджет ввода с событием <Return>:

inputfield.bind('<Return>', lambda _: program()) 

Поскольку функция обратного вызова используется в bind принимает один аргумент (а Tkinter событие), вы не можете использовать ссылку на program непосредственно. Поэтому вместо изменения определения функции вы можете использовать лямбда и назвать первый аргумент как _, common name for "don't care" variables.

+0

Это замечательно, спасибо! – user1985351

+0

Если вы собираетесь использовать какой-то «волшебный» синтаксис (подчеркивание как аргумент лямбда), ваш ответ был бы намного полезнее, если бы вы объяснили, почему это было (или не было) необходимо. Вы не хотите, чтобы начинающий просто слепо начал использовать это соглашение, не зная, что он делает. –

+0

@BryanOakley Так в чем же разница между подчеркиванием и использованием "lambda: funcName()"? – Jona