diff options
author | Aylur <[email protected]> | 2024-09-08 02:58:14 +0200 |
---|---|---|
committer | Aylur <[email protected]> | 2024-09-08 02:58:14 +0200 |
commit | 8e44219b0ea108a4b33cbd1e5ea06dfb1c06f659 (patch) | |
tree | 2340f0683595b502f0ec8c562d544c2bb2cbddf4 /examples | |
parent | 81f26551103e785fa974e054b2b3357725deb419 (diff) |
example: add python starter bar
Diffstat (limited to 'examples')
-rw-r--r-- | examples/py/.gitignore | 3 | ||||
-rw-r--r-- | examples/py/starter-bar/README.md | 7 | ||||
-rw-r--r-- | examples/py/starter-bar/__init__.py | 0 | ||||
-rwxr-xr-x | examples/py/starter-bar/app.py | 27 | ||||
-rw-r--r-- | examples/py/starter-bar/style.css | 4 | ||||
-rw-r--r-- | examples/py/starter-bar/versions.py | 6 | ||||
-rw-r--r-- | examples/py/starter-bar/widget/Bar.py | 48 | ||||
-rw-r--r-- | examples/py/starter-bar/widget/__init__.py | 0 |
8 files changed, 95 insertions, 0 deletions
diff --git a/examples/py/.gitignore b/examples/py/.gitignore new file mode 100644 index 0000000..b0bff8b --- /dev/null +++ b/examples/py/.gitignore @@ -0,0 +1,3 @@ +pygobject-stubs/ +*.pyi +__pycache__/ diff --git a/examples/py/starter-bar/README.md b/examples/py/starter-bar/README.md new file mode 100644 index 0000000..c9a7ad1 --- /dev/null +++ b/examples/py/starter-bar/README.md @@ -0,0 +1,7 @@ +# Starter Bar Example + +A starter bar that shows a label and the date. + +> [!NOTE] +> This code is not ideal to work with as it requires too much boilerplate compared to AGS. +> If you want to use python try picking up the [python library](https://github.com/aylur/astal/tree/feat/python). diff --git a/examples/py/starter-bar/__init__.py b/examples/py/starter-bar/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/examples/py/starter-bar/__init__.py diff --git a/examples/py/starter-bar/app.py b/examples/py/starter-bar/app.py new file mode 100755 index 0000000..287d0f8 --- /dev/null +++ b/examples/py/starter-bar/app.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import versions +from gi.repository import Astal, Gio +from widget.Bar import Bar +from pathlib import Path + +css = str(Path(__file__).parent.resolve() / "style.css") + + +class App(Astal.Application): + def __init__(self): + super().__init__() + self.acquire_socket() + self.run(None) + + def do_request(self, msg: str, conn: Gio.SocketConnection) -> None: + print(msg) + Astal.write_sock(conn, "hello") + + def do_activate(self) -> None: + self.hold() + self.apply_css(css, True) + for mon in self.get_monitors(): + self.add_window(Bar(mon)) + + +App() diff --git a/examples/py/starter-bar/style.css b/examples/py/starter-bar/style.css new file mode 100644 index 0000000..cb8c712 --- /dev/null +++ b/examples/py/starter-bar/style.css @@ -0,0 +1,4 @@ +window.Bar { + background-color: #212121; + color: white; +} diff --git a/examples/py/starter-bar/versions.py b/examples/py/starter-bar/versions.py new file mode 100644 index 0000000..a5993be --- /dev/null +++ b/examples/py/starter-bar/versions.py @@ -0,0 +1,6 @@ +import gi + +gi.require_version("Astal", "0.1") +gi.require_version("Gtk", "3.0") +gi.require_version("Gdk", "3.0") +gi.require_version("Gio", "2.0") diff --git a/examples/py/starter-bar/widget/Bar.py b/examples/py/starter-bar/widget/Bar.py new file mode 100644 index 0000000..9071169 --- /dev/null +++ b/examples/py/starter-bar/widget/Bar.py @@ -0,0 +1,48 @@ +from gi.repository import Astal, Gtk, Gdk, GLib + + +class Time(Astal.Label): + def __init__(self, format="%H:%M:%S"): + super().__init__(visible=True) + self.connect("destroy", self.on_destroy) + self.format = format + self.time = Astal.Time.interval(1000, self.on_tick) + + def on_tick(self): + datetime = GLib.DateTime.new_now_local() + assert datetime + time = datetime.format(self.format) + assert time + self.set_label(time) + + def on_destroy(self, *args, **kwargs): + self.time.cancel() + + +class Bar(Astal.Window): + def __init__(self, monitor: Gdk.Monitor): + super().__init__( + visible=True, + gdkmonitor=monitor, + name="Bar" + str(monitor.get_model()), + anchor=Astal.WindowAnchor.LEFT + | Astal.WindowAnchor.RIGHT + | Astal.WindowAnchor.TOP, + exclusivity=Astal.Exclusivity.EXCLUSIVE, + ) + + Astal.widget_set_class_names(self, ["Bar"]) + start_widget = Astal.Box(visible=True, hexpand=True, halign=Gtk.Align.CENTER) + end_widget = Astal.Box(visible=True, hexpand=True, halign=Gtk.Align.CENTER) + + start_widget.set_children([Astal.Label(visible=True, label="Astal in python")]) + + end_widget.set_children([Time()]) + + self.add( + Astal.CenterBox( + visible=True, + start_widget=start_widget, + end_widget=end_widget, + ) + ) diff --git a/examples/py/starter-bar/widget/__init__.py b/examples/py/starter-bar/widget/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/examples/py/starter-bar/widget/__init__.py |