コールバックをオーバーライドしてdropEvent
、デフォルトのアクションを変更できます。これは、両方のセルに値を書き込む最初のバージョンです。
class TableSwitcher(QtGui.QTableWidget):
def dropEvent(self, dropEvent):
item_src = self.selectedItems()[0]
item_dest = self.itemAt(dropEvent.pos())
src_value = item_src.text()
item_src.setText(item_dest.text())
item_dest.setText(src_value)
call を介して Qt にデフォルトの動作 (ドラッグした を移動し、QTableWidgetItem
ドロップしたものを削除する) を実行させることもできsuper
ます。ここでは、デフォルトのアクションがウィジェットの状態を変更するという課題に直面します。
class TableSwitcher(QtGui.QTableWidget):
def dropEvent(self, dropEvent):
item_src = self.selectedItems()[0]
item_dest = self.itemAt(dropEvent.pos())
src_row = item_src.row()
src_col = item_src.column()
dest_value = item_dest.text()
super(TableSwitcher,self).dropEvent(dropEvent)
self.setItem(src_row,src_col, QtGui.QTableWidgetItem(dest_value))
このクラスを使用したコード例を次に示します。
app = QtGui.QApplication(sys.argv)
table = TableSwitcher()
n = 5
table.setRowCount(n)
table.setColumnCount(1)
table.setDragDropMode(QtGui.QAbstractItemView.InternalMove)
for i in range(n):
table.setItem(i,0,QtGui.QTableWidgetItem(str(i)))
table.show()
app.exec_()