今日は gtk.Entry の覚書を作っていたんだが。
gtk.Entry.set_completion メソッドって何だ?
Windows の CreateWindow() で指定する EDIT のような感覚で今まで利用していたんだが。
英語ではよく解らないから日本語で探してみた、C の書き方で探せばなんとか見つかるなと。
そうか、ようするにいわゆるコード保管機能が標準装備ってことなのね。
説明だけではイマイチ解らないので実験コードを書いてみる。
とにかく GtkListStore をモデルとしてセットしてコレに文字列を詰め込みすればいいみたい。
追記、ちょっと書き換えと自動昇順ソート追加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #!/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 シグナルを利用する方法もあるようだ、動的に行うのも楽そうだ。
もう少し調べると面白そう、やはりこういうまとめページは作っておくべきかなと思った。