You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

17 KiB

pyTermTk - Hello World

Intro

TTkLayouts are specialised classes that allow the placement of the widgets.

TTkLayout

This is the base class for all the different layouts. It allows free placement of the widgets in the layout area. Used mainly to have free range moving windows because the widgets are not automatically replaced after a layout event

TTkLayout
 ╔════════════════════════════╗
 ║   pos(4,2)                 ║
 ║   ┌───────┐   pos(16,4)    ║
 ║   │Widget1│   ┌─────────┐  ║
 ║   │       │   │ Widget2 │  ║
 ║   │       │   └─────────┘  ║
 ║   │       │                ║
 ║   └───────┘                ║
 ║                            ║
 ╚════════════════════════════╝

TTkHBoxLayout

This layout allow an automatic place all the widgets horizontally

TTkHBoxLayout
 ╔═════════╤═════════╤═════════╗
 ║ Widget1 │ Widget2 │ Widget3 ║
 ║         │         │         ║
 ║         │         │         ║
 ║         │         │         ║
 ║         │         │         ║
 ║         │         │         ║
 ╚═════════╧═════════╧═════════╝

TTkVBoxLayout

This layout allow an automatic place all the widgets vertically

TTkVBoxLayout
 ╔═════════════════════════════╗
 ║         Widget 1            ║
 ╟─────────────────────────────╢
 ║         Widget 2            ║
 ╟─────────────────────────────╢
 ║         Widget 3            ║
 ╟─────────────────────────────╢
 ║         Widget 4            ║
 ╚═════════════════════════════╝

TTkGridLayout

This layout allow an automatic place all the widgets in a grid the empty rows/cols are resized to the "columnMinHeight,columnMinWidth" parameters

TTkGridLayout        ┌┐ columnMinWidth
 ╔═════════╤═════════╤╤═════════╗
 ║ Widget1 │ Widget2 ││ Widget3 ║
 ║ (0,0)   │ (0,1)   ││ (0,3)   ║
 ╟─────────┼─────────┼┼─────────╢ ┐ columnMinHeight
 ╟─────────┼─────────┼┼─────────╢ ┘
 ║ Widget4 │         ││         ║
 ║ (2,0)   │         ││         ║
 ╟─────────┼─────────┼┼─────────╢
 ║         │         ││ Widget5 ║
 ║         │         ││ (3,3)   ║
 ╚═════════╧═════════╧╧═════════╝

Example 1 - Simple TTkLayout

Following is the code to execute VBox Example in pyTermTk

import TermTk as ttk

    # TTkLayout is used by default
root = ttk.TTk()

    # Attach 4 buttons to the root widget
ttk.TTkButton(parent=root, pos=(0,0),  size=(15,5), border=True, text="Button1")
ttk.TTkButton(parent=root, pos=(0,5),  size=(10,4), border=True, text="Button2")
ttk.TTkButton(parent=root, pos=(10,6), size=(10,3), border=True, text="Button3")
ttk.TTkButton(parent=root, pos=(13,1), size=(15,3), border=True, text="Button4")

root.mainloop()

The above code produces the following output

┌─────────────┐
│            ┌─────────────┐
│   Button1  │   Button4   │
│            ╘═════════════╛
╘═════════════╛
┌────────┐
│Button2 │┌────────┐
│        ││Button3 │
╘════════╛╘════════╛

Example 2 - Simple TTkVBoxLayout

Following is the code to execute VBox Example in pyTermTk

import TermTk as ttk

    # Set the VBoxLayout as defaut in the terminal widget
root = ttk.TTk(layout=ttk.TTkVBoxLayout())

    # Attach 4 buttons to the root widget
ttk.TTkButton(parent=root, border=True, text="Button1")
ttk.TTkButton(parent=root, border=True, text="Button2")
ttk.TTkButton(parent=root, border=True, text="Button3")
ttk.TTkButton(parent=root, border=True, text="Button4")

root.mainloop()

The above code produces the following output

┌───────────────────────────────────────────────────────────┐
│                                                           │
│                          Button1                          │
│                                                           │
╘═══════════════════════════════════════════════════════════╛
┌───────────────────────────────────────────────────────────┐
│                                                           │
│                          Button2                          │
│                                                           │
╘═══════════════════════════════════════════════════════════╛
┌───────────────────────────────────────────────────────────┐
│                                                           │
│                          Button3                          │
│                                                           │
╘═══════════════════════════════════════════════════════════╛
┌───────────────────────────────────────────────────────────┐
│                                                           │
│                          Button4                          │
│                                                           │
╘═══════════════════════════════════════════════════════════╛

Example 3 - Simple TTkHBoxLayout

Following is the code to execute HBox Example in pyTermTk

import TermTk as ttk

    # Set the HBoxLayout as defaut in the terminal widget
root = ttk.TTk()
root.setLayout(ttk.TTkHBoxLayout())

    # Attach 4 buttons to the root widget
ttk.TTkButton(parent=root, border=True, text="Button1")
ttk.TTkButton(parent=root, border=True, text="Button2")
ttk.TTkButton(parent=root, border=True, text="Button3")
ttk.TTkButton(parent=root, border=True, text="Button4")

root.mainloop()

The above code produces the following output

┌─────────────┐┌─────────────┐┌─────────────┐┌──────────────┐
│             ││             ││             ││              │
│             ││             ││             ││              │
│             ││             ││             ││              │
│             ││             ││             ││              │
│             ││             ││             ││              │
│             ││             ││             ││              │
│             ││             ││             ││              │
│             ││             ││             ││              │
│   Button1   ││   Button2   ││   Button3   ││   Button4    │
│             ││             ││             ││              │
│             ││             ││             ││              │
│             ││             ││             ││              │
│             ││             ││             ││              │
│             ││             ││             ││              │
│             ││             ││             ││              │
│             ││             ││             ││              │
│             ││             ││             ││              │
│             ││             ││             ││              │
╘═════════════╛╘═════════════╛╘═════════════╛╘══════════════╛

Example 4 - Simple TTkGridLayout

Following is the code to execute HBox Example in pyTermTk

import TermTk as ttk

    # Set the GridLayout as defaut in the terminal widget
gridLayout = ttk.TTkGridLayout(columnMinHeight=0,columnMinWidth=2)
root = ttk.TTk(layout=gridLayout)

    # Attach 2 buttons to the root widget using the default method
    # this will append them to the first row
ttk.TTkButton(parent=root, border=True, text="Button1")
ttk.TTkButton(parent=root, border=True, text="Button2")
    # Attach 2 buttons to a specific position in the grid
gridLayout.addWidget(ttk.TTkButton(parent=root, border=True, text="Button3"), 1,2)
gridLayout.addWidget(ttk.TTkButton(parent=root, border=True, text="Button4"), 3,4)

root.mainloop()

The above code produces the following output

┌───────────┐┌───────────┐
│           ││           │
│  Button1  ││  Button2  │
│           ││           │
╘═══════════╛╘═══════════╛
                          ┌───────────┐
                          │           │
                          │  Button3  │
                          │           │
                          ╘═══════════╛
                                         ┌───────────┐
                                         │           │
                                         │  Button4  │
                                         │           │
                                         ╘═══════════╛

Example 5 - Nested Layouts

Following is the code to execute Nested Layouts Example in pyTermTk

import TermTk as ttk

    # Set the GridLayout as defaut in the terminal widget
root = ttk.TTk()

gridLayout = ttk.TTkGridLayout()
root.setLayout(gridLayout)

    # Attach 2 buttons to the root widget using the default method
    # this will append them to the first row
    # NOTE: it is not recommended to use this legacy method in a gridLayout
ttk.TTkButton(parent=root, border=True, text="Button1")
ttk.TTkButton(parent=root, border=True, text="Button2")
    # Attach 2 buttons to a specific position in the grid
gridLayout.addWidget(ttk.TTkButton(border=True, text="Button3"), 1,2)
gridLayout.addWidget(ttk.TTkButton(border=True, text="Button4"), 2,4)

    # Create a VBoxLayout and add it to the gridLayout
vboxLayout = ttk.TTkVBoxLayout()
gridLayout.addItem(vboxLayout,1,3)
    # Attach 2 buttons to the vBoxLayout
vboxLayout.addWidget(ttk.TTkButton(border=True, text="Button5"))
vboxLayout.addWidget(ttk.TTkButton(border=True, text="Button6"))

root.mainloop()

The above code produces the following output

┌─────────┐┌─────────┐
│         ││         │
│ Button1 ││ Button2 │
│         ││         │
╘═════════╛╘═════════╛
                      ┌─────────┐┌─────────┐
                      │         ││ Button5 │
                      │ Button3 │╘═════════╛
                      │         │┌─────────┐
                      │         ││ Button6 │
                      ╘═════════╛╘═════════╛
                                            ┌─────────┐
                                            │         │
                                            │ Button4 │
                                            │         │
                                            ╘═════════╛

Example 6 - Rowspan/Colspan in Grid Layout

Following is the code to execute Nested Layouts Example in pyTermTk

import TermTk as ttk

root = ttk.TTk()

gridLayout = ttk.TTkGridLayout()
root.setLayout(gridLayout)

# | x = 0   | x = 1 | x = 2   |
# |         |       |         |
# ┌────────────────┐┌─────────┐ ──────
# │y=0 x=0 h=1 w=2 ││y=0 x=2  │  y = 0
# │    Button1     ││h=2 w=1  │
# ╘════════════════╛│         │ ──────
# ┌─────────┐       │ Button2 │  y = 1
# │y=1 x=0  │       ╘═════════╛
# │h=2 w=1  │┌────────────────┐ ──────
# │         ││y=2 x=1 h=1 w=2 |  y = 2
# │ Button3 ││    Button4     │
# ╘═════════╛╘════════════════╛ ──────

gridLayout.addWidget(ttk.TTkButton(border=True, text="Button1"), 0,0, 1,2)
gridLayout.addWidget(ttk.TTkButton(border=True, text="Button2"), 0,2, 2,1)
gridLayout.addWidget(ttk.TTkButton(border=True, text="Button3"), 1,0, 2,1)
# It is possible to expand the names
gridLayout.addWidget(ttk.TTkButton(border=True, text="Button4"), row=2, col=1, rowspan=1, colspan=2)

root.mainloop()

The above code produces the following output

┌───────────────────────┐┌───────────┐
│                       ││           │
│        Button1        ││           │
│                       ││           │
╘═══════════════════════╛│  Button2  │
┌───────────┐            │           │
│           │            │           │
│           │            │           │
│           │            ╘═══════════╛
│  Button3  │┌───────────────────────┐
│           ││                       │
│           ││        Button4        │
│           ││                       │
╘═══════════╛╘═══════════════════════╛