【问题标题】:QTableWidget selecting multiple cells with right mouse buttonQTableWidget 用鼠标右键选择多个单元格
【发布时间】:2016-02-26 05:10:51
【问题描述】:

我有一个简单的 QTableWidget 设置如下:

self.table= QtGui.QTableWidget()
self.table.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
self.table.viewport().installEventFilter(self)
self.table.verticalHeader().setResizeMode(2)
self.table.horizontalHeader().setResizeMode(2)

EventFilter 的反应是:

def eventFilter(self, source, event):
    if event.type() == QtCore.QEvent.MouseButtonRelease:
        if event.button() == QtCore.Qt.LeftButton:
            --- LMB action ---
        if event.button() == QtCore.Qt.RightButton:
            --- RMB action ---
    return QtGui.QWidget.eventFilter(self, source, event)

该事件适用于鼠标左键单击:它同时检测单击和选择多个单元格。我希望能够用鼠标右键做同样的事情——现在它只能识别一个人民币点击,但我不能选择多个单元格。是我搞砸了还是错过了什么?

编辑 1: 我使用了 MarkyPython 建议的self.table.itemEntered.connect(handleItemPressed),现在我有了以下内容:

def eventFilter(self, source, event):

    def handleItemPressed(item):
        self.table.setItemSelected(item, 1)

    if event.type() == QtCore.QEvent.MouseButtonPress:
        if event.button() == QtCore.Qt.RightButton:
            self.table.itemEntered.connect(handleItemPressed)
    if event.type() == QtCore.QEvent.MouseButtonRelease:
        if event.button() == QtCore.Qt.LeftButton:
            --- LMB action ---
        if event.button() == QtCore.Qt.RightButton:
            --- RMB action ---
    return QtGui.QWidget.eventFilter(self, source, event)

这在某种程度上是有效的。我现在可以同时使用鼠标右键和左键选择单元格,但是鼠标右键选择有点尴尬(正如您可以想象的那样,它只选择悬停在上方的项目/单元格,这与左侧的经典框选择不同鼠标按钮)。所以我的问题几乎解决了

【问题讨论】:

    标签: python mouseevent qtablewidget


    【解决方案1】:

    我现在正在开发的程序中有类似的东西。当您按住鼠标选择多个单元格时,您可以使用itemEntered,您可以在鼠标左键单击时使用itemPressed 进行选择。第三行的注释显示了如果您想逐个单元格而不是选择一个单元格来选择可以添加的内容。只是问它是否不起作用。

    self.table= QtGui.QTableWidget()
    self.table.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
    # self.table.setSelectionMode(QtGui.QAbstractItemView.NoSelection)
    self.table.verticalHeader().setResizeMode(2)
    self.table.horizontalHeader().setResizeMode(2)  
    self.table.itemEntered.connect(self.handleItemHovered)  # handleItemHoverd is a function you create to do something when you select multiple cells
    self.table.itemPressed.connect(self.handleItemPressed)  # handleItemPressed is a function you create to determine what to do when you click on the item
    

    【讨论】:

    • 我将 itemEntered 加入到我的代码中,请参阅我编辑的帖子。谢谢你的建议
    • 您应该查看site 以获取有关QTableWidget 类的更多信息。这对我帮助很大。
    猜你喜欢
    • 2012-08-18
    • 2019-12-16
    • 1970-01-01
    • 2013-09-07
    • 2019-01-08
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    相关资源
    最近更新 更多