如何使用TkInter创建只读文本窗口小部件,并且仍然能够以编程方式修改窗口小部件的内容?

时间:2017-01-23 04:59:51

标签: python tkinter widget

我想使用Tk的text widget来显示我程序的部分状态。 (标签小部件不会这样做,因为文本小部件的标记功能将节省大量工作。画布小部件不会这样做,因为我不想手动布置大量文本。)

我不希望用户能够直接修改文本小部件的内容。他们可以通过其他方式与程序进行交互来更改程序的状态,但文本小部件仅供显示。

如果我将文本小部件的状态设置为禁用,那么不仅用户无法与之交互,而且我也无法以编程方式修改其内容(具体来说,我无法插入文本)。

明显的解决方法是使用启用和禁用窗口小部件的代码来装饰任何更新文本窗口小部件内容的代码。但这很糟糕:我应该能够修改内容,而不会让用户有机会干涉,无论多么简短的机会。

有办法做到这一点吗?

2 个答案:

答案 0 :(得分:0)

" kludgy变通方法"根本不是kludgy - 这正是你如何做到的,以及它是如何设计的。

然而,还有另一种解决方案。您可以从窗口小部件中删除所有内置的键和鼠标绑定,然后仅重新实现您关注的那些(例如,您可能希望用户突出显示并复制文本块)。这很简单有效,但如果你想恢复一些绑定,重新实现你关心的绑定(剪切,复制,粘贴,向上翻页,向下翻页,移动光标等)都会变得非常繁琐。 。

要删除所有默认绑定,可以删除类绑定标记,如下所示:

t.bindtags((t, root, "all"))

有关绑定标记的更多信息,请参阅以下答案:

答案 1 :(得分:0)

你可以不断删除,然后像这样插入文字:

import tkinter
root = tkinter.Tk()

text = tkinter.Text(root, width=40)
text.grid(row=0, column=0, stciky=tkinter.W)

while True:
    text.delete(0.0, tkinter.END)
    text.insert(tkinter.END, your_text)

其中your_text是您要插入的文字