Python Tkinter文本小部件中的Elided或“Hidden”文本

时间:2017-12-19 02:50:16

标签: python tkinter tk

根据http://www.tkdocs.com/tutorial/text.html#more,在Tk / Tcl中,可以在“文本”窗口小部件中嵌入“删除”文本,即未显示的文本。这听起来很有用。这个功能在Python中可用吗?如果是这样,API是什么?

2 个答案:

答案 0 :(得分:3)

下面的示例使用Text生成tags小部件,其中已删除了文本:

import tkinter as tk

root = tk.Tk()

text = tk.Text(root)
text.pack()

text.tag_config('mytag', elide=True)
text.insert('end', "This text is non-elided.")
text.tag_add('mytag', '1.13', '1.17')

def toggle_elision():
    # cget returns string "1" or "0"
    if int(text.tag_cget('mytag', 'elide')):
        text.tag_config('mytag', elide=False)

    else:
        text.tag_config('mytag', elide=True)


tk.Button(root, text="Toggle", command=toggle_elision).pack()

root.mainloop()

答案 1 :(得分:2)

Furas非常正确......解决方案就像传递给elide=True方法的tag_config()关键字arg一样简单。奇怪的是,elide关键字未记录在我能找到的任何Tkinter文档中。但是,最简单的方案是按如下方式创建标记配置:

textWidget.tag_config('hidden', elide=True) # or elide=1

这将导致标记文本在文本小部件中“不可见”或“隐藏”。您将无法在“文本”小部件中看到该文本,但它仍然存在。如果您拨打textWidget.get('1.0', 'end - 1c'),则会在方法返回的文本中看到隐藏的字符。您还可以从textWidget中删除隐藏的字符,而无需查看它们。当您删除已删除的字符时,您将看不到INSERT光标移动。这有点奇怪......

请注意,标记文本可以跨越多行,因此所有行都会在“文本”小部件中折叠。在测试时我想到的第一件事就是,如果我实现了一个源代码编辑器并且希望添加“折叠”部分代码的功能(例如,在if块中),则删除的文本将会是我希望用来做的功能。

谢谢,Furas!