GtkEntry でコード保管

今日は gtk.Entry の覚書を作っていたんだが。

gtk.Entry

gtk.Entry.set_completion メソッドって何だ?
Windows の CreateWindow() で指定する EDIT のような感覚で今まで利用していたんだが。

GtkEntryCompletion

英語ではよく解らないから日本語で探してみた、C の書き方で探せばなんとか見つかるなと。
そうか、ようするにいわゆるコード保管機能が標準装備ってことなのね。

説明だけではイマイチ解らないので実験コードを書いてみる。
とにかく GtkListStore をモデルとしてセットしてコレに文字列を詰め込みすればいいみたい。
追記、ちょっと書き換えと自動昇順ソート追加

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import gtk

slist = [
"abc",
"aaa",
"aab",
"bbbbb",
"あぁん",
"あっはーん",
"あん、あっあーん"
]

class Win(gtk.Window):
    def __init__(self):
        gtk.Window.__init__(self)
        self.connect("delete-event", gtk.main_quit)
        # Entry
        entry = gtk.Entry()
        # completion
        completion = gtk.EntryCompletion()
        entry.set_completion(completion)
        liststore = gtk.ListStore(str)
        completion.set_model(liststore)
        # ascending sort set
        liststore.set_sort_column_id(0, gtk.SORT_ASCENDING)
        # set the completion
        completion.set_text_column(0)
        # load up the liststore with string
        for item in slist:
            liststore.append([item])
        # pack
        vbox = gtk.VBox()
        vbox.pack_start(entry, False)
        self.add(vbox)
        self.set_size_request(300, -1)
        self.show_all()

if __name__ == "__main__":
    w = Win()
    gtk.main()

日本語でも保管が通るのかも兼ねて「あ」と打ち込んで確定してみる。

マジですか、こんな手抜き臭いコードで日本語対応のコード保管ができてしまった。
他に match-selected シグナルを利用する方法もあるようだ、動的に行うのも楽そうだ。
もう少し調べると面白そう、やはりこういうまとめページは作っておくべきかなと思った。