我有一个绑定键组合:
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
答案 0 :(得分:4)
问题似乎是<Control-n>
已绑定到Text
类的“转到下一行”,如果有多个绑定,they will all be executed, in a specific order:
Tkinter首先调用实例级别的最佳绑定,然后是顶级窗口级别的最佳绑定,然后是类级别的最佳绑定(通常是标准绑定),最后是应用程序上最佳的可用绑定水平。
所以你可以 覆盖所有<Control-n>
小部件的Text
的现有类级绑定:
self.parent.bind_class("Text", '<Control-n>', lambda e: None)
或者将您的函数绑定到实例(因此它在类级别绑定之前进行调度)并使其return "break"
取消所有后续绑定:
def next_marked(self, skip=False):
...
return "break"
self.text.bind('<Control-n>', self.next_marked)
另请注意,当用作bind
的回调时,第一个参数(在self
之后),即您的skip
,将始终为Event