Merge pull request #706 from MikeTheWatchGuy/Dev-latest

Trees!  The beginnings of the Tree Element... even has "icons" this time
This commit is contained in:
MikeTheWatchGuy 2018-11-11 17:32:16 -05:00 committed by GitHub
commit d592ac18cf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 53 additions and 10 deletions

View File

@ -9,10 +9,10 @@ import calendar
from PySide2.QtWidgets import QApplication, QLabel, QWidget, QLineEdit, QComboBox, QFormLayout, QVBoxLayout, \ from PySide2.QtWidgets import QApplication, QLabel, QWidget, QLineEdit, QComboBox, QFormLayout, QVBoxLayout, \
QHBoxLayout, QListWidget, QDial, QTableWidget QHBoxLayout, QListWidget, QDial, QTableWidget
from PySide2.QtWidgets import QSlider, QCheckBox, QRadioButton, QSpinBox, QPushButton, QTextEdit, QMainWindow, QDialog, QAbstractItemView from PySide2.QtWidgets import QSlider, QCheckBox, QRadioButton, QSpinBox, QPushButton, QTextEdit, QMainWindow, QDialog, QAbstractItemView
from PySide2.QtWidgets import QSpacerItem, QFrame, QGroupBox, QTextBrowser, QPlainTextEdit, QButtonGroup, QFileDialog, QTableWidget, QTabWidget, QTabBar from PySide2.QtWidgets import QSpacerItem, QFrame, QGroupBox, QTextBrowser, QPlainTextEdit, QButtonGroup, QFileDialog, QTableWidget, QTabWidget, QTabBar, QTreeWidget, QTreeWidgetItem
# from PySide2.QtWidgets import # from PySide2.QtWidgets import
from PySide2.QtWidgets import QTableWidgetItem, QGraphicsView, QGraphicsScene, QGraphicsItemGroup from PySide2.QtWidgets import QTableWidgetItem, QGraphicsView, QGraphicsScene, QGraphicsItemGroup
from PySide2.QtGui import QPainter, QPixmap, QPen, QColor, QBrush, QPainterPath, QFont, QImage from PySide2.QtGui import QPainter, QPixmap, QPen, QColor, QBrush, QPainterPath, QFont, QImage, QIcon
from PySide2.QtCore import Qt,QProcess, QEvent from PySide2.QtCore import Qt,QProcess, QEvent
import PySide2.QtGui as QtGui import PySide2.QtGui as QtGui
import PySide2.QtCore as QtCore import PySide2.QtCore as QtCore
@ -2352,7 +2352,7 @@ class Table(Element):
class Tree(Element): class Tree(Element):
def __init__(self, data=None, headings=None, visible_column_map=None, col_widths=None, col0_width=10, def __init__(self, data=None, headings=None, visible_column_map=None, col_widths=None, col0_width=10,
def_col_width=10, auto_size_columns=True, max_col_width=20, select_mode=None, show_expanded=False, def_col_width=10, auto_size_columns=True, max_col_width=20, select_mode=None, show_expanded=False,
change_submits=False, font=None, change_submits=False, font=None, size=(200,600),
justification='right', text_color=None, background_color=None, num_rows=None, pad=None, key=None, justification='right', text_color=None, background_color=None, num_rows=None, pad=None, key=None,
tooltip=None): tooltip=None):
''' '''
@ -2391,9 +2391,10 @@ class Tree(Element):
self.TKTreeview = None self.TKTreeview = None
self.SelectedRows = [] self.SelectedRows = []
self.ChangeSubmits = change_submits self.ChangeSubmits = change_submits
self.Size = size
super().__init__(ELEM_TYPE_TREE, text_color=text_color, background_color=background_color, font=font, pad=pad, super().__init__(ELEM_TYPE_TREE, text_color=text_color, background_color=background_color, font=font, pad=pad,
key=key, tooltip=tooltip) key=key, tooltip=tooltip, size=size)
return return
def treeview_selected(self, event): def treeview_selected(self, event):
@ -2430,26 +2431,27 @@ class Tree(Element):
class TreeData(object): class TreeData(object):
class Node(object): class Node(object):
def __init__(self, parent, key, text, values): def __init__(self, parent, key, text, values, icon):
self.parent = parent self.parent = parent
self.children = [] self.children = []
self.key = key self.key = key
self.text = text self.text = text
self.values = values self.values = values
self.icon = icon
def _Add(self, node): def _Add(self, node):
self.children.append(node) self.children.append(node)
def __init__(self): def __init__(self):
self.tree_dict = {} self.tree_dict = {}
self.root_node = self.Node("", "", 'root', []) self.root_node = self.Node("", "", 'root', [], None)
self.tree_dict[""] = self.root_node self.tree_dict[""] = self.root_node
def _AddNode(self, key, node): def _AddNode(self, key, node):
self.tree_dict[key] = node self.tree_dict[key] = node
def Insert(self, parent, key, text, values): def Insert(self, parent, key, text, values, icon=None):
node = self.Node(parent, key, text, values) node = self.Node(parent, key, text, values, icon)
self.tree_dict[key] = node self.tree_dict[key] = node
parent_node = self.tree_dict[parent] parent_node = self.tree_dict[parent]
parent_node._Add(node) parent_node._Add(node)
@ -4255,8 +4257,49 @@ def PackFormIntoFrame(window, containing_frame, toplevel_win):
# ------------------------- Tree element ------------------------- # # ------------------------- Tree element ------------------------- #
elif element_type == ELEM_TYPE_TREE: elif element_type == ELEM_TYPE_TREE:
element.QT_QGraphicsLineItem = QtWidgets.QGraphicsLineItem element.QT_QTreeWidget = QTreeWidget()
pass if element_size != (None, None):
element.QT_QTreeWidget.setFixedWidth(element_size[0])
element.QT_QTreeWidget.setFixedHeight(element_size[1])
height = element.NumRows
if element.ColumnsToDisplay is None: # Which cols to display
displaycolumns = element.ColumnHeadings
else:
displaycolumns = []
for i, should_display in enumerate(element.ColumnsToDisplay):
if should_display:
displaycolumns.append(element.ColumnHeadings[i])
column_headings = element.ColumnHeadings
# ------------- GET THE TREEVIEW WIDGET -------------
for i, heading in enumerate(element.ColumnHeadings): # Configure cols + headings
# QTree.heading(heading, text=heading)
if element.AutoSizeColumns:
width = min(element.MaxColumnWidth, len(heading) + 1)
else:
try:
width = element.ColumnWidths[i]
except:
width = element.DefaultColumnWidth
# treeview.column(heading, width=width * CharWidthInPixels(), anchor=anchor)
def add_treeview_data(node, widget):
# print(f'Inserting {node.key} under parent {node.parent}')
child = QTreeWidgetItem(widget)
if node.key != '':
child.setText(0, str(node.text))
# child.setData(0,0,node.values)
if node.icon is not None:
qicon = QIcon(node.icon)
child.setIcon(0, qicon)
for node in node.children:
add_treeview_data(node, child)
element.TreeData.root_node
add_treeview_data(element.TreeData.root_node, element.QT_QTreeWidget)
qt_row_layout.addWidget(element.QT_QTreeWidget)
# ------------------------- Separator element ------------------------- # # ------------------------- Separator element ------------------------- #
elif element_type == ELEM_TYPE_SEPARATOR: elif element_type == ELEM_TYPE_SEPARATOR:
pass pass