example: add python starter bar

This commit is contained in:
Aylur
2024-09-08 02:58:14 +02:00
parent 81f2655110
commit 8e44219b0e
10 changed files with 101 additions and 5 deletions
+4 -5
View File
@@ -11,9 +11,9 @@ The runtime is [GJS](https://gitlab.gnome.org/GNOME/gjs) and **not** nodejs
:::
Examples:
- [Simple Bar](https://github.com/Aylur/astal/tree/main/examples/js/simple-bar)
![sime-bar](https://github.com/user-attachments/assets/a306c864-56b7-44c4-8820-81f424f32b9b)
- [Simple Bar](https://github.com/Aylur/astal/tree/main/examples/js/simple-bar)
![simple-bar](https://github.com/user-attachments/assets/a306c864-56b7-44c4-8820-81f424f32b9b)
## Lua
@@ -29,15 +29,14 @@ Examples:
## Python
<!--TODO: move python PR to monorepo and link-->
There is a WIP [library for python](), to make it behave similar to the above two
There was a WIP [library for python](https://github.com/aylur/astal/tree/feat/python), to make it behave similar to the above two
but I don't plan on finishing it, because I'm not a fan of python.
If you are interested in picking it up, feel free to open a PR.
Nonetheless you can still use python the OOP way [pygobject](https://pygobject.gnome.org/tutorials/gobject/subclassing.html) intended it.
Examples:
- TODO
- [Starter Bar](https://github.com/Aylur/astal/tree/main/examples/py/starter-bar)
## Vala
+3
View File
@@ -0,0 +1,3 @@
pygobject-stubs/
*.pyi
__pycache__/
+7
View File
@@ -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).
View File
+27
View File
@@ -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()
+4
View File
@@ -0,0 +1,4 @@
window.Bar {
background-color: #212121;
color: white;
}
+6
View File
@@ -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")
+48
View File
@@ -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,
)
)
+2
View File
@@ -66,7 +66,9 @@
wireplumber
libdbusmenu-gtk3
wayland
(lua.withPackages (ps: [ps.lgi]))
(python3.withPackages (ps: [ps.pygobject3 ps.pygobject-stubs]))
gjs
];
in {