2

コードでGtkEntry.insert-at-cursorシグナルを使用しようとしていますが、機能しないようです。

    def on_servername_activate(self, widget):
       output = StringIO.StringIO()         
       servername = widget.get_text()
       self.output.write("USHARE_NAME="+servername+'\n')

これは、使用したいコードの一部ですinsert-at-cursor。これは私が犯している間違いだとほぼ確信しています。on_servername_activate(最初のハイフンで構文エラーが発生するon_servername_insertatcursorため)に置き換えましon_servername_insert-at-cursorたが、テキストがボックスに挿入されても何も起こりません。何も挿入されませんがoutput、すべてが信号で完全に機能しactivateます。

4

2 に答える 2

3

シグナルとメソッドの間に概念上の誤りがあるようです。

一方では、シグナルはイベントが発生したときにトリガーされます。これらのシグナルは、「insert-at-cursor」「insert_at_cursor」のような文字列の名前にすることができます。一方、(ウィジェット内の)これらのシグナルを関数/メソッドに接続する必要があります。関数/メソッドには任意の名前を付けることができます。読みやすくするために、シグナルにできるだけ近い名前を付けるようにしていますが、必須ではありません。

あなたの場合、あなたは次のようなものが欲しいかもしれません:

class Foo:
  ...
  def create_widgets(self):
      entry.gtkEntry()
      entry.connect('insert-at-cursor', self.entry_insert_at_cursor)

  def entry_insert_at_cursor(self, *args):
      # some code

ご覧のとおり、entry.connect(...)では、シグナルメソッドが一致します。これは、コードの構文エラーを説明しています。

もう1つの誤解は、信号のカーソル挿入の使用であるように思われます。そのシグナルについては、エントリをキーにバインドする必要がありますが、これは探している動作ではないようです。ターゲットとするGTKのバージョンによっては、次のものを使用することをお勧めします。

      entry.connect('changed', self.entry_changed)

また

      entry.connect('insert-text', self.entry_insert_text)

後者の場合、メソッドは変更されたテキストと位置を受け取ります。同様に、エントリに関連付けられているバッファを直接処理できます。

      entry.connect('inserted-text', self.buffer_entry_inserted_text)

メソッドが挿入されたバイト数を追加で受け取る場所。

于 2012-06-25T21:25:49.153 に答える
0

次のように、 gtk.EntryBufferオブジェクトの挿入テキストシグナルコールバックを使用したいと思います。

def on_insert_cb (buf, pos, chars, nch):
    print buf.get_text()

# --- skip ---

entry = gtk.Entry()
entry.get_buffer().connect("inserted-text", on_insert_cb)

# --- skip ---
于 2012-06-25T16:34:08.193 に答える