我对bind()
方法和command
参数有一个简单的问题。
通常,在程序中,您可以单击与执行某些操作相关的按钮,或者只需按返回键。
在下面的代码中,我尝试做同样的事情,它确实有效。
我只是问自己,行bttn.bind('<Button-1>', search)
是否有点奇怪,因为它将按钮内的鼠标点击与功能相关联,而不是按下按钮本身。
一开始,我不想包括按返回键来执行条目,我写了bttn = Button(wd, text='Search', bg='Light Green', command=search)
,但此时search
函数不是事件驱动的功能并且没有事件参数。
一旦我想要包含返回键以执行相同的工作,我(当然)用(event)
编写函数,因此使用bind()
方法进行鼠标操作按钮也是。
这是“最佳方式”吗?或者有更惯用的方式吗?
Python3 /视窗
from tkinter import *
def search(event):
try:
txtFile = open(str(entr.get()), 'r')
except:
entr.delete(0, END)
entr.insert(0, "File can't be found")
else:
x = 0
while 1:
rd = txtFile.readline()
if len(rd)> x:
longest = rd
x = len(rd)
elif rd == '':
break
txtFile.close()
entr.delete(0, END)
entr.insert(0, longest)
#####MAIN#####
wd = Tk()
wd.title('Longest sentence searcher')
entr = Entry(wd, bg='White')
entr.grid(row=0, column=0)
entr.bind('<Return>', search)
bttn = Button(wd, text='Search', bg='Light Green')
bttn.grid(row=1, column =0)
bttn.bind('<Button-1>', search)
wd.mainloop()
答案 0 :(得分:1)
在按钮和绑定之间共享函数的常规方法是使事件参数可选,并且不依赖于它。你可以这样做:
def search(event=None):
...
bttn = Button(..., command=search)
...
entr.bind('<Return>', search)
如果省略command
并依赖绑定事件,则会丢失Tkinter提供的内置键盘可访问性(您可以选择按钮并按空格键以单击它)。