我一直试图强制“插入”标记移动到文本字段的开头,而不管用户点击该字段的位置。虽然我找到this post,但它似乎不适用于我的代码。光标/插入只停留在我单击的索引处(Nb:函数的其余部分工作正常)。作为最后一个想法,我尝试了“return'break'”,以防运行一些“恢复”光标位置的其他功能,但这没有任何区别。我使用的是Python 3.4和Tkinter 8+。感谢你!
...
n = ttk.Notebook(p)
n1 = Text(n,width=60,height=15);
...
def EnterStatement(e):
i=n1.index('current').split('.')
n1.tag_remove('NewStatement', i[0]+'.0', i[0]+'.0 lineend')
n1.replace(i[0]+'.16', i[0]+'.46', ' '*30,'flex')
#the following doesn't work... why?!
n1.mark_set('insert', i[0]+'.16')
...
n1.tag_bind("NewStatement",'<1>', EnterStatement)
答案 0 :(得分:1)
我认为您应该将文字绑定到<ButtonRelease-1>
事件,而不是<1>
或<Button-1>
。在这个简单的测试示例中,绑定到<Button-1>
不会移动鼠标光标。但是,如果绑定到<ButtonRelease-1>
,则每次单击都会将鼠标光标移动到开头。
from tkinter import *
root = Tk()
text = Text(root)
text.insert(INSERT, "Some example text.\n Some second line of example text")
def onclick(event):
#print(event)
event.widget.mark_set(INSERT, '1.0')
text.bind('<ButtonRelease-1>', onclick)
#text.bind('<Button-1>', onclick)
text.pack()
root.mainloop()
我想原因是,在执行<Button-1>
绑定后,Tkinter将光标设置在点击位置,而绑定到<ButtonRelease-1>
则不然。希望这会有所帮助。
答案 1 :(得分:0)
问题是默认行为是将光标移动到发生点击的位置。您的绑定不会覆盖默认行为,因此您的代码会移动它,然后默认会再次移动它。如果搜索“绑定标记”和/或“bindtags”,可以找到更深入的解释。
为了防止发生默认行为,您必须从函数返回字符串"break"
,这会阻止事件被进一步处理:
def EnterStatement(e):
...
#the following doesn't work... why?!
n1.mark_set('insert', i[0]+'.16')
return "break"