gpt4 book ai didi

python - Tkinter 如何绑定(bind)到 shift+tab

转载 作者:行者123 更新时间:2023-12-03 17:04:29 47 4
gpt4 key购买 nike

我正在尝试绑定(bind) SHIFT+TAB 键,但我似乎无法让它工作。我绑定(bind)的小部件是 Entry小部件。

我试过用 widget.bind('<Shift_Tab>', func) 绑定(bind)键。 ,但我收到一条错误消息:

File "/usr/lib64/python3.8/tkinter/init.py", line 1337, in _bind self.tk.call(what + (sequence, cmd)) _tkinter.TclError: bad event type or keysym "Shift_Tab"



更新

我仍然在检测 SHIFT+TAB 时遇到问题。这是我的测试代码。 我的操作系统是 Linux。 tab 键有效,但不是 SHIFT+TAB。似乎是一个简单的问题要解决,所以我一定是做错了?

我正在尝试在 Treeview 中的列之间切换。我在一行上覆盖了小部件以模拟内联编辑。一行中只能有一个事件小部件。我跟踪我所在的列,当用户按下 SHIFT+TAB 或 TAB 时,我删除当前小部件并在相应列中显示一个新小部件。

这是 link到完整的项目:

该项目在一个文件中,没有导入。

下面的代码是我的尝试,它不起作用。
import tkinter as tk
import tkinter.ttk as ttk


class App(tk.Tk):
def __init__(self):
super().__init__()
self.rowconfigure(0, weight=1)
self.columnconfigure(0, weight=1)
self.title('Default Demo')
self.geometry('420x200')

wdg = ttk.Entry(self)
wdg.grid()

def tab(_):
print('Tab pressed.')

def shift_tab(_):
print('Shift tab pressed.')

wdg.bind('<Tab>', tab)
wdg.bind('<Control-ISO_Left_Tab>', shift_tab)


def main():
app = App()
app.mainloop()


if __name__ == '__main__':
main()

最佳答案

不是直接的答案,评论太长了。
你可以通过一个简单的技巧自己解决你的问题,绑定(bind)<Key>到一个函数,并打印传递给 bind 的关键事件参数功能,您可以在其中查看按下或未按下哪个键。尝试多种组合键,看看 state 是什么他们的keysym 是什么?或 keycode .

import tkinter as tk

def key_press(evt):
print(evt)

root = tk.Tk()
root.bind("<Key>", key_press)
root.mainloop()
它将在 macOS 上按 SHIFT + TAB 组合输出以下内容。
<KeyPress event state=Shift keysym=Tab keycode=3145753 char='\x19' x=-5 y=-50>
在哪里,
  • state=Shift 表示键事件的状态为 SHIFT。
  • keysym=Tab 表示 Tab 键被按下。如果我们只按 SHIFT,keysym将是 Shift_L 或 Shift_R(在 mac 上显示两个 shift 键的 Shift_L)。
  • keycode 是每个键的唯一代码,即使对于不同的组合键也是如此,例如左移键代码是 131330 TAB 的键码是 3145737但是当按下 SHIFT + TAB 时,代码与两者都不相同,它是 3145753 . (我不确定这些代码是否适用于每个操作系统,但可以通过将它们打印到控制台来弄清楚)
  • 另外,查看所有 event attributes.

  • 虽然绑定(bind) '<Shift-Tab>'组合键在 Mac 上效果很好,也可以这样使用...
    def key_press(evt):
    if evt.keycode==3145753:
    print('Shift+Tab is pressed')

    关于python - Tkinter 如何绑定(bind)到 shift+tab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62335424/

    47 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com