Browse Source

Improved the documentation

pull/137/head
Eugenio Parodi 3 years ago
parent
commit
67586eb024
  1. 79
      TermTk/TTkWidgets/texedit.py
  2. 9
      TermTk/TTkWidgets/widget.py
  3. 7
      demo/showcase/textedit.py
  4. 7
      docs/source/conf.py
  5. 1
      docs/source/index.rst
  6. 53
      tutorial/ttkDesigner/textEdit/README.rst
  7. 6
      tutorial/ttkDesigner/textEdit/textEdit.06.tui.json
  8. 24
      tutorial/ttkDesigner/textEdit/texteditor.01.py
  9. 24
      tutorial/ttkDesigner/textEdit/texteditor.02.py

79
TermTk/TTkWidgets/texedit.py

@ -136,6 +136,7 @@ class TTkTextEditView(TTkAbstractScrollView):
self._updateSize()
def multiLine(self) -> bool :
'''multiline'''
return self._multiLine
@pyTTkSlot(bool)
@ -157,34 +158,41 @@ class TTkTextEditView(TTkAbstractScrollView):
# return ""
def toAnsi(self):
'''toAnsi'''
if self._textDocument:
return self._textDocument.toAnsi()
return ""
def toPlainText(self):
'''toPlainText'''
if self._textDocument:
return self._textDocument.toPlainText()
return ""
def toRawText(self):
'''toRawText'''
if self._textDocument:
return self._textDocument.toRawText()
return TTkString()
def isUndoAvailable(self):
'''isUndoAvailable'''
if self._textDocument:
return self._textDocument.isUndoAvailable()
return False
def isRedoAvailable(self):
'''isRedoAvailable'''
if self._textDocument:
return self._textDocument.isRedoAvailable()
return False
def document(self):
'''document'''
return self._textDocument
def setDocument(self, document):
'''setDocument'''
if self._textDocument:
self._textDocument.contentsChanged.disconnect(self._documentChanged)
self._textDocument.cursorPositionChanged.disconnect(self._cursorPositionChanged)
@ -573,7 +581,76 @@ class TTkTextEditView(TTkAbstractScrollView):
self._pushCursor()
class TTkTextEdit(TTkAbstractScrollArea):
'''TTkTextEdit'''
'''TTkTextEdit
::
0"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor ╥ ║
<incididunt ut labore et dolore magna aliqua.
1
2Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliqu
<ip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
<velit esse cillum dolore eu fugiat nulla pariatur.
3
4Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deseru
<nt mollit anim id est laborum." ╨ ║
Demo: `textedit.py <https://github.com/ceccopierangiolieugenio/pyTermTk/blob/main/demo/showcase/textedit.py>`_
(`Try Online <https://ceccopierangiolieugenio.github.io/pyTermTk/sandbox/sandbox.html?fileUri=https://raw.githubusercontent.com/ceccopierangiolieugenio/pyTermTk/main/demo/showcase/textedit.py>`__)
`ttkdesigner Tutorial <https://github.com/ceccopierangiolieugenio/pyTermTk/blob/main/tutorial/ttkDesigner/textEdit/textEdit.rst>`_
:param lineNumber: Show the line number on the left, defaults to **False**
:type lineNumber: bool, optional
:param readOnly: In a read-only text edit the user can only navigate through the text and select text; modifying the text is not possible, defaults to **True**
:type readOnly: bool, optional
:param multiLine: In a multiline text edit the user can split the text in multiple lines, defaults to **True**
:type multiLine: bool, optional
:param document: If required an external Document can be used in this text editor, this option is useful if multiple editors share the same document as in the `demo <https://ceccopierangiolieugenio.github.io/pyTermTk/sandbox/sandbox.html?fileUri=https://raw.githubusercontent.com/ceccopierangiolieugenio/pyTermTk/main/demo/showcase/textedit.py>`__, defaults to a new Document
:type document: :class:`~TermTk.TermTk.TTkGui.textdocument.TTkTextDocument`, optional
+-----------------------------------------------------------------------------------------------+
| `Signals <https://ceccopierangiolieugenio.github.io/pyTermTk/tutorial/003-signalslots.html>`_ |
+-----------------------------------------------------------------------------------------------+
.. py:method:: currentColorChanged(color)
:signal:
This signal is emitted if the current character color has changed, for example caused by a change of the cursor position.
:param color: the new color
:type color: :class:`~TermTk.TermTk.TTkCore.color.TTkColor`
.. py:method:: undoAvailable(available)
:signal:
This signal is emitted whenever undo operations become available (available is true) or unavailable (available is false).
:param available: the availability of undo
:type available: bool
.. py:method:: redoAvailable(available)
:signal:
This signal is emitted whenever redo operations become available (available is true) or unavailable (available is false).
:param available: the availability of redo
:type available: bool
.. py:method:: textChanged()
:signal:
This signal is emitted whenever the document's content changes; for example, when text is inserted or deleted, or when formatting is applied.
.. py:method:: toAnsi()
'''
__slots__ = (
'_textEditView',
'_lineNumberView', '_lineNumber',

9
TermTk/TTkWidgets/widget.py

@ -570,6 +570,7 @@ class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents):
@pyTTkSlot()
def show(self):
'''show'''
if self._visible: return
self._visible = True
self._canvas.show()
@ -579,6 +580,7 @@ class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents):
@pyTTkSlot()
def hide(self):
'''hide'''
if not self._visible: return
self._visible = False
self._canvas.hide()
@ -586,6 +588,7 @@ class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents):
@pyTTkSlot()
def raiseWidget(self, raiseParent=True):
'''raiseWidget'''
if self._parent is not None and \
self._parent.rootLayout() is not None:
if raiseParent:
@ -594,6 +597,7 @@ class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents):
@pyTTkSlot()
def lowerWidget(self):
'''lowerWidget'''
if self._parent is not None and \
self._parent.rootLayout() is not None:
self._parent.lowerWidget()
@ -601,6 +605,7 @@ class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents):
@pyTTkSlot()
def close(self):
'''close'''
if self._parent is not None and \
self._parent.rootLayout() is not None:
self._parent.rootLayout().removeWidget(self)
@ -611,6 +616,7 @@ class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents):
@pyTTkSlot(bool)
def setVisible(self, visible: bool):
'''setVisible'''
if visible: self.show()
else: self.hide()
@ -639,6 +645,7 @@ class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents):
@pyTTkSlot()
def setFocus(self):
'''setFocus'''
# TTkLog.debug(f"setFocus: {self._name} - {self._focus}")
if self._focus and self == TTkHelper.getFocus(): return
tmp = TTkHelper.getFocus()
@ -683,12 +690,14 @@ class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents):
@pyTTkSlot(bool)
def setEnabled(self, enabled: bool=True):
'''setEnabled'''
if self._enabled == enabled: return
self._enabled = enabled
self.update()
@pyTTkSlot(bool)
def setDisabled(self, disabled=True):
'''setDisabled'''
self.setEnabled(not disabled)
def lookAndFeel(self):

7
demo/showcase/textedit.py

@ -59,9 +59,10 @@ def demoTextEdit(root=None, document=None):
te.setText(ttk.TTkString("Text Edit DEMO\n",ttk.TTkColor.UNDERLINE+ttk.TTkColor.BOLD+ttk.TTkColor.ITALIC))
# Load ANSI input
te.append(ttk.TTkString("ANSI Input Test\n",ttk.TTkColor.UNDERLINE+ttk.TTkColor.BOLD))
with open(os.path.join(os.path.dirname(os.path.abspath(__file__)),'textedit.ANSI.txt')) as f:
te.append(f.read())
if os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)),'textedit.ANSI.txt')):
te.append(ttk.TTkString("ANSI Input Test\n",ttk.TTkColor.UNDERLINE+ttk.TTkColor.BOLD))
with open(os.path.join(os.path.dirname(os.path.abspath(__file__)),'textedit.ANSI.txt')) as f:
te.append(f.read())
# Test Variable sized chars
te.append(ttk.TTkString("Test Variable sized chars\n",ttk.TTkColor.UNDERLINE+ttk.TTkColor.BOLD))

7
docs/source/conf.py

@ -126,14 +126,15 @@ autodocgen_config = {
'write_documented_items_output_file': 'autodocgen_documented_items.txt',
# customize autodoc on a per-module basis
'autodoc_options_decider': {
'TermTk.TTkWidgets': { 'inherited-members':True },
},
'autodoc_options_decider': {},
# choose a different title for specific modules, e.g. the toplevel one
#'module_title_decider': lambda modulename: 'API Reference' if modulename=='TermTk' else modulename,
}
# autodoc_default_options = { 'inherited-members':True }
autodoc_default_options = {}
# Mock pyodide to avoid autogen failure
class pyodideProxy(): pass
moduleInput = type(sys)('pyodideProxy')

1
docs/source/index.rst

@ -49,6 +49,7 @@ Intro
autogen.TermTk/TermTk.TTkTestWidgets.rst
autogen.TermTk/TermTk.TTkTheme.rst
autogen.TermTk/TermTk.TTkTypes.rst
autogen.TermTk/TermTk.TTkUiTools.rst
autogen.TermTk/TermTk.TTkWidgets.rst
autogen.TermTk/TermTk.TTkWidgets.TTkModelView.rst
autogen.TermTk/TermTk.TTkWidgets.TTkPickers.rst

53
tutorial/ttkDesigner/textEdit/README.rst

@ -2,6 +2,20 @@
.. _TermTk: https://github.com/ceccopierangiolieugenio/pyTermTk
.. _ttkDesigner: https://github.com/ceccopierangiolieugenio/pyTermTk/tree/main/ttkDesigner
.. _Widget: https://ceccopierangiolieugenio.github.io/pyTermTk/autogen.TermTk/TermTk.TTkWidgets.widget.html
.. _Textedit: https://ceccopierangiolieugenio.github.io/pyTermTk/autogen.TermTk/TermTk.TTkWidgets.texedit.html
.. _window: https://ceccopierangiolieugenio.github.io/pyTermTk/autogen.TermTk/TermTk.TTkWidgets.window.html
.. _button: https://ceccopierangiolieugenio.github.io/pyTermTk/autogen.TermTk/TermTk.TTkWidgets.button.html
.. _buttons: https://ceccopierangiolieugenio.github.io/pyTermTk/autogen.TermTk/TermTk.TTkWidgets.button.html
.. _layout: https://ceccopierangiolieugenio.github.io/pyTermTk/autogen.TermTk/TermTk.TTkLayouts.html
.. _TTkLayouts: https://ceccopierangiolieugenio.github.io/pyTermTk/autogen.TermTk/TermTk.TTkLayouts.html
.. _TTkLayout: https://ceccopierangiolieugenio.github.io/pyTermTk/autogen.TermTk/TermTk.TTkLayouts.layout.html#ttklayout
.. _TTkHBoxLayout: https://ceccopierangiolieugenio.github.io/pyTermTk/autogen.TermTk/TermTk.TTkLayouts.boxlayout.html#ttkhboxlayout
.. _TTkVBoxLayout: https://ceccopierangiolieugenio.github.io/pyTermTk/autogen.TermTk/TermTk.TTkLayouts.boxlayout.html#ttkvboxlayout
.. _grid: https://ceccopierangiolieugenio.github.io/pyTermTk/autogen.TermTk/TermTk.TTkLayouts.gridlayout.html#ttkgridlayout
.. _TTkGridLayout: https://ceccopierangiolieugenio.github.io/pyTermTk/autogen.TermTk/TermTk.TTkLayouts.gridlayout.html#ttkgridlayout
===================
ttkDesigner_ - Your first TextEditor
===================
@ -10,6 +24,16 @@ ttkDesigner_ - Your first TextEditor
Start a new project
===================
- Create a new Window (**File** -> **New** -> **New Window**)
- Set the window params required:
- Resize
- title
- Name - (This is the unique name that will be used to identify this Widget_)
- Window flags (i.e. Maximize)
- Layout to TTkGridLayout_ (This will allow all the components to be placed in a grid aligned to the content of the window_)
- Add the "Maximize Button" through the Window Flags (I forgot to add this step in the video)
.. raw:: html
<video width="800"
@ -29,6 +53,17 @@ Start a new project
Add The first buttons (Undo,redo - Cut,Copy,Paste)
==================================================
- Define the **Undo**, **Redo** commands
- Drag 2 buttons_ inside the window_ aligning them in the preferred grid_ position
- Define the proper button Text ("**Undo**","**Redo**")
- Choose a proper unique name (This step is not mandatory but useful to identify this Widget_)
- Disable those buttons by default because at the beginning the Text Editor is not going to have any Undo/Redo Buffers (I forgot to add this step in the video)
- Define the **Cut**, **Copy**, **Paste** commands
- Well, try to guess...
.. raw:: html
<video width="800"
@ -43,6 +78,17 @@ Add The first buttons (Undo,redo - Cut,Copy,Paste)
Add the TextEdit widget
=======================
- Drag the TextEdit_ aligning it in the grid_ below any of the buttons_ previously placed
- | Expand the TextEdit_ widget in order to fill the entire area below the buttons_
| Use the rainbow [🟥🟨🟩🩵🟦🦄] button to help identify the different widgets in the main window
- | Force the top grid to a fixed size (3 Chars)
| In order to achieve this it is enough to force the MaxSize of any of the buttons in the top row to 3 Chars
- Check the line number, this will show the line number in the TextEdit_ when used
- Choose a proper unique name (This step is not mandatory but useful to identify this Widget_)
.. raw:: html
<video width="800"
@ -57,6 +103,13 @@ Add the TextEdit widget
Link the Events/Slots for the basic functionalities
===================================================
- | Connect the TextEdit `undo <https://ceccopierangiolieugenio.github.io/pyTermTk/autogen.TermTk/TermTk.TTkWidgets.texedit.html#TermTk.TTkWidgets.texedit.TTkTextEdit.undoAvailable>`__ / `redo <https://ceccopierangiolieugenio.github.io/pyTermTk/autogen.TermTk/TermTk.TTkWidgets.texedit.html#TermTk.TTkWidgets.texedit.TTkTextEdit.redoAvailable>`__ availability signals with the `setEnable <https://ceccopierangiolieugenio.github.io/pyTermTk/autogen.TermTk/TermTk.TTkWidgets.widget.html#TermTk.TTkWidgets.widget.TTkWidget.setEnable>`__ slots of the undo/redo buttons
| This allow the TextEdit to control directly the availability status of the Buttons
- Connect the undo/redo buttons `clicked <https://ceccopierangiolieugenio.github.io/pyTermTk/autogen.TermTk/TermTk.TTkWidgets.button.html#TermTk.TTkWidgets.button.TTkButton.clicked>`__ event to the `undo <https://ceccopierangiolieugenio.github.io/pyTermTk/autogen.TermTk/TermTk.TTkWidgets.texedit.html#TermTk.TTkWidgets.texedit.TTkTextEdit.undo>`__ / `redo <https://ceccopierangiolieugenio.github.io/pyTermTk/autogen.TermTk/TermTk.TTkWidgets.texedit.html#TermTk.TTkWidgets.texedit.TTkTextEdit.redo>`__ slots of the TextEditor
- Same for the `Cut <https://ceccopierangiolieugenio.github.io/pyTermTk/autogen.TermTk/TermTk.TTkWidgets.texedit.html#TermTk.TTkWidgets.texedit.TTkTextEdit.cut>`__, `Copy <https://ceccopierangiolieugenio.github.io/pyTermTk/autogen.TermTk/TermTk.TTkWidgets.texedit.html#TermTk.TTkWidgets.texedit.TTkTextEdit.copy>`__, `Paste <https://ceccopierangiolieugenio.github.io/pyTermTk/autogen.TermTk/TermTk.TTkWidgets.texedit.html#TermTk.TTkWidgets.texedit.TTkTextEdit.paste>`__
.. raw:: html
<video width="800"

6
tutorial/ttkDesigner/textEdit/textEdit.06.tui.json

@ -28,7 +28,7 @@
"ToolTip": "\u001b[0m",
"Border": true,
"Title": "\u001b[0m\u001b[0mMr Text editor \ud83d\ude0e\u001b[0m",
"Window Flags": 134217728
"Window Flags": 134250496
},
"layout": {
"class": "TTkGridLayout",
@ -65,7 +65,7 @@
],
"Layout": "TTkLayout",
"Visible": true,
"Enabled": true,
"Enabled": false,
"ToolTip": "\u001b[0m",
"Text": "\u001b[0m\u001b[0mUndo\u001b[0m",
"Border": true,
@ -113,7 +113,7 @@
],
"Layout": "TTkLayout",
"Visible": true,
"Enabled": true,
"Enabled": false,
"ToolTip": "\u001b[0m",
"Text": "\u001b[0m\u001b[0mRedo\u001b[0m",
"Border": true,

24
tutorial/ttkDesigner/textEdit/texteditor.01.py

@ -2,18 +2,18 @@ from TermTk import TTkUtil, TTkUiLoader, TTk
# Data generated using ttkDesigner
widget = TTkUiLoader.loadDict(TTkUtil.base64_deflate_2_obj(
"eJytVltvG0UUXtvrXV96yYVSICBWCKkOEpaDUAlqXhLTGNi6tRJDhao8bHZHPqOud63d2dAgVUI8OdWIBxgU3ipA8MAv4Inf1J/Amdn1NQmKq3pleWe+M2e+75vL8ff6" +
"L99UNPV5KmrcPCJRTMNA8OJGvVFvCF5gCRUSKrq+E8eCl7vdxw9p4IXfCm4MnMjpxwrX7zt9IvhVxLrkCbvrURZGgpc6YUyZTHkgarZu5wnX9+l3RDW/sG8QXm7TwHpI" +
"PQbCzvOKbH1OaA+YsHUEnScZ2M4vIYrNDG3rS9zsOJ5Hg57KVrBz8iHcuOcchwlDMsi1FVFv1Da/pjE99IkYcvNu4OCbJ1+7Yeh36UBwfe1Ro4+ydsLIIxFCxS5lGM4t" +
"CchvO7KkOosoeZb14vmvP6aDrqSmWLu+04vFl2hoKeGGn86MBkERXgfzKTrSImGfsOgYKWv4tOxlJmJecoH6XkSUUSpeWb2TMIbmyZE1KHNzhwVf4TwCqlLyiq0RuCrf" +
"KnaBwHXbgCW7AMs4fU6DFXxdPcim0WToDZUzswNuDuGNIbwJb3FdihJ8aSRTTqFkwdqQl5tA3MfSLXHCTdVA304SeDeV9aEkB++l0yAPVAPvH4iEFyLcJLbGC27oC7vA" +
"TWzHAycQdo6b2Je9J2maW9Ma98hY49tjjdXzNKY/czKR01gc1Ce6ZNqRLmicwMYFKqoTFXDb1uATW4dNOwefnmVrINumdFORvTW/IMWFyV4fkcWsl+FaOcO1eBFX6Wwz" +
"HBxnZDdeobMy7cs5a1zEtoRsO07MSEZ3a56uuTDd5RFdlffl+JqzfPkqnqhd6pP0pHYono5o5rw+GOChTiVoYwlGKkFPJaAJi9n94vnPP8zS53rHwVuS5+p4zzWdgbpz" +
"eVUysz6jjh/2sB9bDG94vBm3fd+SWGzVPljHuG3XJQNmtUOPyCNbVuPSVu58Z4wzzmhzK9mbdmHfORotpPHqXPjp31kXIIAQBrOyIZqXCwx5JrZ2WWG5uSV/DZe8Gfph" +
"dO6al9QpQzSTe2Vebn4hufgdr3ExzcuvrT36ePPOR3ca+Nze7IvLCsnPCamikFG1nvCf9GSbtpDxb9nXJH8N+Wv/e+4mlaV6jwbEup/0D1VBLe8Rx7MeBP4x1pJKO/EZ" +
"tWSEGEqKualNVEpIkvCqGwYBceVmjrPCyI2YBLI8wykvRcQl9Eg21rGf9gLHF3w1wfK1feRQXxat2iGWd9zieuyHssbFhGW1P0OUF7/BKfwOW/AHX43I2dHwJ/yVxa1j" +
"3CnGlV1frrtXkyg35Jy1cbKtNAj+lpBMOIFaU1DRTdgE2Zse5OKFOoEOpiBzIC+v2gzxZ0joHTeJ8P8DU3ukCU7QQ3KjnapIrqB21ZrqzpI8y1TddGX3PvHR9MWHwz8Y" +
"VsGw3dBNYkmRJPX/AFIIXtE="))
"eJytVltvG0UUXtvrXV96yYVSICBWFVIdJCwHoRLUvCSmMXTr1koMFarysNkd+Yy63rV2Z0ODVKniyalGPMCg8FYBggd+AU/8pv4Ezsyur0lQEuGV5T3znTnzfd/c/EL/" +
"+ZuKpj7PRY2bBySKaRgIXlyrN+oNwQssoUJCRdd34ljwcrf79DENvPBbwY2BEzn9WOH6Q6dPBL+KWJc8Y/c8ysJI8FInjCmTJfdEzdbtPOH6Lv2OqPBL+wbh5TYNrMfU" +
"YyDsPK/I6AtCe8CErSPoPMvAdn4BUQwztK0vcLPjeB4Neqpawc7Jh3DjgXMYJgzJINdWRL1RbH5NY7rvEzHk5r3AwTdPvnbD0O/SgeD6ypNGH2VthZFHIoSKXcownVsS" +
"kN92ZEl1FlHyLOv1q19+SDtdSU2xtn2nF4v72gutlHDDT0dGg6AIb4L5HB1pkbBPWHSIlDV8WvYiEzEvuUB9LyLKKJWvrN5KGEPzZM8alLm5xYKvcBwBVSl5ydYIXJVv" +
"FbtA4LptwIJdgMX7mpbTYAlfl/eyYTSZekPVzOyAm0N46wjehne4LkUJvjCSKYdQsmBlyMtNIO5T6ZY44qYK0LejBN5PZX0kycGtdBjkgWrggz2R8EKEi8TWeMENfWEX" +
"uIlxPHACYee4iW3Ze5KWuT2tcYeMNb471lg9TWP6MycTOY3FQX2iS5Yd6YLGEaydoaI6UQF3bA0+tXVYt3Pw2Um2BrJtSjcV2dvzE1I8N9lhRvb6iCxWPQ/XygmuxbO4" +
"Smeb4eAwI7t2eWeH887Kspdz1jiLbQnZdpyYkYzuxjxd88J0F0d0Vd3L8TVn+fJl3FHb1CfpTu1Q3B3RzH59NMBNnUrQxhKMVIKeSkATLmb361c/fT9Ln+sdB09Jnqvj" +
"Odd0BurM5VXJzPqcOn7Yw3aMGJ7weDJu+r4lsdiqfbiKeZuuSwbMaocekVu2rPqlUe50Z4wTzmhzM9mbdmHXORhNpPH/ufDjP7MuQAAhDGZlQzQvFxjyTGztvMJyc1P+" +
"Bk55M/TD6NQ5L6ldhmgm98q83PyF5OJ3PMfFtC6/tvLkk/W7H99t4HNnvS/OKyQ/J6SKQka39YT/pCVbtIWMf8u+JvlryF/7z303ps+rD2hArIdJf19dqOUd4njWo8A/" +
"xLuk0k58Ri2ZIYaSYm5qEZUSkiS86oZBQFy5mOPsYuRGTAJ5PcMxL0XEJfRABqvYTnuB4wu+nOD1tXngUF9eWrV9vN5xieuxH8o7LiYsu/szRHnxKxzDb7ABv/PliJzs" +
"DX/An1neKuYdY17Z9eW8ezWJckOOWRsX20iT4C8JyYITqDUFFd2ETZCd6U4uHqgTaG8KMgfy8KrNEH+JhN5zkwj/PzC1RprgBD0kN1qpiuQSalfRVHNW5GWm6qYrm3eJ" +
"j6ZfvDv8jWkVTNsO3SSWFElS/xfnLV9T"))
root=TTk()
root.layout().addWidget(widget)

24
tutorial/ttkDesigner/textEdit/texteditor.02.py

@ -4,18 +4,18 @@ from TermTk import pyTTkSlot
# Data generated using ttkDesigner
# "textEditWindow" is the object defined using ttkDesigner
textEditWindow = TTkUiLoader.loadDict(TTkUtil.base64_deflate_2_obj(
"eJytVltvG0UUXtvrXV96yYVSICBWCKkOEpaDUAlqXhLTGNi6tRJDhao8bHZHPqOud63d2dAgVUI8OdWIBxgU3ipA8MAv4Inf1J/Amdn1NQmKq3pleWe+M2e+75vL8ff6" +
"L99UNPV5KmrcPCJRTMNA8OJGvVFvCF5gCRUSKrq+E8eCl7vdxw9p4IXfCm4MnMjpxwrX7zt9IvhVxLrkCbvrURZGgpc6YUyZTHkgarZu5wnX9+l3RDW/sG8QXm7TwHpI" +
"PQbCzvOKbH1OaA+YsHUEnScZ2M4vIYrNDG3rS9zsOJ5Hg57KVrBz8iHcuOcchwlDMsi1FVFv1Da/pjE99IkYcvNu4OCbJ1+7Yeh36UBwfe1Ro4+ydsLIIxFCxS5lGM4t" +
"CchvO7KkOosoeZb14vmvP6aDrqSmWLu+04vFl2hoKeGGn86MBkERXgfzKTrSImGfsOgYKWv4tOxlJmJecoH6XkSUUSpeWb2TMIbmyZE1KHNzhwVf4TwCqlLyiq0RuCrf" +
"KnaBwHXbgCW7AMs4fU6DFXxdPcim0WToDZUzswNuDuGNIbwJb3FdihJ8aSRTTqFkwdqQl5tA3MfSLXHCTdVA304SeDeV9aEkB++l0yAPVAPvH4iEFyLcJLbGC27oC7vA" +
"TWzHAycQdo6b2Je9J2maW9Ma98hY49tjjdXzNKY/czKR01gc1Ce6ZNqRLmicwMYFKqoTFXDb1uATW4dNOwefnmVrINumdFORvTW/IMWFyV4fkcWsl+FaOcO1eBFX6Wwz" +
"HBxnZDdeobMy7cs5a1zEtoRsO07MSEZ3a56uuTDd5RFdlffl+JqzfPkqnqhd6pP0pHYono5o5rw+GOChTiVoYwlGKkFPJaAJi9n94vnPP8zS53rHwVuS5+p4zzWdgbpz" +
"eVUysz6jjh/2sB9bDG94vBm3fd+SWGzVPljHuG3XJQNmtUOPyCNbVuPSVu58Z4wzzmhzK9mbdmHfORotpPHqXPjp31kXIIAQBrOyIZqXCwx5JrZ2WWG5uSV/DZe8Gfph" +
"dO6al9QpQzSTe2Vebn4hufgdr3ExzcuvrT36ePPOR3ca+Nze7IvLCsnPCamikFG1nvCf9GSbtpDxb9nXJH8N+Wv/e+4mlaV6jwbEup/0D1VBLe8Rx7MeBP4x1pJKO/EZ" +
"tWSEGEqKualNVEpIkvCqGwYBceVmjrPCyI2YBLI8wykvRcQl9Eg21rGf9gLHF3w1wfK1feRQXxat2iGWd9zieuyHssbFhGW1P0OUF7/BKfwOW/AHX43I2dHwJ/yVxa1j" +
"3CnGlV1frrtXkyg35Jy1cbKtNAj+lpBMOIFaU1DRTdgE2Zse5OKFOoEOpiBzIC+v2gzxZ0joHTeJ8P8DU3ukCU7QQ3KjnapIrqB21ZrqzpI8y1TddGX3PvHR9MWHwz8Y" +
"VsGw3dBNYkmRJPX/AFIIXtE="))
"eJytVltvG0UUXtvrXV96yYVSICBWFVIdJCwHoRLUvCSmMXTr1koMFarysNkd+Yy63rV2Z0ODVKniyalGPMCg8FYBggd+AU/8pv4Ezsyur0lQEuGV5T3znTnzfd/c/EL/" +
"+ZuKpj7PRY2bBySKaRgIXlyrN+oNwQssoUJCRdd34ljwcrf79DENvPBbwY2BEzn9WOH6Q6dPBL+KWJc8Y/c8ysJI8FInjCmTJfdEzdbtPOH6Lv2OqPBL+wbh5TYNrMfU" +
"YyDsPK/I6AtCe8CErSPoPMvAdn4BUQwztK0vcLPjeB4Neqpawc7Jh3DjgXMYJgzJINdWRL1RbH5NY7rvEzHk5r3AwTdPvnbD0O/SgeD6ypNGH2VthZFHIoSKXcownVsS" +
"kN92ZEl1FlHyLOv1q19+SDtdSU2xtn2nF4v72gutlHDDT0dGg6AIb4L5HB1pkbBPWHSIlDV8WvYiEzEvuUB9LyLKKJWvrN5KGEPzZM8alLm5xYKvcBwBVSl5ydYIXJVv" +
"FbtA4LptwIJdgMX7mpbTYAlfl/eyYTSZekPVzOyAm0N46wjehne4LkUJvjCSKYdQsmBlyMtNIO5T6ZY44qYK0LejBN5PZX0kycGtdBjkgWrggz2R8EKEi8TWeMENfWEX" +
"uIlxPHACYee4iW3Ze5KWuT2tcYeMNb471lg9TWP6MycTOY3FQX2iS5Yd6YLGEaydoaI6UQF3bA0+tXVYt3Pw2Um2BrJtSjcV2dvzE1I8N9lhRvb6iCxWPQ/XygmuxbO4" +
"Smeb4eAwI7t2eWeH887Kspdz1jiLbQnZdpyYkYzuxjxd88J0F0d0Vd3L8TVn+fJl3FHb1CfpTu1Q3B3RzH59NMBNnUrQxhKMVIKeSkATLmb361c/fT9Ln+sdB09Jnqvj" +
"Odd0BurM5VXJzPqcOn7Yw3aMGJ7weDJu+r4lsdiqfbiKeZuuSwbMaocekVu2rPqlUe50Z4wTzmhzM9mbdmHXORhNpPH/ufDjP7MuQAAhDGZlQzQvFxjyTGztvMJyc1P+" +
"Bk55M/TD6NQ5L6ldhmgm98q83PyF5OJ3PMfFtC6/tvLkk/W7H99t4HNnvS/OKyQ/J6SKQka39YT/pCVbtIWMf8u+JvlryF/7z303ps+rD2hArIdJf19dqOUd4njWo8A/" +
"xLuk0k58Ri2ZIYaSYm5qEZUSkiS86oZBQFy5mOPsYuRGTAJ5PcMxL0XEJfRABqvYTnuB4wu+nOD1tXngUF9eWrV9vN5xieuxH8o7LiYsu/szRHnxKxzDb7ABv/PliJzs" +
"DX/An1neKuYdY17Z9eW8ezWJckOOWRsX20iT4C8JyYITqDUFFd2ETZCd6U4uHqgTaG8KMgfy8KrNEH+JhN5zkwj/PzC1RprgBD0kN1qpiuQSalfRVHNW5GWm6qYrm3eJ" +
"j6ZfvDv8jWkVTNsO3SSWFElS/xfnLV9T"))
# Retrieve the widgets that we need to use
btnOpen = textEditWindow.getWidgetByName("BtnOpen")

Loading…
Cancel
Save