tkinter:将 Return 键绑定到确定按钮——但不绑定到文本小部件

tkinter: bind Return key to the OK button -- but not to the Text widget

使用 tkinter/ttk (8.5+),在自定义对话框中,我想将 Return 键绑定到 OK 按钮。 所以我使用标准指令:

self.window.bind("<Return>", self.on_ok)

问题是,在此自定义对话框中还有一个(多行)Text 小部件。一旦 Return 键绑定到 OK 按钮,就无法在不终止对话框的情况下在 Text 小部件中键入 Enter!输入 Return 现在等同于按 OK.

我在 Firefox 中检查过,当 Text 控件获得焦点时,按 Return 不会触发确定按钮。它只是输入一个换行符。 如果 OK 按钮有焦点,则按 Return 激活按钮。

有没有办法在 tkinter 中重现这种行为?意思是,仅当未选择 Text 小部件时才会触发 OK 按钮的绑定?

你有几个选择。

  1. self.on_ok 函数选择不同的绑定,例如 '<Shift-Return>'.
  2. 让函数检查哪个小部件具有焦点。如果 self.window 是你的根 tkinter 对象:

def on_ok(event):
    if self.window.focus_get() == text:
        print('the text widget has focus')
    else:
        print('some other widget has focus')