我尝试在python中使用tkinter构建代码编辑器。我正在使用文本小部件。现在我坚持双击代码选择。当我有这一行时:if (variable<0) return 0;
我双击variable
他将所有字符从空格标记为空格(variable<0)
。
所以我在tkinter lib上搜索了doublelick函数,发现了这个:
bind Text <Double-1> {
set tk::Priv(selectMode) word
tk::TextSelectTo %W %x %y
catch {%W mark set insert sel.first}
}
现在我卡住了。有人可以帮我编辑吗?也许它与word
有什么关系?
答案 0 :(得分:1)
Tkinter是一个tcl解释器的包装器,它加载了tk库。 Tcl使用一些全局变量来定义它认为是“单词”的内容,并在其实现中的各个位置使用这些变量。最明显的是,它们用于处理文本和条目小部件的鼠标和键绑定。
在Windows上,“单词”被定义为空格以外的任何内容,默认情况下双击选择“单词”。因此,双击variable<0
选择空格之间的所有内容。在其他平台上,“单词”被定义为大写和小写字母,数字和仅下划线。
要让tkinter将单词视为仅由字母,数字和下划线组成,您可以将这些全局变量重新定义为与这些字符(或您想要的任何其他字符)匹配的正则表达式。
在下面的示例中,它应该强制将单词定义为所有平台的字母,数字和下划线:
import tkinter as tk
def set_word_boundaries(root):
# this first statement triggers tcl to autoload the library
# that defines the variables we want to override.
root.tk.call('tcl_wordBreakAfter', '', 0)
# this defines what tcl considers to be a "word". For more
# information see http://www.tcl.tk/man/tcl8.5/TclCmd/library.htm#M19
root.tk.call('set', 'tcl_wordchars', '[a-zA-Z0-9_]')
root.tk.call('set', 'tcl_nonwordchars', '[^a-zA-Z0-9_]')
root = tk.Tk()
set_word_boundaries(root)
text = tk.Text(root)
text.pack(fill="both", expand=True)
text.insert("end", "if (variable<0): return 0;\n")
root.mainloop()