最近仕事で処理結果をGUIで表示させたいことがあったのでPythonのQtを勉強してみた。
PythonのQtにはPyQtとQt for Python(PySide2)があるけど、今回は最近登場したQt for Python(PySide2)を使って簡単なTree構造の作り方をまとめてみようと思う。
Qt for Pythonは以下のコマンドでインストールできる。
pip install pyside2
目次
TreeのベースとなるWindowを表示する
import sys from PySide2.QtWidgets import QApplication, QTreeWidget app = QApplication(sys.argv) qw_tree = QTreeWidget() qw_tree.show() sys.exit(app.exec_())
基本的なこと
- QtではWidgetと呼ばれる部品を使うことで色々なGUIを作ることができる。
QApplication()
はWidget関連の初期化をするので、Widgetを使う前に実行しなければならない。QTreeWidget()
はツリー形式のGUIを作るためのWidget。- Widgetを表示するためには、
show()
を実行する。show()
は全てのWidgetが持つメソッド。 sys.exit(app.exec_())
でQtのメインループに入る。
ということで、GUIを作るためにはQApplication()
とsys.exit(app.exec_())
の間で
が必要になる。
TreeにHeaderをつける
import sys from PySide2.QtWidgets import QApplication, QTreeWidget app = QApplication(sys.argv) qw_tree = QTreeWidget() qw_tree.setHeaderLabels(["name", "tel", "mail"]) # Headerをつける qw_tree.show() sys.exit(app.exec_())
QTreeWidget.setHeaderLabels(labels)
- リスト形式の変数を渡すとヘッダを生成してくれる。
- 同様にヘッダを生成することができるメソッドに
QTreeWidget.setHeaderItem()
とQTreeWidget.setHeaderLabel()
があるが、できることは一緒なのでsetHeaderLabels()
を使っておけばOK。
TreeにItemを追加する
import sys from PySide2.QtWidgets import QApplication, QTreeWidget, QTreeWidgetItem app = QApplication(sys.argv) qw_tree = QTreeWidget() qw_tree.setHeaderLabels(["name", "tel", "mail"]) qw_tree_parent_item = QTreeWidgetItem(['family']) # Treeに追加するItemを生成 qw_tree.addTopLevelItem(qw_tree_parent_item) # TreeにItemを追加する qw_tree.show() sys.exit(app.exec_())
QTreeWidgetItem(names)
- list形式の変数を渡すとTreeに追加するItemを生成してくれる。
QTreeWidget.addTopLevelItem()
に生成したItemを設定すると、TreeにItemが登録される。QTreeWidget.addTopLevelItems()
を使うと複数Itemをリスト形式で渡すことができる。
Itemに子Itemを追加する
import sys from PySide2.QtWidgets import QApplication, QTreeWidget, QTreeWidgetItem app = QApplication(sys.argv) qw_tree = QTreeWidget() qw_tree.setHeaderLabels(["name", "tel", "mail"]) qw_tree_parent_item = QTreeWidgetItem(['family']) qw_tree_parent_item.addChild(QTreeWidgetItem(['A', '111-111-111', 'aaa@gmail.com'])) # Itemに子Itemを追加 qw_tree.addTopLevelItem(qw_tree_parent_item) qw_tree.expandAll() # TreeのItemを全て開く qw_tree.show() sys.exit(app.exec_())
QTreeWidgetItem.addChild(Item)
QTreeWidgetItem.addChild(Item)
を使うとItemに子Itemを追加できる。QTreeWidget.expandAll()
を使うとデフォルトでTreeが開いた状態になる。QTreeWidget.expandAll()
はQTreeWidgetItem.addChild(Item)
の後に呼ぶ。
Treeに複数のItemをつける
これまでやってきたことを繰り返すだけで簡単に階層構造のTree GUIが作れる。
import sys from PySide2.QtWidgets import QApplication, QTreeWidget, QTreeWidgetItem app = QApplication(sys.argv) qw_tree = QTreeWidget() qw_tree.setHeaderLabels(["name", "tel", "mail"]) qw_tree_parent_item_1 = QTreeWidgetItem(['family']) qw_tree_parent_item_1.addChild(QTreeWidgetItem(['A', '111-111-111', 'aaa@gmail.com'])) qw_tree_parent_item_1.addChild(QTreeWidgetItem(['B', '222-222-222', 'bbb@gmail.com'])) qw_tree_parent_item_2 = QTreeWidgetItem(['school']) qw_tree_parent_item_2.addChild(QTreeWidgetItem(['C', '333-333-333', 'ccc@gmail.com'])) qw_tree_parent_item_2.addChild(QTreeWidgetItem(['D', '444-444-444', 'ddd@gmail.com'])) qw_tree.addTopLevelItem(qw_tree_parent_item_1) qw_tree.addTopLevelItem(qw_tree_parent_item_2) qw_tree.expandAll() qw_tree.show() sys.exit(app.exec_())