Created
November 11, 2015 19:43
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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