Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save JokerMartini/a5d201b9bd505ea627c2 to your computer and use it in GitHub Desktop.
Save JokerMartini/a5d201b9bd505ea627c2 to your computer and use it in GitHub Desktop.
Pyside Python: returns[0] true if all items selected are the same level in hierarchy tree. returns[1] unique list of all levels containing a item selected. returns[2] select items
#!/bin/env python
# ------------------------------------------------------------------------------
# Imports
# ------------------------------------------------------------------------------
import sys
from PySide import QtCore, QtGui
# ------------------------------------------------------------------------------
# Open UI
# ------------------------------------------------------------------------------
def openUI():
'''
Open UI.
'''
app = QtGui.QApplication(sys.argv)
ex = UI()
ex.show()
sys.exit(app.exec_())
# ------------------------------------------------------------------------------
# UI
# ------------------------------------------------------------------------------
class UI(QtGui.QMainWindow):
def __init__( self, parent=None ):
## Init:
super(UI, self).__init__( parent )
# ----------------
# Create Simple UI with QTreeWidget
# ----------------
self.centralwidget = QtGui.QWidget(self)
self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget)
self.treeWidget = QtGui.QTreeWidget(self.centralwidget)
self.verticalLayout.addWidget(self.treeWidget)
self.setCentralWidget(self.centralwidget)
self.treeWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
self.treeWidget.itemSelectionChanged.connect(self.selectedListItemChanged)
# ----------------
# Set TreeWidget Headers
# ----------------
self.treeWidget.setColumnCount( 1 )
self.treeWidget.setHeaderLabels([ "column 1" ])
# ----------------
# Add Custom QTreeWidgetItem
# ----------------
## Add Items:
for name in [ 'rock', 'paper', 'scissors' ]:
item = CustomTreeItem( self.treeWidget, name )
CustomTreeItem( item, "paper" )
CustomTreeItem( item, "paper" )
CustomTreeItem( item, "paper" )
CustomTreeItem( item, "paper" )
## Set Columns Width to match content:
for column in range( self.treeWidget.columnCount() ):
self.treeWidget.resizeColumnToContents( column )
def get_treewidget_selection_level(self, ctrl):
items = ctrl.selectedItems()
levels = set()
for item in items:
level = 0
index = ctrl.indexFromItem(item, 0)
while index.parent().isValid():
index = index.parent()
level += 1
levels.add(level)
if len(levels) == 1:
return ( True, list(levels)[0], items)
else:
return ( False, list(levels), items )
def selectedListItemChanged(self):
state, level, items = self.get_treewidget_selection_level( self.sender())
print state, level, items
# ------------------------------------------------------------------------------
# Custom QTreeWidgetItem
# ------------------------------------------------------------------------------
class CustomTreeItem( QtGui.QTreeWidgetItem ):
'''
Custom QTreeWidgetItem with Widgets
'''
def __init__( self, parent, name ):
'''
parent (QTreeWidget) : Item's QTreeWidget parent.
name (str) : Item's name. just an example.
'''
## Init super class ( QtGui.QTreeWidgetItem )
super( CustomTreeItem, self ).__init__( parent )
## Column 0 - Text:
self.setText( 0, name )
# ------------------------------------------------------------------------------
# __name__
# ------------------------------------------------------------------------------
if __name__ == '__main__':
openUI()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment