在PyQt5中上下移动行

问题描述

考虑一个QTableWidget和两个按钮“上移”和“下移”。单击上移,当前行应上移一行,类似于“下移”。

实现相应的上移和下移功能的最简单方法是什么?还是可以将此代码段更新为pyqt5,而pyqt4在pyqt4中执行相同的任务!

import sys
from PyQt4 import QtCore
from PyQt4 import QtGui

class mtable(QtGui.QMainWindow):
    def __init__(self,parent=None):
        QtGui.QWidget.__init__(self,parent)


        self.move_up = QtGui.QAction("Move_Up",self)
        self.connect(self.move_up,QtCore.SIGNAL('triggered()'),self.moveUp)

        self.move_down = QtGui.QAction("Move_Down",self)
        self.connect(self.move_down,self.moveDown)

        self.toolbar = self.addToolBar('Toolbar')
        self.toolbar.addAction(self.move_up)
        self.toolbar.addAction(self.move_down)


        ##Init Table
        self.table = QtGui.QTableWidget(4,3)
        for i in range(0,4):
            for j in range(0,4):
                self.table.setItem(i,j,QtGui.QTableWidgetItem("a_"+str(i)+str(j)))

        self.setCentralWidget(self.table)

    def moveDown(self):
        row = self.table.currentRow()
        column = self.table.currentColumn();
        if row < self.table.rowCount()-1:
            self.table.insertRow(row+2)
            for i in range(self.table.columnCount()):
               self.table.setItem(row+2,i,self.table.takeItem(row,i))
               self.table.setCurrentCell(row+2,column)
            self.table.removeRow(row)        


    def moveUp(self):    
        row = self.table.currentRow()
        column = self.table.currentColumn();
        if row > 0:
            self.table.insertRow(row-1)
            for i in range(self.table.columnCount()):
               self.table.setItem(row-1,self.table.takeItem(row+1,i))
               self.table.setCurrentCell(row-1,column)
            self.table.removeRow(row+1)        


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    tb = mtable()
    tb.show()
    sys.exit(app.exec_())

解决方法

要转换为PyQt5,您要做的就是将导入和模块从QtGui更改为QtWidgets以及信号插槽连接的语法。

import sys
from PyQt5 import QtWidgets

class mtable(QtWidgets.QMainWindow):
    def __init__(self,parent=None):
        QtWidgets.QWidget.__init__(self,parent)
        
        self.move_up = QtWidgets.QAction("Move_Up",self)
        self.move_up.triggered.connect(self.moveUp)

        self.move_down = QtWidgets.QAction("Move_Down",self)
        self.move_down.triggered.connect(self.moveDown)

        self.toolbar = self.addToolBar('Toolbar')
        self.toolbar.addAction(self.move_up)
        self.toolbar.addAction(self.move_down)

        ##Init Table
        self.table = QtWidgets.QTableWidget(4,3)
        for i in range(0,4):
            for j in range(0,4):
                self.table.setItem(i,j,QtWidgets.QTableWidgetItem("a_"+str(i)+str(j)))

        self.setCentralWidget(self.table)

该类的其余部分应该相同,只是对QApplication进行一次编辑。

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    tb = mtable()
    tb.show()
    sys.exit(app.exec_())

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...