从一个文本控件切换焦点到另一个
我刚开始学习Python,想用Tkinter做一个简单的图形界面。
在很多用户界面中,按下Tab键可以让光标从一个文本框跳到另一个文本框。但是在我的文本框里,按Tab键只会让光标缩进。
有没有人知道这个可以设置吗?
3 个回答
-5
在PyQt4中,这个操作非常简单。只需要使用下面这一行代码,你就可以通过按下Tab键来切换焦点:
self.textEdit.setTabChangesFocus(True)
30
用Tkinter来实现这个功能非常简单。
要让它正常工作,有几个步骤需要注意。首先,你得确保默认的行为不会发生。也就是说,你不想让按下Tab键既插入一个制表符又把焦点移动到下一个控件。默认情况下,事件会先被特定的控件处理,然后才会执行默认行为(通常是在类绑定中)。Tk有一个简单的内置机制,可以阻止事件继续处理。
其次,你需要确保把焦点发送到合适的控件。Tkinter内置了支持,可以帮助你确定下一个控件是什么。
举个例子:
def focus_next_window(event):
event.widget.tk_focusNext().focus()
return("break")
text_widget=Text(...)
text_widget.bind("<Tab>", focus_next_window)
关于这段代码的重要点:
tk_focusNext()
这个方法会返回键盘遍历顺序中的下一个控件。focus()
这个方法会把焦点设置到那个控件上。- 返回
"break"
是非常关键的,因为它可以阻止类绑定被触发。正是这个类绑定会插入制表符,而你并不想要这个。
如果你想让所有文本控件都有这种行为,可以使用bind_class()
方法,而不是bind()
,这样就能让这个绑定影响到所有文本控件。
你也可以让绑定把焦点发送到一个特定的控件,但我建议还是遵循默认的遍历顺序,然后确保这个顺序是正确的。