【问题标题】:pyqt how to swap text inpyqt如何交换文本
【发布时间】:2013-05-27 18:22:48
【问题描述】:

我有一个包含多行的一列 QTable 小部件,我希望能够拖放以便重新排序它们。 我可以使用内部移动执行 setDragDropMode,但是当我将单元格 (0,1) 移动到 (0,3) (0,3) 正确获取文本,但单元格 (0,1) 现在为空。我想在放下单元格时交换它的文本。

class myList(QtGui.QTableWidget):
    def __init__(self,parent):
        super(myList,self).__init__(parent)
#        self.setAcceptDrops(True)
        self.setDragDropMode(QtGui.QAbstractItemView.InternalMove)

【问题讨论】:

    标签: drag-and-drop pyqt qtablewidget


    【解决方案1】:

    您可以覆盖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)
    

    您也可以通过super call 让Qt 执行默认行为(移动拖动的QTableWidgetItem,并删除您放置的那个),这里您面临的挑战是默认操作会改变小部件的状态。

    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_()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多