1

TextBufferユーザーが入力している間に入力を印刷する方法があるかどうか疑問に思っていました。シグナルを使用してみinsert_textましたが、入力が 1 文字遅れて出力されているようです。

これまでのところ私は持っています

self.__buffer.connect('insert_text', self.__inserted)
def __inserted(self, widget, iter, string, length):
    print self.__buffer.get_text(self.__buffer.get_start_iter(),self.__buffer.get_end_iter())

上記のコードは、実際に入力されている文字の後ろにバッファ 1 文字を出力します。

私が欲しい機能は次のようになります:

ユーザーが「こんにちは」と入力した場合

出力は

h              #after h typed
he             #after he typed 
hel            #etc
hell
hello

現在印刷中です

#after h typed
h             #after he typed
he            #etc
hel
hell
4

1 に答える 1

3

メソッドに渡された引数に欠落しているデータが見つかる可能性があります__inserted。シグナルに対するGtkTextBufferオブジェクトのデフォルト ハンドラーはinsert_text、テキストをバッファーに挿入する役割を担っているようで、シグナル ハンドラーは事前に実行されます。

これを回避するには、次の 2 つの方法があります。

  1. connect_afterシグナル ハンドラを接続するために使用します。これは、デフォルトのハンドラーの後に実行されます。

  2. 各変更後にバッファ全体のデータにアクセスしたい場合は、changed代わりにシグナルを使用することを検討してください。これは、次のテキストがバッファに挿入された後に発行され、削除も通知します。

于 2012-10-15T08:01:46.753 に答える