gpt4 book ai didi

python - Tkinter 神秘绑定(bind)问题

转载 作者:行者123 更新时间:2023-11-28 22:34:35 24 4
gpt4 key购买 nike

我有一个绑定(bind)组合键:

self.parent.bind_all('<Control-n>', self.next_marked)

它应该将我带到父级为框架的文本小部件中的下一个标签。

def next_marked(self, skip=False):
print (len(self.text.tag_ranges('definition')))
print('next_marked()')
self.text.focus_set()
print (self.text.index(INSERT))
next_tag = str(self.text.tag_nextrange('definition', 'insert+1c')[0])
print (self.text.index(INSERT))
spl = next_tag.split('.')
line = int(spl[0])
col = int(spl[1])
self.text.mark_set('insert', '%d.%d' % ( line, col ))

当我不使用热键时,它会执行此操作,但是当我使用热键时,它总是将光标的位置向下移动一行,然后执行该功能。这是我的操作系统在工作吗? (Windows 7)关于如何处理这个问题有什么建议吗?

我正在使用 Python 2.7 和 Tkinter 8.5

最佳答案

问题似乎是<Control-n>已经绑定(bind)到 Text 上的“转到下一行”类,如果有多个绑定(bind),they will all be executed, in a specific order :

Tkinter first calls the best binding on the instance level, then the best binding on the toplevel window level, then the best binding on the class level (which is often a standard binding), and finally the best available binding on the application level.

因此您可以或者覆盖 <Control-n> 的现有类级绑定(bind)对于所有 Text小部件:

self.parent.bind_class("Text", '<Control-n>', lambda e: None)

或者将你的函数绑定(bind)到实例(因此它被安排在类级绑定(bind)之前)并使其成为return "break"取消所有后续绑定(bind):

def next_marked(self, skip=False):
...
return "break"

self.text.bind('<Control-n>', self.next_marked)

另请注意,当用作 bind 的回调时, 第一个参数(在 self 之后),即 skip在你的情况下,永远是 Event .

关于python - Tkinter 神秘绑定(bind)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38860828/

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