如何解决在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_())
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。