TableView的按键事件有问题

2024-09-30 16:39:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有TableView的表单和一个处理刷新按钮的函数,用于添加和删除表中的数据等

我想更新contextmenu中操作的状态: 我可以使用鼠标事件(tableWidget.clicked)但不能使用按键事件(向上和向下) 我尝试使用TableKeyPressEvent事件,但由于某些原因,这些键不再工作。 例如,如何截取表的上下键以更新按钮

下面是代码摘录:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt, QModelIndex, QVariant, QAbstractItemModel, QEvent
from PyQt5.QtGui import QFont, QKeyEvent
import numpy as np
from modules import *

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.setObjectName("MainWindow")

        self.setMinimumSize(QtCore.QSize(1024, 860))
        self.setMaximumSize(QtCore.QSize(2400, 1024))
        self.setStyleSheet("background-color: rgb(240, 240, 240);")
        self.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly)
        self.centralWidget = QtWidgets.QWidget(self)
        self.gridLayout = QtWidgets.QGridLayout(self.centralWidget)

        self.setCentralWidget(self.centralWidget)

        self.retranslateUi()
        self.connectActions()

        self.tableWidget.customContextMenuRequested.connect(self.context_menu_Show)

    def bpuHadChanged(self, changed=False):
        self.bpuChanged = changed
        self.actionSave.setEnabled(changed)

    def saveFile(self):
        # TODO
        self.actionSave.setEnabled(False)

    def setBPU(self, bpu):
        self.bpu = bpu
        self.model = TableModel(self.bpu, bpuNewLine)
        self.tableWidget.setModel(self.model)
        self.tableWidget.resizeColumnToContents(0)
        self.updateActionsStates()

    def connectActions(self):
        self.actionNew.triggered.connect(self.newFile)
        self.actionQuit.triggered.connect(self.quit)
        self.actionAdd_une_ligne_bordereau.triggered.connect(self.addLine)
        self.actionRemoveSelectedLine.triggered.connect(self.RemoveLigne)
        self.actionInsertLine.triggered.connect(self.insertLine)
        self.actionSave.triggered.connect(self.saveFile)

        self.tableWidget.clicked.connect(self.updateActionsStates)

        # TODO add connections for up et down actions

    def context_menu_Show(self):
        self.updateActionsStates()
        cursor = QtGui.QCursor()
        self.contextMenu.exec_(cursor.pos())
        pass


if __name__ == "__main__":

    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.setBPU(bpu)
    window.show()
    app.exec_()