PyQtでリストを表示する - QTreeView

     仕事でPyQtを使いそうな空気になってきたんで(むしろそう仕向けた??)、最近ちょっとお勉強を始めました。
    とりあず、ブラウザ的なものを作りたい!
    ブラウザと言ったらリスト形式!
    って事で、まずはリストを作成して見るべく、奮闘中です。

     Melの場合はtextScrollListで終了でしたが、Pythonは選択肢がありすぎて、意味がわからず混乱中~^^;
     とりあえず、QTreeViewを使用するところから始めてみようかと思います。(他にもQListViewとかもある見たいですが、違いがわからん・・・)
    # -*- coding:utf-8 -*-
    import sys
    from PyQt4 import QtGui, QtCore
    
    
    # *****************************************************************************
    # ダイアログクラス*************************************************************
    # *****************************************************************************
    MY_DATA = {
        'taro'  : '1990, 01, 01',
        'hanako': '1990, 02, 01',
        'jiro'  : '1990, 03, 01',
        'takako': '1990, 04, 01',
    }
    
    
    
    class MyDialog( QtGui.QDialog ):
        def __init__( self, parent=None ):
            # 親クラスの初期化。
            super( MyDialog, self ).__init__( parent )
            # ウィンドウ名を設定。
            self.setWindowTitle( 'Tree View Sample' )
            self.index = 0
    
    
            # リストを作成=========================================================
            # QTreeViewを作成。
            self.treeview = QtGui.QTreeView()
            self.treeview.setSortingEnabled( True )     #ソート機能を有効化
    
            # QStandardItemModel
            self.stdItemModel = QtGui.QStandardItemModel( 0, 2, parent )
            self.stdItemModel.setHeaderData( 0, QtCore.Qt.Horizontal, 'Name' )
            self.stdItemModel.setHeaderData( 1, QtCore.Qt.Horizontal, 'Date' )
    
    
            # QStandardItemModelにアイテムを追加。
            index = 0
            for key in MY_DATA.keys():
                # ローカル8ビットに文字セットを変換してQStandardItemを作成
                nameitem = QtGui.QStandardItem( QtCore.QString.fromLocal8Bit(key) )
                dateitem = QtGui.QStandardItem( QtCore.QString.fromLocal8Bit(MY_DATA[key]) )
                dateitem.setEditable( False )
    
                self.stdItemModel.setItem( index, 0, nameitem )
                self.stdItemModel.setItem( index, 1, dateitem )
                index += 1
    
            # QTreeViewにmodelをセット。
            self.treeview.setModel( self.stdItemModel ) 
    
            # stdItemModelにシグナルを追加し、self.slotメソッドを接続。
            QtCore.QObject.connect(
                self.treeview.selectionModel(),
                QtCore.SIGNAL('selectionChanged(QItemSelection, QItemSelection)'),
                self.slot
            )
            # =====================================================================
    
    
    
            # レイアウトを定義。===================================================
            layout = QtGui.QHBoxLayout()        #レイアウトを作成。
            layout.addWidget( self.treeview )   #レイアウトにQTreeViewを追加。
            self.setLayout( layout )            #ダイアログにレイアウトをセット。
            # =====================================================================
    
        def slot( self, selected, deselected ):
            print( '# %s' % self.index )
            print( '  %s item selected.' % len(selected) )
            print( '  %s item deselected.' % len(deselected) )
            self.index += 1
    # *****************************************************************************
    # *****************************************************************************
    # *****************************************************************************
    
    
    
    
    if __name__ == '__main__':
        app = QtGui.QApplication( sys.argv )
        dialog = MyDialog()
    
        sys.exit( dialog.exec_() )
    

    QTreeViewSample.jpg
     とりあえず作成。なんと、PyQtではテーブル方式のリストが簡単(でもなかったですけど)に作れちゃいます! 項目ごとのソートもはじめからついているため、非常に使い勝手がいいですね。
     なんちゅうもんを作ってくれたんや・・・なんちゅうもんを・・・これに比べるとMayaさんのmelはカスや
     ただし制御方法はMelのtextScrollListよりかなり大変になっている模様です。

     基本的な流れは
    1)QTreeViewを作成

    2)QStandardItemModel(用途によって種類がある模様)を作成し、QTreeViewにセット

    3)必要分だけQStandardItemをQStandardItemModelに追加(コラム内の色などはこちらで設定)
    といった感じの模様。
    リスト内の各アイテムはすべて個別制御可能なため、色やフォント、表示形式まですべてコントロール可能なパワフルな感じになっているみたいです。

    また、クリックした時の動作は
    QtCore.QObject.connect
    を使用してイベントとして接続してやります。他にも方法があるんだろうか・・・?


     現在まったくもって迷走中、試行錯誤な毎日ですが、できる事は非常に幅広いので頑張って作成していきたいですね。


     とりあえず今日は取り急ぎ、ここまで。

    スポンサーサイト

    コメントの投稿

    非公開コメント

    No title

    とりあえずこれ貼っておきますね!
    http://www.tanteifile.com/newswatch/2010/06/02_01/image/01.jpg

    PyQtもPySideも触る機会ないまま今まで来ましたが、
    みんな楽しそうなので僕もぼちぼち触ってみたい!です!!
    が、まだもうちょい後になりそう・・・!
    是非引き続きレポおねがいします!:D

    もてなしの心

    なんちゅうもんを張ってくれたんや・・・

    って、なんて早くて完璧な仕事なんでしょw 絶妙なアシストありがと~ございます!!

     PyQtはインストールしちゃえば、Pythonをサポートしているツール全てから起動できる上に、起動したツールによってそれぞれに特化した機能も追加できるので、凄いことができそうですよ!!
     最近ちょいテンション上がり気味です。
     先鋒隊として、頑張って斬り込んできます(`・ω・´)ゞ

    日々

    pythonはいろんなことが出来ることに改めて感動いたします!
    が。。。それを使いこなせる主さん。。。さらに感動です。

    主さん目指して頑張ります!

    ぱーーいそん

     全然使いこなしてないですよぉ・・・手探り状態で迷走中です(´Д`)

     Python周りは可能性が広いんで、探索しがいがあって楽しいですよね♪
     お互い使いこなせるように頑張りましょぉ!
    プロフィール

    Eske

    Author:Eske
    萌えイラストレーターを目指す3DCGイラストレーター。
    現在ポケモンカードゲーム、ガンダムトライエイジ、ガンダムコンクエスト、妖怪ウォッチとりつきカードゲームなどで3DCGを使用したイラストレーターとして参加中。

    主にここでは日々気づいたメモなんかを残してます。
    イラストのお仕事も受け付けております。ココからアクセスできますので、お気軽にご相談下さい。

    最新記事
    最新コメント
    カテゴリ
    最新トラックバック
    月別アーカイブ
    検索フォーム
    リンク
    QRコード
    QR