2011年5月29日日曜日

せっかくなので、TreeViewにアイテムを追加出来るようにしてみる。

今回は、前回Gladeで作成したTreeViewを使ったリスト表示の画面に、プログラムからアイテムを追加する、というネタをやります。

っても、ネタってほどのモノじゃないんですが、実はこれが。(笑)
激、シンプル。

追加したコードは以下の内容になりますかね。
  1. def on_btAdd_clicked(self,widget):  
  2.     tbEdit = self.wTree.get_object("tbEdit")  
  3.     self.listStore.append([len(self.listStore)+1,tbEdit.get_text()])  
前回はpassで済ませてた、追加ボタンを押された場合の処理を追記しただけです。
GTKのTreeViewのこのListStoreというオブジェクトを使う場合、Pythonでは、アイテムの追加には、appendというメソッドを使い、渡すのは、その行の列の形式にマッチしたタプル(またはリスト)を渡します。
今回はリストで渡してますけど。

簡単にプログラムを説明してしまうと、最初に、入力文字列を取得するために、GTKBuilderから、テキストボックスのオブジェクトを取得し、次に、現在のListStoreのアイテム数(行数)をlen()関数で取得して、その値に1を加えたものを行番号とし、それにテキストボックスに入力された文字列を取得して、リストを作成し、appendの引数に与えてるだけです。

これ、結構考えられるなー、と思ったのが、タプルで渡すとこ、ですかね。
つまり、forで受け取ったタプルを、そのままappend出来るわけです。
どんな時に便利か、というと、データベースからデータ取得してきた際に、タプルで戻されるようにしておけば、forを使って、TreeViewに簡単に表を作れてしまう、ってところでしょうか。

この辺、SQLiteと組み合わせたサンプルというか、課題っぽいものを考えてますので、またいずれ。(笑)
まあ、焦っても、気になるあの子のブラチラは拝めません。
やはり、夏になって、薄着になり、かつ胸元が大きく開いた服を着た日を狙わないと、なかなか拝めないものです。
つまり、下準備が重要ということですな。(何の

今年の夏は冷房も制限されるようで、なおさら、薄着で胸元の大きく開いた服が期待できます。
ある意味、震災もラッキーだったかも、と前向きに考えて、気になるあの子の胸の谷間やブラチラをゲットしましょう。(笑)

ま、与太はともかく。
一応、ソースコード全文を掲載しときます。
Gladeファイルは前回のモノと変わってないので、そのまま使ってください。
  1. import sys  
  2. import os.path  
  3. try:  
  4.     import pygtk  
  5.     pygtk.require("2.0")  
  6. except:  
  7.     pass  
  8. try:  
  9.     import gtk  
  10. except:  
  11.     sys.exit(1)  
  12. __author__ = 'kaoru'  
  13.   
  14. class sample2:  
  15.   
  16.     def __init__(self):  
  17.         gladefile = 'sample2.glade'  
  18.         self.wTree = gtk.Builder()  
  19.         self.wTree.add_from_file(os.path.dirname(os.path.abspath(__file__)) + "/"+gladefile)  
  20.         self.wTree.connect_signals(self)  
  21.         self.treeView = self.wTree.get_object("treeview1")  
  22.         self.listStore = self.wTree.get_object("liststore1")  
  23.         self.MainWindow = self.wTree.get_object("MainWindow")  
  24.         self.MainWindow.show_all()  
  25.   
  26.     def on_MainWindow_destroy(self,widget):  
  27.         gtk.main_quit()  
  28.   
  29.     def on_btAdd_clicked(self,widget):  
  30.         tbEdit = self.wTree.get_object("tbEdit")  
  31.         self.listStore.append([len(self.listStore)+1,tbEdit.get_text()])  
  32.   
  33.     def on_btOK_clicked(self,widget):  
  34.         gtk.main_quit()  
  35.   
  36.     def on_btClose_clicked(self,widget):  
  37.         gtk.main_quit()  
  38.   
  39.   
  40. if __name__ == "__main__":  
  41.     sample2()  
  42.     gtk.main()  

0 件のコメント:

コメントを投稿