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
+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,
)
)