Python Qt: 如何在qtablewidget中捕获“回车”

2 投票
2 回答
4406 浏览
提问于 2025-04-18 08:04

我想在一个 qtablewidget 中捕捉到回车键的按下,以便对当前选中的单元格做点什么。也就是说,当用户在任何高亮的单元格上按下“回车”键时,我希望触发一个新的方法。比如,弹出一个消息框,显示那个单元格的内容。

我该如何把按下回车键的事件连接到一个方法呢?

因为我刚开始学Python,所以对这方面完全不懂,任何建议我都会很感激。

2 个回答

2

这里有一个在QTableWidget中捕捉按键的例子。

我用这个方法实现了一些功能,比如让用户可以选择多行,然后按空格键来设置或重置多行表格中的复选框。

class yourClass(QWidget):
    def __init__(self, parent, **kwargs):
        super().__init__(parent, **kwargs)

        self.mLastKeyState = 0
    
        # construct the table
        self.mPlTable = QTableWidget()
        self.mPlTable.keyPressEvent = self.tableOnKeyPressEvent  # or keyReleaseEvent
    
    def tableOnKeyPressEvent(self, event):
        if event.key() == Qt.Key_Return or event.key() == Qt.Key_Enter
            # do what needs to be done here
            # you can return here if you do not want to pass on the return to the table

        # pass on the keyPressEvent to the table
        QTableWidget.keyPressEvent(self.mPlTable, event) 

3

你的问题有点模糊。“捕捉回车键”是什么意思呢?QTableWidget 有几个方法可以返回信息。

如果你想获取当前单元格的文本,可以简单地这样做:

my_table.currentItem().text()

更新

在你下面的评论中,你提到你希望用户可以按 EnterReturn 键,然后处理当前项目的信息。

为了实现这个功能,你需要创建一个 QTableWidget 的子类,并重写它的 keyPressEvent 方法。部分灵感来自于 这里

class MyTableWidget(QTableWidget):
    def __init__(self, parent=None):
        super(MyTableWidget, self).__init__(parent)

    def keyPressEvent(self, event):
         key = event.key()

         if key == Qt.Key_Return or key == Qt.Key_Enter:
             # Process current item here
         else:
             super(MyTableWidget, self).keyPressEvent(event)

撰写回答