Python tutorials with source code, examples, guides, and tips and tricks for Windows and Linux development.
Tuesday, July 21, 2026
Python 3.10.11 : testing default example with the pyui-0.1.0 python module.
A declarative, cross-platform GUI framework (ala SwiftUI) written in Python using SDL2. It provides tools and libraries that enable developers to create and manage user interfaces for desktop apps.
You need to install the pyui python module and the SDK with the pip tool.
python -m pip install pyui
Collecting pyui
Downloading pyui-0.1.0-py3-none-any.whl.metadata (893 bytes)
Collecting PySDL2>=0.9.7 (from pyui)
Downloading PySDL2-0.9.17-py3-none-any.whl.metadata (3.8 kB)
Downloading pyui-0.1.0-py3-none-any.whl (6.0 MB)
---------------------------------------- 6.0/6.0 MB 6.0 MB/s 0:00:01
Downloading PySDL2-0.9.17-py3-none-any.whl (583 kB)
---------------------------------------- 583.1/583.1 kB 2.1 MB/s 0:00:00
Installing collected packages: PySDL2, pyui
Successfully installed PySDL2-0.9.17 pyui-0.1.0
python -m pip install pysdl2-dll
Collecting pysdl2-dll
Downloading pysdl2_dll-2.32.10-py2.py3-none-win_amd64.whl.metadata (4.7 kB)
Downloading pysdl2_dll-2.32.10-py2.py3-none-win_amd64.whl (4.1 MB)
---------------------------------------- 4.1/4.1 MB 4.1 MB/s 0:00:01
Installing collected packages: pysdl2-dll
Successfully installed pysdl2-dll-2.32.10Let's see the default example with one grid.

Let's see the source code:
import pyui
class ItemGridView(pyui.View):
def content(self):
yield pyui.ScrollView(axis=self.axis)(
pyui.Grid(num=self.num, size=self.size, axis=self.axis, flex=self.flex)(
pyui.ForEach(
range(self.item_count),
lambda num: (
pyui.Rectangle()(pyui.Text(num + 1).color(255, 255, 255))
.background(120, 120, 120)
.radius(5)
.animate()
),
)
)
)
class GridTest(pyui.View):
axis = pyui.State(default=1)
item_count = pyui.State(int, default=50)
size = pyui.State(default=100)
num = pyui.State(default=4)
size_or_num = pyui.State(default=0)
flex = pyui.State(default=False)
def content(self):
if self.size_or_num.value == 0:
size = None
num = self.num.value
else:
size = self.size.value
num = None
yield pyui.HStack(alignment=pyui.Alignment.LEADING)(
pyui.VStack(alignment=pyui.Alignment.LEADING)(
pyui.Text("Axis"),
pyui.SegmentedButton(self.axis)(
pyui.Text(pyui.Axis.HORIZONTAL.name),
pyui.Text(pyui.Axis.VERTICAL.name),
),
pyui.HStack(
pyui.Text("Number of items"),
pyui.Spacer(),
pyui.Text(self.item_count.value)
.color(128, 128, 128)
.priority("high"),
),
pyui.Slider(self.item_count, maximum=200),
pyui.Text("Fill rows/columns by"),
pyui.SegmentedButton(self.size_or_num)(
pyui.Text("Number"),
pyui.Text("Size"),
),
pyui.HStack(
pyui.Text("Items per row/column"),
pyui.Spacer(),
pyui.Text(self.num.value).color(128, 128, 128).priority("high"),
),
pyui.Slider(self.num, minimum=1, maximum=10).disable(
self.size_or_num.value == 1
),
pyui.HStack(
pyui.Text("Item size"),
pyui.Spacer(),
pyui.Text(self.size.value).color(128, 128, 128).priority("high"),
),
pyui.Slider(self.size, minimum=50, maximum=200).disable(
self.size_or_num.value == 0
),
pyui.Toggle(self.flex, label="Adjust size to fit").disable(
self.size_or_num.value == 0
),
)
.padding(10)
.size(width=300),
ItemGridView(
item_count=self.item_count.value,
size=size,
num=num,
axis=self.axis.value,
flex=self.flex.value,
),
)
if __name__ == "__main__":
app = pyui.Application("io.temp.GridTest")
app.window("Grid Tester", GridTest())
app.run()
Posted by
Cătălin George Feștilă
Labels:
2026,
module,
modules,
packages,
programming,
python,
python modules,
python packages,
python3,
pyui,
tutorial,
tutorials
Subscribe to:
Posts (Atom)