pygtk 只读 gtk.TextView(使其忽略鼠标点击)
我需要一种方法,让gtk.TextView在pygtk的图形界面中忽略鼠标点击。
我已经把'editable'属性设置为false,这样用户就不能输入内容,但它还是会对鼠标点击做出反应。
这个文本视图是用来显示其他命令的输出的,所以如果用户在上面点击,光标就会移动到点击的位置。我想避免这种情况。
我需要的效果类似于设置属性('sensitive', False),但不想让这个控件变成灰色。它只需要静静地待着,忽略所有用户的输入。
有没有人知道怎么做到这一点?
提前感谢大家。
3 个回答
8
textview.set_property('editable', False)
textview.set_property('cursor-visible', False)
如果你想让用户能够选择文本或者右键点击选择“复制...”,那么你需要重写 button-press-event
,就像 @Derek Redfern 所说的那样。
9
你做的事情对你来说是更好的选择。不过,作为未来的参考,如果你真的想要阻止点击,你需要把 TextView
连接到 button-press-event
,像这样:
tview.connect('button-press-event', tviewClicked)
然后定义一个处理函数,让它返回 True
:
def tviewClicked(widget,event):
return True
从处理函数返回 True 的意思是告诉 GTK 不要把这个事件传递给其他地方,这样点击事件就不会被发送到 TextView
。用户就无法再点击它了。
我知道这个问题有点老了,但也许可以帮助到其他来这个页面的人。
5
找到了答案。对感兴趣的人来说,分享一下。
其实,没有办法让它忽略鼠标点击。如果你想要一个只读的文本视图,可以把'editable'这个属性设置为False。这样的话,它就不会接受键盘输入了。
另外,当你想插入文本时,应该使用insert
方法,而不是insert_at_cursor
方法。
示例
tview = gtk.TextView()
tview.set_property('editable', False)
# Insert text at the end on the textview.
buffer = tview.get_buffer()
buffer.insert(buffer.get_end_iter(), 'This text goes at the end of the existing text')
希望这对你有帮助。