我希望能够双击test,
在Tkinter文本小部件中,并让它选择test(并排除逗号)。在
以下是我尝试过的:
import Tkinter as tk
def selection_mod(event=None):
result = aText.selection_get().find(',')
if result > 0:
try:
aText.tag_add("sel", "sel.first", "sel.last-1c")
except tk.TclError:
pass
lord = tk.Tk()
aText = tk.Text(lord, font=("Georgia", "12"))
aText.grid()
aText.bind("<Double-Button-1>", selection_mod)
lord.mainloop()
第一个问题是<Double-Button-1>
似乎在做出选择之前触发处理程序,从而产生:
TclError: PRIMARY selection doesn't exist or form "STRING" not defined
第二个问题是,即使使用有效的绑定,
我的选择标签似乎没有任何作用。
它甚至不会引发错误,我尝试过不使用except tk.TclError:
。在
绑定发生在默认绑定发生之前。因此,当绑定激发时,选择还不存在。因为您的绑定尝试获取选择,所以失败,并出现您看到的错误。在
您需要安排绑定发生在类绑定之后。一种廉价的方法是,一旦默认绑定有机会工作,就使用
after
来执行代码。或者,可以使用bindtag
功能来确保绑定在默认绑定之后激发。在第二个问题是,在设置新选项之前,您没有清除旧的选择。您需要做
tag_remove
来首先删除现有的选择。如果标记已经被选中,那么它将保持不变。在但是,双击通常不会捕获逗号,所以我不太理解代码的要点。至少,当我在OSX上测试它时,它不包括逗号。在
感谢布莱恩的回答,我得出了以下结论:
值得注意的是,我使用的是Windows7,根据Bryan的说法,
当你双击一个单词时,OSX不包括逗号。在
相关问题 更多 >
编程相关推荐