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