pygtk只读gtk.TextView(让它忽略鼠标点击)

时间:2011-02-07 20:20:27

标签: python gtk pygtk

我需要一种方法让gtk.TextView忽略pygtk GUI中的鼠标点击。

我已将'editable'属性设置为false以提供用户输入,但它仍然会响应鼠标点击。

此textview显示其他命令的一些输出,因此如果用户单击其中的任何位置,它会将光标移动到单击的位置。我需要避免这种情况。

我需要类似于set_property('sensitive',False)结果的东西,但不会使窗口小部件变灰。它只需要坐在那里忽略各种用户输入。

任何人都有任何想法如何实现这一目标?

提前致谢。

3 个答案:

答案 0 :(得分:8)

您所做的更适合您的目的。但是,为了将来参考,如果您真的想要阻止点击,您可能希望将TextView连接到button-press-event,如下所示:

tview.connect('button-press-event', tviewClicked)

并定义处理函数,使其返回True

def tviewClicked(widget,event):
    return True

从处理函数返回True告诉GTK不要将其传递给任何其他东西,因此点击永远不会被发送到TextView。用户将无法再点击它。

我知道这是一个老问题,但也许它会帮助其他人来到这个页面。

答案 1 :(得分:3)

textview.set_property('editable', False)
textview.set_property('cursor-visible', False)

如果您甚至想要允许用户选择文本或右键单击并选择复制...(这对于控制台来说不是一个好主意),您应该覆盖{@ 1}},如@Derek Redfern所写。

答案 2 :(得分:2)

找到答案。对于任何有兴趣的人来说,就在这里。

事实是,没有办法让它忽略鼠标点击。当您想要只读类型的文本视图时,可以执行的操作是将“可编辑”属性设置为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')

HTH