Browse Source

docs(tree): improved typings and docs (#459)

pull/456/head
Pier CeccoPierangioliEugenio 5 months ago committed by GitHub
parent
commit
c8214135d9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      libs/pyTermTk/TermTk/TTkCore/constant.py
  2. 95
      libs/pyTermTk/TermTk/TTkWidgets/TTkModelView/filetree.py
  3. 97
      libs/pyTermTk/TermTk/TTkWidgets/TTkModelView/tree.py
  4. 174
      libs/pyTermTk/TermTk/TTkWidgets/TTkModelView/treewidget.py
  5. 11
      libs/pyTermTk/TermTk/TTkWidgets/TTkModelView/treewidgetitem.py

2
libs/pyTermTk/TermTk/TTkCore/constant.py

@ -231,7 +231,7 @@ class TTkConstant:
# InsertAlphabetically = 0x06
# '''The string is inserted in the alphabetic order in the combobox.'''
class DragDropMode(int):
class DragDropMode(IntEnum):
'''Specifies the Drag and Drop mode allowed by this widget
.. autosummary::

95
libs/pyTermTk/TermTk/TTkWidgets/TTkModelView/filetree.py

@ -22,6 +22,8 @@
__all__ = ['TTkFileTree']
from typing import List,Optional
from TermTk.TTkCore.constant import TTkK
from TermTk.TTkCore.string import TTkString
from TermTk.TTkCore.signal import pyTTkSlot, pyTTkSignal
@ -204,32 +206,46 @@ class TTkFileTree(TTkTree):
:type folder: :py:class:`TTkFileTreeWidgetItem`
'''
return self._fileTreeWidget.folderActivated
def setHeaderLabels(self, labels:TTkString) -> None:
def setHeaderLabels(self, labels:List[TTkString]) -> None:
'''
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.setHeaderLabels`
setHeaderLabels
Adds a column in the header for each item in the labels list, and sets the label for each column.
:param labels: the list of labels
:type labels: List[:py:class:`TTkString`]
'''
return self._fileTreeWidget.setHeaderLabels(labels=labels)
def setColumnWidth(self, column:int, width: int) -> None:
'''
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.setColumnWidth`
setColumnWidth
Set the width of the column requested
:param column: the column position
:type column: int
:rtype: int
'''
return self._fileTreeWidget.setColumnWidth(column=column, width=width)
def resizeColumnToContents(self, column:int) -> None:
'''
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.resizeColumnToContents`
resizeColumnToContents
rwsize the width of the column requestedto its content
:param column: the column position
:type column: int
'''
return self._fileTreeWidget.resizeColumnToContents(column=column)
def sortColumn(self):
def sortColumn(self) -> int:
'''
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.sortColumn`
Returns the column used to sort the contents of the widget.
-1 in case no column sort is used
:rtype: int
'''
return self._fileTreeWidget.sortColumn()
def sortItems(self, col:int, order:TTkK.SortOrder) -> None:
@ -237,16 +253,21 @@ class TTkFileTree(TTkTree):
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.sortItems`
Sorts the items in the widget in the specified order by the values in the given column.
:param col: the column used as reference for the sorting
:type col: int
:param order: the sorting order
:type order: :py:class:`TTkK.SortOrder`
'''
return self._fileTreeWidget.sortItems(col=col, order=order)
def dragDropMode(self):
def dragDropMode(self) -> TTkK.DragDropMode:
'''
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.dragDropMode`
dragDropMode
'''
return self._fileTreeWidget.dragDropMode()
def setDragDropMode(self, dndMode):
def setDragDropMode(self, dndMode:TTkK.DragDropMode):
'''
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.setDragDropMode`
@ -258,7 +279,7 @@ class TTkFileTree(TTkTree):
'''
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.expandAll`
expandAll
Expands all expandable items.
'''
return self._fileTreeWidget.expandAll()
@pyTTkSlot()
@ -266,56 +287,90 @@ class TTkFileTree(TTkTree):
'''
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.collapseAll`
collapseAll
Collapse all collapsable items.
'''
return self._fileTreeWidget.collapseAll()
def invisibleRootItem(self) -> TTkTreeWidgetItem:
'''
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.invisibleRootItem`
Returns the tree widget's invisible root item.
The invisible root item provides access to the tree widget's top-level items through the :py:class:`TTkTreeWidgetItem` API,
making it possible to write functions that can treat top-level items and their children in a uniform way;
for example, recursive functions.
:return: the root Item
:rtype: :py:class:`TTkTreeWidgetItem`
'''
return self._fileTreeWidget.invisibleRootItem()
def addTopLevelItem(self, item:TTkTreeWidgetItem) -> None:
'''
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.addTopLevelItem`
addTopLevelItem
Appends the item as a top-level item in the widget.
:param item: the item to be added.
:type item: :py:class:`TTkTreeWidgetItem`
'''
return self._fileTreeWidget.addTopLevelItem(item=item)
def addTopLevelItems(self, items:TTkTreeWidgetItem) -> None:
def addTopLevelItems(self, items:List[TTkTreeWidgetItem]) -> None:
'''
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.addTopLevelItems`
addTopLevelItems
Appends the list of items as a top-level items in the widget.
:param item: the item to be added.
:type item: List[:py:class:`TTkTreeWidgetItem`]
'''
return self._fileTreeWidget.addTopLevelItems(items=items)
def takeTopLevelItem(self, index) -> None:
def takeTopLevelItem(self, index:int) -> Optional[TTkTreeWidgetItem]:
'''
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.takeTopLevelItem`
takeTopLevelItem
Removes the top-level item at the given index in the tree and returns it, otherwise returns None;
:param index: the index of the item
:type index: int
:rtype: Optional[:py:class:`TTkTreeWidgetItem`]
'''
return self._fileTreeWidget.takeTopLevelItem(index=index)
def topLevelItem(self, index) -> TTkTreeWidgetItem:
def topLevelItem(self, index) -> Optional[TTkTreeWidgetItem]:
'''
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.topLevelItem`
topLevelItem
Returns the top level item at the given index, or None if the item does not exist.
:param index: the index of the item
:type index: int
:rtype: Optional[:py:class:`TTkTreeWidgetItem`]
'''
return self._fileTreeWidget.topLevelItem(index=index)
def indexOfTopLevelItem(self, item:TTkTreeWidgetItem) -> int:
'''
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.indexOfTopLevelItem`
indexOfTopLevelItem
Returns the index of the given top-level item, or -1 if the item cannot be found.
:rtype: int
'''
return self._fileTreeWidget.indexOfTopLevelItem(item=item)
def selectedItems(self) -> list[TTkTreeWidgetItem]:
def selectedItems(self) -> List[TTkTreeWidgetItem]:
'''
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.selectedItems`
selectedItems
Returns a list of all selected non-hidden items.
:rtype: List[:py:class:`TTkTreeWidgetItem`]
'''
return self._fileTreeWidget.selectedItems()
def clear(self) -> None:
'''
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.clear`
clear
Clears the tree widget by removing all of its items and selections.
'''
return self._fileTreeWidget.clear()
def openPath(self, path):

97
libs/pyTermTk/TermTk/TTkWidgets/TTkModelView/tree.py

@ -22,12 +22,15 @@
__all__ = ['TTkTree']
from typing import List,Optional
from TermTk.TTkCore.constant import TTkK
from TermTk.TTkCore.string import TTkString
from TermTk.TTkCore.signal import pyTTkSignal, pyTTkSlot
from TermTk.TTkWidgets.TTkModelView.treewidget import TTkTreeWidget
from TermTk.TTkWidgets.TTkModelView.treewidgetitem import TTkTreeWidgetItem
from TermTk.TTkAbstract.abstractscrollarea import TTkAbstractScrollArea, _ForwardData
class TTkTree(TTkAbstractScrollArea):
__doc__ = '''
:py:class:`TTkTree` is a container widget which place :py:class:`TTkTreeWidget` in a scrolling area with on-demand scroll bars.
@ -45,6 +48,7 @@ class TTkTree(TTkAbstractScrollArea):
'sortColumn', 'sortItems',
'dragDropMode', 'setDragDropMode',
'expandAll', 'collapseAll',
'invisibleRootItem',
# 'appendItem', 'setAlignment', 'setColumnColors', 'setColumnSize', 'setHeader',
'addTopLevelItem', 'addTopLevelItems', 'takeTopLevelItem', 'topLevelItem', 'indexOfTopLevelItem', 'selectedItems', 'clear']
)
@ -145,32 +149,46 @@ class TTkTree(TTkAbstractScrollArea):
:type col: int
'''
return self._treeView.itemDoubleClicked
def setHeaderLabels(self, labels:TTkString) -> None:
def setHeaderLabels(self, labels:List[TTkString]) -> None:
'''
.. seealso:: this method is forwarded to :py:meth:`TTkTreeWidget.setHeaderLabels`
setHeaderLabels
Adds a column in the header for each item in the labels list, and sets the label for each column.
:param labels: the list of labels
:type labels: List[:py:class:`TTkString`]
'''
return self._treeView.setHeaderLabels(labels=labels)
def setColumnWidth(self, column:int, width: int) -> None:
'''
.. seealso:: this method is forwarded to :py:meth:`TTkTreeWidget.setColumnWidth`
setColumnWidth
Set the width of the column requested
:param column: the column position
:type column: int
:rtype: int
'''
return self._treeView.setColumnWidth(column=column, width=width)
def resizeColumnToContents(self, column:int) -> None:
'''
.. seealso:: this method is forwarded to :py:meth:`TTkTreeWidget.resizeColumnToContents`
resizeColumnToContents
rwsize the width of the column requestedto its content
:param column: the column position
:type column: int
'''
return self._treeView.resizeColumnToContents(column=column)
def sortColumn(self):
def sortColumn(self) -> int:
'''
.. seealso:: this method is forwarded to :py:meth:`TTkTreeWidget.sortColumn`
Returns the column used to sort the contents of the widget.
-1 in case no column sort is used
:rtype: int
'''
return self._treeView.sortColumn()
def sortItems(self, col:int, order:TTkK.SortOrder) -> None:
@ -178,16 +196,21 @@ class TTkTree(TTkAbstractScrollArea):
.. seealso:: this method is forwarded to :py:meth:`TTkTreeWidget.sortItems`
Sorts the items in the widget in the specified order by the values in the given column.
:param col: the column used as reference for the sorting
:type col: int
:param order: the sorting order
:type order: :py:class:`TTkK.SortOrder`
'''
return self._treeView.sortItems(col=col, order=order)
def dragDropMode(self):
def dragDropMode(self) -> TTkK.DragDropMode:
'''
.. seealso:: this method is forwarded to :py:meth:`TTkTreeWidget.dragDropMode`
dragDropMode
'''
return self._treeView.dragDropMode()
def setDragDropMode(self, dndMode):
def setDragDropMode(self, dndMode:TTkK.DragDropMode):
'''
.. seealso:: this method is forwarded to :py:meth:`TTkTreeWidget.setDragDropMode`
@ -199,7 +222,7 @@ class TTkTree(TTkAbstractScrollArea):
'''
.. seealso:: this method is forwarded to :py:meth:`TTkTreeWidget.expandAll`
expandAll
Expands all expandable items.
'''
return self._treeView.expandAll()
@pyTTkSlot()
@ -207,56 +230,90 @@ class TTkTree(TTkAbstractScrollArea):
'''
.. seealso:: this method is forwarded to :py:meth:`TTkTreeWidget.collapseAll`
collapseAll
Collapse all collapsable items.
'''
return self._treeView.collapseAll()
def invisibleRootItem(self) -> TTkTreeWidgetItem:
'''
.. seealso:: this method is forwarded to :py:meth:`TTkTreeWidget.invisibleRootItem`
Returns the tree widget's invisible root item.
The invisible root item provides access to the tree widget's top-level items through the :py:class:`TTkTreeWidgetItem` API,
making it possible to write functions that can treat top-level items and their children in a uniform way;
for example, recursive functions.
:return: the root Item
:rtype: :py:class:`TTkTreeWidgetItem`
'''
return self._treeView.invisibleRootItem()
def addTopLevelItem(self, item:TTkTreeWidgetItem) -> None:
'''
.. seealso:: this method is forwarded to :py:meth:`TTkTreeWidget.addTopLevelItem`
addTopLevelItem
Appends the item as a top-level item in the widget.
:param item: the item to be added.
:type item: :py:class:`TTkTreeWidgetItem`
'''
return self._treeView.addTopLevelItem(item=item)
def addTopLevelItems(self, items:TTkTreeWidgetItem) -> None:
def addTopLevelItems(self, items:List[TTkTreeWidgetItem]) -> None:
'''
.. seealso:: this method is forwarded to :py:meth:`TTkTreeWidget.addTopLevelItems`
addTopLevelItems
Appends the list of items as a top-level items in the widget.
:param item: the item to be added.
:type item: List[:py:class:`TTkTreeWidgetItem`]
'''
return self._treeView.addTopLevelItems(items=items)
def takeTopLevelItem(self, index) -> None:
def takeTopLevelItem(self, index:int) -> Optional[TTkTreeWidgetItem]:
'''
.. seealso:: this method is forwarded to :py:meth:`TTkTreeWidget.takeTopLevelItem`
takeTopLevelItem
Removes the top-level item at the given index in the tree and returns it, otherwise returns None;
:param index: the index of the item
:type index: int
:rtype: Optional[:py:class:`TTkTreeWidgetItem`]
'''
return self._treeView.takeTopLevelItem(index=index)
def topLevelItem(self, index) -> TTkTreeWidgetItem:
def topLevelItem(self, index) -> Optional[TTkTreeWidgetItem]:
'''
.. seealso:: this method is forwarded to :py:meth:`TTkTreeWidget.topLevelItem`
topLevelItem
Returns the top level item at the given index, or None if the item does not exist.
:param index: the index of the item
:type index: int
:rtype: Optional[:py:class:`TTkTreeWidgetItem`]
'''
return self._treeView.topLevelItem(index=index)
def indexOfTopLevelItem(self, item:TTkTreeWidgetItem) -> int:
'''
.. seealso:: this method is forwarded to :py:meth:`TTkTreeWidget.indexOfTopLevelItem`
indexOfTopLevelItem
Returns the index of the given top-level item, or -1 if the item cannot be found.
:rtype: int
'''
return self._treeView.indexOfTopLevelItem(item=item)
def selectedItems(self) -> list[TTkTreeWidgetItem]:
def selectedItems(self) -> List[TTkTreeWidgetItem]:
'''
.. seealso:: this method is forwarded to :py:meth:`TTkTreeWidget.selectedItems`
selectedItems
Returns a list of all selected non-hidden items.
:rtype: List[:py:class:`TTkTreeWidgetItem`]
'''
return self._treeView.selectedItems()
def clear(self) -> None:
'''
.. seealso:: this method is forwarded to :py:meth:`TTkTreeWidget.clear`
clear
Clears the tree widget by removing all of its items and selections.
'''
return self._treeView.clear()
#--FORWARD-AUTOGEN-END--#

174
libs/pyTermTk/TermTk/TTkWidgets/TTkModelView/treewidget.py

@ -239,14 +239,14 @@ class TTkTreeWidget(TTkAbstractScrollView):
items: List[TTkAbstractItemModel]
def __init__(self, *,
header=None,
sortingEnabled=True,
header:List[TTkString]=[],
sortingEnabled:bool=True,
selectionMode:TTkK.SelectionMode=TTkK.SelectionMode.SingleSelection,
dragDropMode:TTkK.DragDropMode=TTkK.DragDropMode.NoDragDrop,
**kwargs) -> None:
'''
:param header: define the header labels of each column, defaults to []
:type header: list[TTkString], optional
:type header: List[:py:class:`TTkString`], optional
:param sortingEnabled: enable the column sorting, defaults to False
:type sortingEnabled: bool, optional
:param selectionMode: This property controls whether the user can select one or many items, defaults to :py:class:`TTkK.SelectionMode.SingleSelection`.
@ -297,8 +297,23 @@ class TTkTreeWidget(TTkAbstractScrollView):
# TTkLog.debug(f"{w=} {h=}")
return w,h
def invisibleRootItem(self) -> TTkTreeWidgetItem:
'''
Returns the tree widget's invisible root item.
The invisible root item provides access to the tree widget's top-level items through the :py:class:`TTkTreeWidgetItem` API,
making it possible to write functions that can treat top-level items and their children in a uniform way;
for example, recursive functions.
:return: the root Item
:rtype: :py:class:`TTkTreeWidgetItem`
'''
return self._rootItem
def clear(self) -> None:
'''clear'''
'''
Clears the tree widget by removing all of its items and selections.
'''
# Remove all the widgets
if self._rootItem:
self._rootItem.dataChanged.disconnect(self._refreshCache)
@ -309,77 +324,153 @@ class TTkTreeWidget(TTkAbstractScrollView):
self.update()
def addTopLevelItem(self, item:TTkTreeWidgetItem) -> None:
'''addTopLevelItem'''
'''
Appends the item as a top-level item in the widget.
:param item: the item to be added.
:type item: :py:class:`TTkTreeWidgetItem`
'''
self._rootItem.addChild(item)
self.viewChanged.emit()
self.update()
def addTopLevelItems(self, items:TTkTreeWidgetItem) -> None:
'''addTopLevelItems'''
def addTopLevelItems(self, items:List[TTkTreeWidgetItem]) -> None:
'''
Appends the list of items as a top-level items in the widget.
:param item: the item to be added.
:type item: List[:py:class:`TTkTreeWidgetItem`]
'''
self._rootItem.addChildren(items)
self.viewChanged.emit()
self.update()
def takeTopLevelItem(self, index) -> None:
'''takeTopLevelItem'''
self._rootItem.takeChild(index)
def takeTopLevelItem(self, index:int) -> Optional[TTkTreeWidgetItem]:
'''
Removes the top-level item at the given index in the tree and returns it, otherwise returns None;
:param index: the index of the item
:type index: int
:rtype: Optional[:py:class:`TTkTreeWidgetItem`]
'''
ret = self._rootItem.takeChild(index)
self.viewChanged.emit()
self.update()
return ret
def topLevelItem(self, index) -> Optional[TTkTreeWidgetItem]:
'''
Returns the top level item at the given index, or None if the item does not exist.
def topLevelItem(self, index) -> TTkTreeWidgetItem:
'''topLevelItem'''
:param index: the index of the item
:type index: int
:rtype: Optional[:py:class:`TTkTreeWidgetItem`]
'''
return self._rootItem.child(index)
def indexOfTopLevelItem(self, item:TTkTreeWidgetItem) -> int:
'''indexOfTopLevelItem'''
'''
Returns the index of the given top-level item, or -1 if the item cannot be found.
:rtype: int
'''
return self._rootItem.indexOfChild(item)
def selectionMode(self) -> TTkK.SelectionMode:
'''selectionMode'''
'''
selectionMode
:rtype: :py:class:`TTkK.SelectionMode`
'''
return self._selectionMode
def setSelectionMode(self, mode:TTkK.SelectionMode) -> None:
'''setSelectionMode'''
'''
Sets the current selection model to the given selectionModel.
:param mode: the selection mode used in this tree
:type mode: :py:class:`TTkK.SelectionMode`
'''
self._selectionMode = mode
def selectedItems(self) -> list[TTkTreeWidgetItem]:
'''selectedItems'''
def selectedItems(self) -> List[TTkTreeWidgetItem]:
'''
Returns a list of all selected non-hidden items.
:rtype: List[:py:class:`TTkTreeWidgetItem`]
'''
if self._selected:
return self._selected
return None
def setHeaderLabels(self, labels:TTkString) -> None:
'''setHeaderLabels'''
def setHeaderLabels(self, labels:List[TTkString]) -> None:
'''
Adds a column in the header for each item in the labels list, and sets the label for each column.
:param labels: the list of labels
:type labels: List[:py:class:`TTkString`]
'''
self._header = labels
# Set 20 as default column size
self._columnsPos = [20+x*20 for x in range(len(labels))]
self.viewChanged.emit()
self.update()
def dragDropMode(self):
def dragDropMode(self) -> TTkK.DragDropMode:
'''dragDropMode'''
return self._dndMode
def setDragDropMode(self, dndMode):
def setDragDropMode(self, dndMode:TTkK.DragDropMode):
'''setDragDropMode'''
self._dndMode = dndMode
def isSortingEnabled(self) -> bool:
'isSortingEnabled'
'''
This property holds whether sorting is enabled
If this property is true, sorting is enabled for the tree;
if the property is false, sorting is not enabled.
The default value is false.
:rtype: bool
'''
return self._sortingEnabled
def setSortingEnabled(self, enabled) -> None:
'setSortingEnabled'
def setSortingEnabled(self, enabled:bool) -> None:
'''
This property holds whether sorting is enabled
If this property is true, sorting is enabled for the tree;
if the property is false, sorting is not enabled.
The default value is false.
:param enabled: the sorting status
:type enabled: bool
'''
if enabled != self._sortingEnabled:
self._sortingEnabled = enabled
self.update()
def sortColumn(self):
'''Returns the column used to sort the contents of the widget.'''
def sortColumn(self) -> int:
'''
Returns the column used to sort the contents of the widget.
-1 in case no column sort is used
:rtype: int
'''
return self._sortColumn
def sortItems(self, col:int, order:TTkK.SortOrder) -> None:
'''Sorts the items in the widget in the specified order by the values in the given column.'''
'''
Sorts the items in the widget in the specified order by the values in the given column.
:param col: the column used as reference for the sorting
:type col: int
:param order: the sorting order
:type order: :py:class:`TTkK.SortOrder`
'''
if not self._sortingEnabled: return
self._sortColumn = col
self._sortOrder = order
@ -389,14 +480,28 @@ class TTkTreeWidget(TTkAbstractScrollView):
self._refreshCache()
def columnWidth(self, column:int) -> int:
'''columnWidth'''
'''
This property hold the width of the column requested
:param column: the column position
:type column: int
:rtype: int
'''
if column==0:
return self._columnsPos[column]
else:
return self._columnsPos[column]-self._columnsPos[column-1]-1
def setColumnWidth(self, column:int, width: int) -> None:
'''setColumnWidth'''
'''
Set the width of the column requested
:param column: the column position
:type column: int
:rtype: int
'''
i = column
newSize = ((1+self._columnsPos[i-1]) if i>0 else 0) + width
oldSize = self._columnsPos[i]
@ -407,14 +512,19 @@ class TTkTreeWidget(TTkAbstractScrollView):
self.update()
def resizeColumnToContents(self, column:int) -> None:
'''resizeColumnToContents'''
'''
rwsize the width of the column requestedto its content
:param column: the column position
:type column: int
'''
_,oy = self.getViewOffsets()
contentSize = self._rootItem._getColumnContentSize(column, oy)
self.setColumnWidth(column, contentSize)
@pyTTkSlot()
def expandAll(self) -> None:
'''expandAll'''
'''Expands all expandable items.'''
if not self._rootItem:
return
self._rootItem.dataChanged.disconnect(self._refreshCache)
@ -424,7 +534,7 @@ class TTkTreeWidget(TTkAbstractScrollView):
@pyTTkSlot()
def collapseAll(self) -> None:
'''collapseAll'''
'''Collapse all collapsable items.'''
if not self._rootItem:
return
self._rootItem.dataChanged.disconnect(self._refreshCache)

11
libs/pyTermTk/TermTk/TTkWidgets/TTkModelView/treewidgetitem.py

@ -475,10 +475,15 @@ class TTkTreeWidgetItem(TTkAbstractItemModel):
return []
return self._children.children()
def indexOfChild(self, child:TTkTreeWidgetItem) -> Optional[int]:
def indexOfChild(self, child:TTkTreeWidgetItem) -> int:
if not self._children:
return None
return self._children.indexOfChild(child)
return -1
try:
return self._children.indexOfChild(child)
except ValueError:
return -1
finally:
return -1
def icon(self, col:int) -> TTkString:
if col >= len(self._icon):

Loading…
Cancel
Save