首页 > 解决方案 > 使用 Tkinter Text 获取 tab 键以转到下一个字段(而不是缩进)

问题描述

我已经搜索并花了大约两个小时试图自己解决这个问题,但我的努力失败了。我的目标是在文本框中输入一条消息,按 Tab 转到电子邮件按钮,然后按 Enter 发送电子邮件。

现在,在 TEXT 字段中按 Tab 会创建文字处理器样式的缩进,而不是移动到下一个字段。

代码的相关部分是这样的:

from tkinter import *

#Build Window

def focus():
    b.focus_set()

window = Tk()
window.title("What's Your Message?")
window.configure(background="black")
Label (window, text="Type Your Message:\n", bg="Black", fg="white", font="none 25 bold").pack(anchor=N)

e = Text(window, width=75, height=10)
e.pack()
e.focus_set()
e.bind("<Tab>", lambda e: focus())

b = Button(window, text="Send Email", takefocus=True, font="none 15 bold", width=10, command=lambda: click())
b.bind("<Return>", lambda e: click())
b.bind("<Tab>", lambda e: focus())
b.pack()

你能告诉我如何让标签按钮不再缩进文本框中的文本,而是将焦点移到按钮上吗?现在, SHIFT + TAB 有效,但我想了解如何让 TAB 正常工作。

感谢您的时间和帮助!

标签: pythontexttkintertabs

解决方案


Shift-tab 用于反向遍历。

我认为以下页面对您有用:http: //infohost.nmt.edu/tcc/help/pubs/tkinter/web/focus.html

从这个页面,有一段可以帮助你,

总结一下:要设置小部件的焦点遍历顺序,请按该顺序创建它们。通过将其 takefocus 选项设置为 0 从遍历顺序中删除小部件,对于那些默认 takefocus 选项为 0 的小部件,如果要将它们添加到 order 中,请将其设置为 1。

*编辑:看起来像将焦点从一个文本小部件更改为另一个的副本

**Edit2:所以...从上面的stackoverflow帖子中获取,以下内容将完全按照您的要求进行:

def focus_next_widget(event):
    event.widget.tk_focusNext().focus()
    return("break")

window = Tk()
window.title("What's Your Message?")
window.configure(background="black")
Label (window, text="Type Your Message:\n", bg="Black", fg="white", font="none 25 bold").pack(anchor=N)

e = Text(window, width=75, height=10)
e.bind("<Tab>", focus_next_widget)

推荐阅读