サイドバーの「Django ドキュメント検索」というプレースホルダの入った検索では、Django ドキュメント (Django 2.1) の公式サイト内を検索できます
PySide2 の QListView / QComboBox を使う

目次

前回、PySide2 でツリービューやリストビューを使う例として、PySide2 の QTreeView / QListView でディレクトリを表示する を書きました。今回は、単純に文字列リストをリストやコンボボックスで表示する例を紹介します。

はじめに

Model / View を使ってリスト等を表示する場合、モデルを準備する作業が必要です。ただし、単純なデータについては、前回の記事で利用した QFileSystemModel のように予めモデルが用意がされています。今回は、文字列リストを取り扱うための QStringListModel を利用して、リストやコンボボックスを表示します。

QStringListModel を使う

QStringListModel は、QListViewQComboBox で利用できる編集可能な文字列リストモデルを提供します。文字列を割り当てるには、setStringList メソッドを使います。

※ Qt では文字列を QString、文字列リストを QStringList で扱いますが、PySide2 では、単純に Python の文字列型 (string) とそのリスト型 (list) を使います。

model = QStringListModel()
model.setStringList(str_list)

QListView で文字列リストを表示する

それでは、実際に文字列リストをリストビューで表示してみます。

import sys
from PySide2.QtCore import Qt
from PySide2.QtCore import QStringListModel
from PySide2.QtWidgets import QApplication
from PySide2.QtWidgets import QListView


def main():
    app = QApplication(sys.argv)

    # PySide では QString, QStringList ではなく、文字列とそのリストを直接使う
    slist = ['時計', 'テレビ', 'パソコン', '電話']
    model = QStringListModel()
    model.setStringList(slist)

    view = QListView()
    view.setModel(model)
    view.show()

    return app.exec_()


if __name__ == '__main__':
sys.exit(main())

上記を実行してみます。

QComboBox で文字列リストを表示する

次に同じモデルをコンボボックスで表示してみます。上記コードの QListViewQConboBox に書き換えるだけです。

import sys
from PySide2.QtCore import Qt
from PySide2.QtCore import QStringListModel
from PySide2.QtWidgets import QApplication
from PySide2.QtWidgets import QComboBox


def main():
    app = QApplication(sys.argv)

    # PySide では QString, QStringList ではなく、文字列とそのリストを直接使う
    slist = ['時計', 'テレビ', 'パソコン', '電話']
    model = QStringListModel()
    model.setStringList(slist)

    view = QComboBox()
    view.setModel(model)
    view.show()

    return app.exec_()


if __name__ == '__main__':
    sys.exit(main())

実行してみます。下段は、コンボボックスを開いたところです。

おまけ

リストとコンボボックスを比較できるように、上下に並べて表示してみました。

import sys
from PySide2.QtCore import Qt
from PySide2.QtCore import QStringListModel
from PySide2.QtWidgets import QApplication
from PySide2.QtWidgets import QSplitter
from PySide2.QtWidgets import QListView
from PySide2.QtWidgets import QComboBox


def main():
    app = QApplication(sys.argv)

    # PySide では QString, QStringList ではなく、Python の組込型を直接使う
    slist = ['時計', 'テレビ', 'パソコン', '電話']
    model = QStringListModel()
    model.setStringList(slist)

    # 2つのビューを分けるために QSplitter を使う (垂直分割)
    splitter = QSplitter()
    splitter.setOrientation(Qt.Vertical)

    # リストビュー
    view1 = QListView(splitter)
    view1.setModel(model)

    # コンボボックス
    view2 = QComboBox(splitter)
    view2.setModel(model)

    splitter.show()

    return app.exec_()


if __name__ == '__main__':
    sys.exit(main())

表示してみます。

参考

PySide2 の QTreeView / QListView でディレクトリを表示する | アルトエリア++

低価格なのに高速・多機能・高セキュリティ 月額400円(税別)から最大容量100GB WordPress専用高速サーバー Z.com WP
おすすめの記事