import sys
from PySide import QtCore, QtGui
class MyTreeWidget(QtGui.QTreeWidget):
def __init__(self):
super().__init__()
self.setHeaderHidden(True)
self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.customContextMenuRequested.connect(self.contextMenuRequested)
self.setDragDropMode(QtGui.QAbstractItemView.InternalMove)
self.setDragEnabled(True)
self.viewport().setAcceptDrops(True)
self.setDropIndicatorShown(True)
def contextMenuRequested(self, pos):
""" コンテキストメニュー
"""
menu = QtGui.QMenu()
item = self.itemAt(pos)
if item:
action = QtGui.QAction('Delete Item', self)
action.triggered.connect(lambda: self.removeItem(item))
menu.addAction(action)
else:
action = QtGui.QAction('New Item', self)
action.triggered.connect(self.createNewItem)
menu.addAction(action)
menu.exec_(self.mapToGlobal(pos))
def createNewItem(self):
""" 新規項目
"""
item = QtGui.QTreeWidgetItem()
item.setText(0, 'Item')
item.setFlags(item.flags() | QtCore.Qt.ItemIsEditable)
self.addTopLevelItem(item)
def removeItem(self, item):
""" 項目削除
"""
parent = item.parent()
if parent:
parent.takeChild(parent.indexOfChild(item))
else:
self.takeTopLevelItem(self.indexOfTopLevelItem(item))
app = QtGui.QApplication(sys.argv)
tr = MyTreeWidget()
tr.show()
sys.exit(app.exec_())