【问题标题】:Press Enter Instead of Clicking Button按 Enter 而不是单击按钮
【发布时间】:2013-06-09 18:19:56
【问题描述】:

我有一个我想使用的程序框架:

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 的按钮的框架。我想在不实际按下按钮的情况下调用按钮调用的程序。我想在输入字段中输入文本,然后按键盘上的 Enter 来调用该函数。

这可以通过 tkinter 实现吗?

【问题讨论】:

    标签: python python-3.x tkinter


    【解决方案1】:

    是的,这是可能的。您只需要将 Entry 小部件与事件 <Return> 绑定:

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

    由于bind 中使用的回调函数接收一个参数(Tkinter 事件),因此您不能直接使用对program 的引用。因此,您可以使用 lambda 并将第一个参数命名为 _、common name for "don't care" variables,而不是更改函数的定义。

    【讨论】:

    • 如果你打算使用一些“神奇”的语法(下划线作为 lambda 的参数),如果你解释了为什么这是(或不是)必要的,你的答案会更有用.您不希望初学者只是盲目地开始使用此约定而不知道它的作用。
    • @BryanOakley 那么下划线和使用 "lambda: funcName()" 有什么区别?
    • @Jona:lambda 需要一个参数,所以lambda: funcName() 会抛出一个错误。我的观点是,使用非常规的参数名称 _ 不如更常见的名称 event 清晰。
    • 啊哈,简单明了的解释。谢谢@BryanOakley
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 2015-11-12
    相关资源
    最近更新 更多