如何禁止终端用户编辑/添加/删除Text小部件中的文本?(Python v3.2...和tkinter)
重点是仅禁止更改/添加/删除文本的功能,而不是砍掉其他功能。也许一个名为NoEdit Text小部件会更好。
我尝试了.text['state'] = 'disabled',在Windows上它基本正常工作(它仍允许用户选择/复制文本,并突出显示选择区域,page up/down和up/down按钮也能工作。唯一出现问题的似乎是将光标隐藏)。但是在MacIntosh上所有功能都无法使用。没有高亮,没有选择/复制,太糟糕了!
由于Tkinter在Python中几乎没有文档,我搜索并找到了一些TCL建议,可以派生一个新类并取消插入和删除函数。
因此,我尝试了这样做:
很不幸,它并没有正常工作。显然,当最终用户输入/删除代码时,tkinter不使用那些插入和删除函数。也许那些TCL插入/删除是其他东西,我在从TCL和斯瓦希里语的翻译中失去了一些东西。
重点是仅禁止更改/添加/删除文本的功能,而不是砍掉其他功能。也许一个名为NoEdit Text小部件会更好。
我尝试了.text['state'] = 'disabled',在Windows上它基本正常工作(它仍允许用户选择/复制文本,并突出显示选择区域,page up/down和up/down按钮也能工作。唯一出现问题的似乎是将光标隐藏)。但是在MacIntosh上所有功能都无法使用。没有高亮,没有选择/复制,太糟糕了!
由于Tkinter在Python中几乎没有文档,我搜索并找到了一些TCL建议,可以派生一个新类并取消插入和删除函数。
因此,我尝试了这样做:
class roText(tk.Text):
def insert(self,*args,**kwargs):
print(" Hey - Im inside roText.insert")
pass
def delete(self,*args,**twargs):
pass
def pInsert(self,*args,**twargs):
super().insert(*args,**twargs)
很不幸,它并没有正常工作。显然,当最终用户输入/删除代码时,tkinter不使用那些插入和删除函数。也许那些TCL插入/删除是其他东西,我在从TCL和斯瓦希里语的翻译中失去了一些东西。
tkinter.Text
使用什么函数来编辑文本?希望它们不是内部函数...
那么,有没有一种方法可以修改Text小部件以仅抑制最终用户编辑?有没有一种方法可以在不深入并覆盖Tkinter内部代码的情况下完成,以便该内容不会被下一个Tkinter版本破坏?
看着Idle shell窗口,我发现他们设法抑制了编辑(除了最后一行)。所以有办法。但代价是什么?
self.txtBox.bind('<Key>', lambda _: 'break')
- travc