gpt4 book ai didi

tkinter - 将按钮绑定(bind)到 Alt 按键?

转载 作者:行者123 更新时间:2023-12-02 17:09:15 25 4
gpt4 key购买 nike

我编写了一个简单的 Tkinter 应用程序,表单底部有几个按钮。我的目标是遵循标准约定,即在按钮上的字母下划线,并使用 Alt 键绑定(bind)该字母的操作(即:Alt-s 表示“_S_ave”)。

我尝试过将根窗口绑定(bind)到“Alt-s”、“Alt-KeyPress-s”和“Mod1-s”,但似乎没有一个能可靠地工作。它们有时会触发,但即使我的事件函数上有“返回中断”,“s”字母也会传播到条目小部件。

我认为这是 Linux/X11 和 Mod1 与 Alt 处理的问题,因为 Control 键绑定(bind)工作一致。我无法找到解决该问题的任何最佳实践,因此我在此提出上诉。

有人可以分享如何在 Linux/X11 中使用 Alt 键绑定(bind)吗?

** 使用示例进行了更新

from Tkinter import *

class GUI:
def __init__(self,root):
self.root = root
e = Entry(self.root)
e.grid(column=0,row=0)
b = Button(self.root, text="Save", underline = 0)
b.grid(column=0,row=1)
root.bind("<Alt-s>",self.save)
e.focus()

def save(self,event=None):
print("Hey, you pressed Alt-s!")
return "break"

root = Tk()
App = GUI(root)
print("At this point, pressing Alt-s places the s string in the entry widget, and doesn't trigger")
root.mainloop()

** 更新 2

一些评论者告诉我这可以在他们的系统上运行,甚至是 Linux。也许我的平铺 wm 或 X11 的其他配置有问题,但是我在任何其他 X11 GUI 应用程序中使用 Alt 都没有问题。

我愿意接受有关如何解决此问题的建议。

** 更新 3

我一直在检查 xmodmap 的行为,当我分配 Alt_R 时,Tk 键绑定(bind)似乎停止工作。 xev 报告的事件逐字匹配,但 Tk 的行为发生了变化。仍在挖掘。

** 更新 4

先生。 Lange 在 Tkinter 列表上找到了一个有助于解释类似行为的链接,地址为 https://bbs.archlinux.org/viewtopic.php?id=58145 .

我已经对 xmodmap 进行了更改,现在 Alt 按预期工作。我无法解释为什么将 Alt_R 绑定(bind)到 mod4 会影响 Alt_L,或者为什么它只会影响 Tk 应用程序。

谢谢。

最佳答案

我不确定这在 Linux 上是否会有所不同,但我想我会尝试一下这个答案,因为已经好几天没有回复了。

我不确定这是否是您正在使用的语法,但不要使用 return break 尝试 return ("break")

至于替代问题,也许可以尝试以下方法:

from Tkinter import *

class GUI:
def __init__(self,root):
self.alt = False
e = Entry(root)
e.pack()
e.focus()
root.bind("<Alt_L>",self.AltOn)
root.bind("<KeyRelease-Alt_L>",self.AltOff)
root.bind("<s>",self._s)

def AltOn(self,event): self.alt=True
def AltOff(self,event): self.alt=False
def _s(self,event):
if self.alt:
#whatever you want to do with alt+s
print "ALT S"
return ("break")

root = Tk()
App = GUI(root)
root.mainloop()

编辑:绑定(bind)的描述是:

    FUNC will be called if the event sequence occurs with an
instance of Event as argument. If the return value of FUNC is
"break" no further bound function is invoked.

所以我真的不确定为什么休息对你不起作用..抱歉我无法提供更多帮助。

关于tkinter - 将按钮绑定(bind)到 Alt 按键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9096341/

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