QTableWidget.itemSelectionChanged
信号に接続して、選択範囲に基づいてテーブル内の他のすべての項目のQt.ItemIsSelectable
フラグを変更できます。
from itertools import product
table = QtGui.QTableWidget()
table.itemSelectionChanged.connect(self.on_itemSelectionChanged)
@QtCore.pyqtSlot()
def on_itemSelectionChanged(self):
sel_items = self.table.selectedItems()
# get all items in table
items = []
for r, c in product(range(self.table.rowCount()), range(self.table.columnCount())):
items.append(self.table.item(r, c)
# Loop through all the items in the table and
# set the selection flag based of already selected items.
for item in items:
if can_be_selected:
item.setFlags(item.flags() | QtCore.Qt.ItemIsSelectable)
else:
item.setFlags(item.flags() & ~QtCore.Qt.ItemIsSelectable)
QItemSelectionModel – Fabio
をサブクラス化することはできますか?選択をオーバーロードすると半分になるかもしれませんが、シフトがCtrlキーで押されているときにマウスが上に移動すると、アイテムが選択可能に表示されたほうが理想的です。 cttrl/shiftが押されるたびにItemIsSelectableフラグを変更することは悪いようです。 –
「マウスの上にマウスを置くとアイテムが選択可能に表示されます」とはどういう意味ですか?選択可能な項目とマウスの上にマウスを置いたときに選択可能な項目との間に相違があるようには思われません。私はあなたが 'QItemSelectionModel'の2つの' select'メソッドをオーバーロードして、既に選択されているアイテムに応じてアイテムを選択することができると思います。(確かではありませんが、私はこのようなことは一度もしませんでした) – Fabio