繁体   English   中英

Pyside QTreeWidget双击多个项目

[英]Pyside QTreeWidget Double-clicking on multiple items

我有一个基于qTreeWidget的界面,我双击各个项目来打开和关闭它们。 但是,我希望能够通过选择多个对象并双击它们来批量切换它们,但是当您双击任何项目时,您会立即失去多项选择。

有没有人知道这方面的方法?

非常感谢你的时间,

缺口

第一步是设置一个双击项目时触发的事件,如下所示:

treeWidget.itemDoubleClicked.connect(onClickItem)

其中onClickItem是:

def onClickItem(item):
    print('Text of first column in item is ', item.text(0))

当然,你想在onClickItem()中做一些更有趣的事情。

项目的选择/取消选择由鼠标按下事件控制,这显然发生在双击注册之前。 所以你需要在适当的时候“吃掉”鼠标按下。

此示例允许在按下元键时双击:

from PySide import QtGui, QtCore

class Window(QtGui.QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.tree = QtGui.QTreeWidget(self)
        for text in 'One Two Three Four'.split():
            parent = QtGui.QTreeWidgetItem(self.tree, [text])
            for text in 'Red Blue Green'.split():
                child = QtGui.QTreeWidgetItem(parent, [text])
            parent.setExpanded(True)
        self.tree.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)
        self.tree.viewport().installEventFilter(self)
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.tree)

    def eventFilter(self, source, event):
        if (source is self.tree.viewport() and
            isinstance(event, QtGui.QMouseEvent) and
            event.modifiers() == QtCore.Qt.MetaModifier):
            if event.type() == QtCore.QEvent.MouseButtonDblClick:
                print('meta-double-click')
                return True
            if event.type() == QtCore.QEvent.MouseButtonPress:
                # kill selection when meta-key is also pressed
                return True
        return super(Window, self).eventFilter(source, event)

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.setGeometry(800, 300, 300, 300)
    window.show()
    sys.exit(app.exec_())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM