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() 中做一些更花哨的事情。
item的selection/deselection是由mouse-press事件控制的,明显发生在双击被注册之前。所以你需要"eat"在适当的时候按下鼠标。
此示例允许在按下元键时双击:
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_())
我有一个基于 qTreeWidget 的界面,我可以在其中双击各个项目以打开和关闭它们。但是,我希望能够通过选择多个对象并双击它们来批量切换它们,但是当您双击任何项目时,您会立即失去多选。
有人知道解决这个问题的方法吗?
非常感谢您的宝贵时间,
尼克
第一步是设置一个事件,只要双击一个项目就会触发,如下所示:
treeWidget.itemDoubleClicked.connect(onClickItem)
其中 onClickItem 是:
def onClickItem(item):
print('Text of first column in item is ', item.text(0))
当然你会想在 onClickItem() 中做一些更花哨的事情。
item的selection/deselection是由mouse-press事件控制的,明显发生在双击被注册之前。所以你需要"eat"在适当的时候按下鼠标。
此示例允许在按下元键时双击:
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_())