#!/usr/bin/env python # coding: utf-8 import sys from PySide6.QtCore import Qt from PySide6.QtGui import QStandardItemModel, QStandardItem from PySide6.QtWidgets import ( QApplication, QMainWindow, QTreeView, ) class Example(QMainWindow): pref = { '北海道': '札幌市', '青森県': '青森市', '岩手県': '盛岡市', '宮城県': '仙台市', '秋田県': '秋田市', '山形県': '山形市', '福島県': '福島市', '茨城県': '水戸市', '栃木県': '宇都宮市', '群馬県': '前橋市', '埼玉県': 'さいたま市', '千葉県': '千葉市', '東京都': '新宿区', '神奈川県': '横浜市', '新潟県': '新潟市', '富山県': '富山市', '石川県': '金沢市', '福井県': '福井市', '山梨県': '甲府市', '長野県': '長野市', '岐阜県': '岐阜市', '静岡県': '静岡市', '愛知県': '名古屋市', '三重県': '津市', '滋賀県': '大津市', '京都府': '京都市', '大阪府': '大阪市', '兵庫県': '神戸市', '奈良県': '奈良市', '和歌山県': '和歌山市', '鳥取県': '鳥取市', '島根県': '松江市', '岡山県': '岡山市', '広島県': '広島市', '山口県': '山口市', '徳島県': '徳島市', '香川県': '高松市', '愛媛県': '松山市', '高知県': '高知市', '福岡県': '福岡市', '佐賀県': '佐賀市', '長崎県': '長崎市', '熊本県': '熊本市', '大分県': '大分市', '宮崎県': '宮崎市', '鹿児島県': '鹿児島市', '沖縄県': '那覇市', } def __init__(self): super().__init__() self.init_ui() self.setWindowTitle('TreeView with check') def init_ui(self): tree = QTreeView() self.setCentralWidget(tree) model = QStandardItemModel() model.setHorizontalHeaderLabels(['都道府県', '庁所在地']) for name_pref in self.pref.keys(): item_pref = QStandardItem(name_pref) item_pref.setCheckable(True) item_pref.setEditable(False) item_capital = QStandardItem(self.pref[name_pref]) item_capital.setCheckable(True) item_capital.setEditable(False) model.appendRow([item_pref, item_capital]) tree.setModel(model) model.itemChanged.connect(self.on_check_item) def on_check_item(self, item: QStandardItem): row = item.row() name = item.text() if item.checkState() == Qt.CheckState.Checked: msg = 'checked' is_checked = True else: msg = 'unchecked' is_checked = False print(row, name, msg) def main(): app = QApplication(sys.argv) ex = Example() ex.show() sys.exit(app.exec()) if __name__ == '__main__': main()