OS image:
Debian GNU/Linux 12 (bookworm) aarch64 Linux raspberrypi 6.6.62+rpt-rpi-2712 SMP PREEMPT Debian 1:6.6.62-1+rpt1 (2024-11-25)
Ref:
- https://www.gtk.org/docs/language-bindings/python/
- https://pygobject.gnome.org/getting_started.html#ubuntu-getting-started
- https://python-gtk-3-tutorial.readthedocs.io/en/latest/
Setup:
sudo apt update
sudo apt list --upgradable
sudo apt upgrade
sudo apt install libopenblas-dev libblas-dev m4 cmake python3-dev python3-yaml python3-setuptools
sudo apt install python3-gi python3-gi-cairo gir1.2-gtk-4.0
sudo apt install at-spi2-core
sudo rm /usr/lib/python3.*/EXTERNALLY-MANAGED
sudo pip install cython pygame
First Run:
Create new pyscript and,
import gi
gi.require_version('Gtk','3.0')
from gi.repository import Gtk,Gdk,GLib
import threading
import time
import sys
import pygame
class MyApp(Gtk.Application):
def __init__(self):
super().__init__(application_id="com.example.myapp")
GLib.set_application_name("MyApp")
css = Gtk.CssProvider()
css.load_from_path("./app.css")
Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),css,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
pygame.mixer.init()
self.bgevt = threading.Event()
self.bgthread = threading.Thread(target=loop_sleep,args=(self.bgevt,))
self.bgthread.start()
self.mainpg = Gtk.Box(orientation=Gtk.Orientation.VERTICAL,spacing=6)
self.mainpg.get_style_context().add_class('mainpg')
def do_activate(self):
self.win = Gtk.ApplicationWindow(application=self,title="Dance Box Set v0.0.1")
self.win.fullscreen()
self.init_mainpg()
self.win.add(self.mainpg)
self.win.show_all()
def init_mainpg(self):
btns = Gtk.FlowBox()
btns.set_selection_mode(Gtk.SelectionMode.NONE)
btns.set_max_children_per_line(3)
for i in range(1,10):
btn = Gtk.Button(label=i)
clsnm = 'btn' if i!=5 else 'btn-dark'
btn.get_style_context().add_class(clsnm)
btns.add(btn)
print(i)
self.mainpg.add(btns)
def loop_sleep(evt):
i = 1
while not evt.is_set():
print(i)
i = i+1
time.sleep(0.5)
def loop_shutdown(app):
app.bgevt.set()
app = MyApp()
app.connect("shutdown",loop_shutdown)
ex = app.run(sys.argv)
sys.exit(ex)