1

我有一个关于bind()方法和command论点的简单问题。通常,在程序中,您可以单击与您正在执行的操作相关的按钮来执行某些操作,或者只需按返回键。在下面的代码中,我尝试做同样的事情并且它确实有效。我只是问自己这条线bttn.bind('<Button-1>', search)是否有点奇怪,因为它将按钮内的鼠标单击与功能相关联,而不是按下按钮本身。

一开始,我不想包括按回车键来执行条目,并且我已经编写了bttn = Button(wd, text='Search', bg='Light Green', command=search),但那时该search函数不是事件驱动函数并且没有事件参数。

一旦我想包括按返回键来完成相同的工作,我(当然)必须用 编写函数(event),因此也使用bind()鼠标按钮的方法。

这是做到这一点的“最佳方式”吗?还是有更惯用的方法?

Python3/Windows

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()
4

1 回答 1

1

在按钮和绑定之间共享功能的正常方法是使事件参数可选,并且不依赖它。你可以这样做:

def search(event=None):
    ...

bttn = Button(..., command=search)
...
entr.bind('<Return>', search)

如果您省略commandand 依赖绑定事件,您将失去 Tkinter 提供的内置键盘可访问性(您可以按 Tab 键并按空格键单击它)。

于 2013-09-10T21:05:04.650 回答