pygtk 只读 gtk.TextView(使其忽略鼠标点击)

4 投票
3 回答
3073 浏览
提问于 2025-04-16 11:24

我需要一种方法,让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')

希望这对你有帮助。

撰写回答