PyQt findItemsの使い方について
まずはじめに
今回はテーブルウィジェット内で使用します。
このメソッドを持っているウィジェットなら同じだと思うので、リファレンスを見て確認してください。
findItemsで目的の値を持つ位置を検索
まずは、table = QtWidgets.QTableWidget()でテーブルの作成です。
そして、table.insertRow()やtable.setItem()で値のセットされているテーブルを作ります。
下記のコードがサンプルです。
items = table.findItems("検索文字列", QtCore.Qt.MatchExactly)
for item in items:
print("行:"+str(item.row())+" | 列:"+str(item.column()))
コードを見ればわかると思いますが、findItems()を実行するとその値を持つ位置をすべて返してくれます。
この時返されるのはlist型であり、そのリストにQTableWidgetItemが格納されています。
上記のコードでいうと、itemsはlist型であり、itemは”QTableWidgetItem”です。
そのためfor文はlistに格納されているitemの分だけ回ります。
itemsリストの中に格納されているのが”QTableWidgetItem”というのがわかりにくいところです。
そのため、行や列の値をとるには、元々持っている関数を使ってあげる必要があります。
もっとわかりやすく使うには?
もし、検索するものがテーブル内においてユニークなものであったらどうでしょう。返ってくるのは1つの”QTableWidgetItem”が格納されたリストです。
そのためにfor文を回すのは馬鹿馬鹿しいですよね。
なので書き直します。
item = table.findItems("検索文字列", QtCore.Qt.MatchExactly)
print(item[0].row()) #行
print(item[0].column()) #列
大切なのはリストの中に入っているのが”QTableWidgetItem”だということです。
最後に
findItems関数は非常に便利だと思いますが、行や列当たりでの検索をかけたい場合には上手いこと落とし込みにくいので注意が必要です。
今回のシンプルな使い方を日本語でいい感じにまとまっているサイトがなかったのでここに書いておきます。
誰かの参考になれば幸いです。ではまた!!
コメントを残す