2011年5月29日日曜日

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

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

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

追加したコードは以下の内容になりますかね。
    def on_btAdd_clicked(self,widget):
        tbEdit = self.wTree.get_object("tbEdit")
        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ファイルは前回のモノと変わってないので、そのまま使ってください。
import sys
import os.path
try:
    import pygtk
    pygtk.require("2.0")
except:
    pass
try:
    import gtk
except:
    sys.exit(1)
__author__ = 'kaoru'

class sample2:

    def __init__(self):
        gladefile = 'sample2.glade'
        self.wTree = gtk.Builder()
        self.wTree.add_from_file(os.path.dirname(os.path.abspath(__file__)) + "/"+gladefile)
        self.wTree.connect_signals(self)
        self.treeView = self.wTree.get_object("treeview1")
        self.listStore = self.wTree.get_object("liststore1")
        self.MainWindow = self.wTree.get_object("MainWindow")
        self.MainWindow.show_all()

    def on_MainWindow_destroy(self,widget):
        gtk.main_quit()

    def on_btAdd_clicked(self,widget):
        tbEdit = self.wTree.get_object("tbEdit")
        self.listStore.append([len(self.listStore)+1,tbEdit.get_text()])

    def on_btOK_clicked(self,widget):
        gtk.main_quit()

    def on_btClose_clicked(self,widget):
        gtk.main_quit()


if __name__ == "__main__":
    sample2()
    gtk.main()

0 件のコメント:

コメントを投稿