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

问题描述 投票:1回答:2

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

python tkinter tk
2个回答
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()

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!

© www.soinside.com 2019 - 2024. All rights reserved.