PyQt5学习笔记8_QTableView中回车进入下一单元格

10 篇文章 4 订阅

帮同事实现一个在表格的输入过程中,敲入回车后自动进入下一单元格编辑状态的需求。在setData中发送信号并将下一单元格的坐标进行传递。代码如下:

import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow, QTableView)
from PyQt5.QtCore import (QAbstractTableModel, QModelIndex, Qt, QVariant, pyqtSignal)

class MyModel(QAbstractTableModel):
    editNext = pyqtSignal(QModelIndex)
    m_gridData = [([''] * 3) for i in range(2)]

    def __init__(self, parent=None):
        super(MyModel,self).__init__(parent)

    def rowCount(self, parent=QModelIndex()):
        return 2

    def columnCount(self, parent=QModelIndex()):
        return 3

    def data(self, index, role):
        if role == Qt.DisplayRole:
            return self.m_gridData[index.row()][index.column()]
        return QVariant()

    def setData(self, index, value, role):
        if role == Qt.EditRole:
            self.m_gridData[index.row()][index.column()] = value
        tmp = index.sibling(index.row(), index.column()+1)
        if tmp.isValid():
            self.editNext.emit(tmp)
        return True

    def flags(self, index):
        return Qt.ItemIsSelectable | Qt.ItemIsEditable | Qt.ItemIsEnabled

class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        tableView = QTableView()
        self.setCentralWidget(tableView)
        myModel = MyModel()
        tableView.setModel(myModel)
        # https://stackoverflow.com/questions/20267176/qtableviewedit-const-qmodelindex-index-failed
        myModel.editNext.connect(tableView.edit, Qt.QueuedConnection)

if __name__ == '__main__':
    a = QApplication(sys.argv)
    w = MainWindow()
    w.show()
    a.exec_()
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值