pygtk только для чтения gtk.TextView (игнорировать щелчки мышью) - PullRequest
2 голосов
/ 07 февраля 2011

Мне нужен способ заставить gtk.TextView игнорировать щелчки мыши в графическом интерфейсе pygtk.

Я установил для свойства editable значение false, чтобы предотвратить ввод данных пользователем, но оно по-прежнему реагирует на щелчки мыши.

Это текстовое представление отображает некоторые результаты других команд, поэтому, если пользователь щелкает по нему где-либо, он перемещает курсор в выбранное место. Мне нужно избегать этого.

Мне нужно что-то похожее на результаты set_property ('Sensitive', False), но без маскировки виджета. Нужно просто сидеть и игнорировать все виды пользовательского ввода.

У кого-нибудь есть идеи, как этого добиться?

Заранее спасибо.

Ответы [ 3 ]

8 голосов
/ 13 мая 2012

То, что вы сделали, лучше для ваших целей.Однако для дальнейшего использования, если вы действительно хотите просто заблокировать щелчок, вам нужно подключить TextView к button-press-event следующим образом:

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

и определить функцию-обработчик, чтобы она возвращала True:

def tviewClicked(widget,event):
    return True

Возвращение True из функции-обработчика говорит GTK не передавать его никому другому, поэтому щелчок никогда не отправляется на TextView.Пользователь больше не сможет нажимать на него.

Я знаю, что это старый вопрос, но, возможно, он поможет кому-то еще, кто заходит на эту страницу.

3 голосов
/ 16 мая 2012
textview.set_property('editable', False)
textview.set_property('cursor-visible', False)

Если вы даже хотите позволить пользователю выбрать текст или щелкнуть правой кнопкой мыши и выбрать «Копировать ...» (что не очень хорошая идея для консоли), вам следует перезаписать button-press-event, как писал @Derek Redfern.

2 голосов
/ 08 февраля 2011

Нашел ответ.Для всех, кто заинтересован, вот оно.

Правда в том, что нет способа заставить его игнорировать щелчки мыши.Что вы можете сделать, когда хотите использовать вид текста только для чтения, вы устанавливаете для свойства editable значение False.Это игнорирует ввод с клавиатуры.

Другое дело, что при вставке текста вы хотите использовать метод insert вместо метода insert_at_cursor.

Sample

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

...