mirror of
https://github.com/zoriya/astal.git
synced 2026-05-30 01:05:08 +00:00
example: add python starter bar
This commit is contained in:
@@ -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)
|
||||

|
||||
|
||||
- [Simple Bar](https://github.com/Aylur/astal/tree/main/examples/js/simple-bar)
|
||||

|
||||
|
||||
## 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
|
||||
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
pygobject-stubs/
|
||||
*.pyi
|
||||
__pycache__/
|
||||
@@ -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).
|
||||
Executable
+27
@@ -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()
|
||||
@@ -0,0 +1,4 @@
|
||||
window.Bar {
|
||||
background-color: #212121;
|
||||
color: white;
|
||||
}
|
||||
@@ -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")
|
||||
@@ -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,
|
||||
)
|
||||
)
|
||||
Reference in New Issue
Block a user