2

TextViewウィンドウ内に aを配置し、mark-setイベントを登録する次のコード例を検討してください。

#!/usr/bin/env python3

from gi.repository import Gtk

win = Gtk.Window(title='test')
text_view = Gtk.TextView()

def test (*args):
    print('test!')

win.add(text_view)
text_view.get_buffer().connect('mark-set', test)

win.connect('delete-event', Gtk.main_quit)
win.show_all()
Gtk.main()

それを起動し、デバッグ出力を複数回取得したらTextView 、視覚化されたものをクリックします。

$ ./test.py 2>/dev/null
test!
test!
test!
test!

なぜこれが起こっているのか知っていますか?それを回避する方法はありますか?

4

1 に答える 1

0

なぜそれが起こっているのか正確にはわかりませんが、理解するのに役立つ何かを見つけたり、mark.get_name(). ここでコードを変更し、テキストを入力して操作します (テキストを選択し、どこかをクリックして...)

#!/usr/bin/env python3
import time
from gi.repository import Gtk

win = Gtk.Window(title='test')
text_view = Gtk.TextView()

def mark_set(buf, itr, mark):
    ### mark.get_name() ==> 'selection_bound' | 'insert' | None
    print('Time: %.2f,    Mark Name: %s'%(time.time()%100, mark.get_name()))

win.add(text_view)
text_view.get_buffer().connect('mark-set', mark_set)

win.connect('delete-event', Gtk.main_quit)
win.show_all()
Gtk.main()
于 2015-07-11T11:50:44.750 に答える