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

2024-09-30 10:38:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试用python中的tkinter构建一个代码编辑器。我正在使用文本小部件。现在我坚持双击时的代码选择。当我有这行代码:if (variable<0) return 0;并双击variable他将所有字符从一个空间标记到另一个空间,就像这样(variable<0)。在

所以我在tkinter库中搜索了doublick函数,发现了:

bind Text <Double-1> {
    set tk::Priv(selectMode) word
    tk::TextSelectTo %W %x %y
    catch {%W mark set insert sel.first}
}

现在我卡住了。有人能帮我编辑一下吗?也许它和word有关?在


Tags: 代码标记文本returnif部件tkinter空间
1条回答
网友
1楼 · 发布于 2024-09-30 10:38:11

Tkinter是tcl解释器的包装器,它加载tk库。Tcl使用一些全局变量来定义它认为是“单词”的内容,并在其实现的各个地方使用这些变量。最明显的是,它们用于处理文本和条目小部件的鼠标和键绑定。在

默认情况下,除了“在窗口上双击”外,其他单词都会被选中。因此,双击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()

相关问题 更多 >

    热门问题