python text控件 只读_python3-tkinter中的只读文本小部件;跨平台

这篇博客探讨了在Python Tkinter中如何使text控件变为只读,并解释了为何设置为disabled状态后仍能选择和复制文本。作者提供了一个示例代码,通过绑定事件来实现只读功能,允许用户选择和复制文本,但不允许编辑。
摘要由CSDN通过智能技术生成

disabled 状态没有出现的原因 . 如果将状态设置为 disabled 但是然后将绑定分配给 以将焦点显式设置为禁用的文本小部件,则可以选择并复制文本并突出显示 .

至于光标消失......可以说,这就是应该发生的事情 . 光标告诉用户“这是插入文本的位置” . 由于不会插入任何文本,因此具有该视觉线索会使用户感到困惑 . 如果真的很重要的话,你可以做的是在他们点击的任何地方插入一个小图像来模拟光标 .

要回答有关窗口小部件是否实际使用 insert 和 delete 方法的问题:实际基础窗口小部件上的方法是默认绑定使用的方法,因此在子类中覆盖它们无效 . 您需要重做所有默认绑定才能工作 . 这是可行的,但很多工作 .

不幸的是,这是Tcl编程真正发光的一个领域,因为您可以简单地禁用小部件的 insert 和 delete 命令 . 当然,你也可以直接在Tkinter中做到这一点,因为最终它运行tcl代码来完成所有事情,但这将涉及编写一些tcl代码,从Python编码器的角度来看这不是一个非常好的解决方案 .

我认为最好的解决方案是使用禁用状态,然后添加足够的绑定来做你想要的 .

这是一个简单的示例,通过明确设置焦点鼠标按钮单击 . 使用此代码,我可以单击并滑动以选择区域,或者双击或三击以选择单词和行:

import Tkinter as tk

class SampleApp(tk.Tk):

def __init__(self, *args, **kwargs):

tk.Tk.__init__(self, *args, **kwargs)

self.text = tk.Text(width=40, height=20)

self.text.bind("<1>", self.set_focus)

self.text.insert("end", "\n".join(dir(tk.Tk)))

self.text.configure(state="disabled")

self.text.pack(fill="both", expand=True)

def set_focus(self, event):

'''Explicitly set focus, so user can select and copy text'''

self.text.focus_set()

if __name__ == "__main__":

app = SampleApp()

app.mainloop()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值