我提议继续 disable tkinter keyboard shortcut 中的讨论: 我有一个 Tkinter 也使用的事件的事件处理程序,所以我的程序和 Tkinter 交互很糟糕。
由于这是一个我一直无法解决的问题,所以我在这里重新提出,我试图将其归结为以下代码中最简单的形式:
#!/usr/bin/env python
from Tkinter import *
import tkFont
def init():
global root,text
root = Tk()
root.geometry("500x500+0+0")
dFont=tkFont.Font(family="Arial", size=10)
text=Text(root, width=16, height=5, font=dFont)
text.pack(side=LEFT, fill=BOTH, expand = YES)
root.bind("<Control-b>", setbold)
text.tag_config("b",font=('Verdana', '10', 'bold' ))
text.tag_config("i",font=('Verdana', '10', 'italic' ))
def removeformat(event=None):
text.tag_remove('b',SEL_FIRST,SEL_LAST)
text.tag_remove('i',SEL_FIRST,SEL_LAST)
def setbold(event=None):
removeformat()
text.tag_add('b', SEL_FIRST,SEL_LAST)
text.edit_modified(True)
def main():
init()
mainloop()
if __name__ == '__main__':
main()
它应该做的只是生成一个文本窗口,您可以在其中写入。 选择一些文本并按 Ctrl+B 程序应该删除任何预先存在的标签,然后为其分配将文本设置为粗体的“b”标签。
相反发生的是第一个 tag_remove
的异常,它告诉我 text 不包含任何用“sel”标记的字符
。
使用 return 'break'
的建议是没有用的,因为在 setbold()
有任何机会行动之前选择就消失了...
最佳答案
在文本小部件上设置绑定(bind),而不是在根上。 (整个顶层绑定(bind)在小部件类绑定(bind)之后处理——其中标准 <Control-Key-b>
绑定(bind)是——并且那些在小部件实例绑定(bind)之后处理,这就是你想要的在这里使用。)你需要这样做'break'
;它会抑制后续绑定(bind)。 (如果您在此之后遇到任何问题,可能是默认焦点错误,但这很容易修复。)
唯一的另一种选择是重新配置绑定(bind)标签,以便在顶级绑定(bind)之后处理类绑定(bind),但这样做的后果非常微妙且影响深远;您应该改用我第一段中的更简单的方法,因为这是处理这些事情的正常方法。
关于python - 禁用 tkinter 键盘快捷键 (2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6813219/