スポンサーサイト

    上記の広告は1ヶ月以上更新のないブログに表示されています。
    新しい記事を書く事で広告が消せます。

    オートコンプリート付き入力ボックス

     よくテキストボックスに入力する時に、最初の一文字を入れるとその文字から始まる単語が一覧になる機能があります。オートコンプリートってヤツですね。
    QtCompleter001.jpg  このオートコンプリート機能、Qtだと簡単に実装できますよとの事で調べてみると、確かに簡単に設定できました。
     しかも面白いことに、このオートコンプリート機能付きテキストボックスを作成するには、QComboBoxQLineEdit、ItemModel(今回はQStandardItemModel)、それにQCompleterを組み合わせて作成する事が出来るようになってるんですね。

     流石Qt、面白い作りですねぇ(他のGUIキットもそうなのかもしれんですが)。



    と言う事で早速作ってみました。
    # -*- coding:utf-8 -*-
    
    import sys
    from PyQt4 import QtGui, QtCore
    
    
    class MainWindow( QtGui.QDialog ):
        def __init__( self, parent=None ):
            super( MainWindow, self ).__init__( parent )
            self.setWindowTitle( 'Auto Completer' )
            self.resize( 280, 100 )
    
            layout    = QtGui.QVBoxLayout( self )
    
            # AutoComplete用ComboBoxの作成、及びセットアップ。-----------------------------------
            # Completerで一覧するためのリストを格納するItemModelを作成。
            model = QtGui.QStandardItemModel( self )
            for elm in ['test', 'testcase', 'testing', 'tetris', 'tetrapod']:
                item = QtGui.QStandardItem( elm )
                model.setItem( model.rowCount(), 0, item )
    
            # Completer機能付き入力ウィジェットのベースとなるComboBoxを作成。
            comboBox = QtGui.QComboBox( self )
    
            # QLineEditを#ComboBoxにセット。
            comboBox.setLineEdit( QtGui.QLineEdit() )
            # Auto Complete用Completerをセット。
            comboBox.setCompleter( QtGui.QCompleter() )
    
            # ComboBoxとCompleterにItemModelをセット
            comboBox.setModel( model )
            comboBox.completer().setModel( model )
    
            # 入力を初期化
            comboBox.lineEdit().setText( '' )
            # -----------------------------------------------------------------------------------
    
    
            layout.addWidget( comboBox )
    
    
    
    if __name__ == '__main__':
        app    = QtGui.QApplication( sys.argv )
        window = MainWindow()
        window.show()
    
        sys.exit( app.exec_() )
    

    基本的な流れとしては
    • メインフレームはQComboBox
    • QLineEditをセットする事でComboBoxがテキスト入力が可能に!
    • Completerもセットすると、オートコンプリート機能も搭載
    • CompleterにItemModelをセットすると、ItemModelのリストが入力候補に!
    と言う感じでしょうか。入力機能を追加するにはQLineEditをくっつけて、リストを制御するのにItemModelをくっつけるあたり、非常に合理的なニクい作りです(^^)


     リストの管理にItemModelを使用しているので、当然QTreeViewなどのリスト管理ウェジェットとの連携もとれます。
    QtCompleter002.jpg
    ↑入力一欄を下にリストとして表示したり・・・

    QtCompleter003.jpg
    ↑追加した入力を下のリストに反映させたりなど。


     やり方は上のソースの39行目の下に以下に書き加えるだけ
    		#	TreeViewを作成する。---------------------------------------------------------------
    		treeview	=	QtGui.QTreeView()
    		treeview.setModel(	model	)
    		model.setHeaderData( 0, QtCore.Qt.Horizontal, 'Candidate' )
    		#	-----------------------------------------------------------------------------------
    
    		layout.addWidget(	treeview	)
    
    実質やってるのはQTreeView作って、すでにあるQStandardItemModelをセットしてるだけですね。
    非常にわかりやすく、合理的で扱い易い素敵な機能です!
    スポンサーサイト

    コメントの投稿

    非公開コメント

    プロフィール

    Eske

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

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

    最新記事
    最新コメント
    カテゴリ
    最新トラックバック
    月別アーカイブ
    検索フォーム
    リンク
    QRコード
    QR
    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。