将tkinter文本小部件配置为代码编辑器。在doubleclick上选择单词

时间:2017-05-11 20:38:11

标签: python text tkinter widget

我尝试在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有什么关系?

1 个答案:

答案 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()