[gtk/python-example] Add a simple python example




commit ed5b42071c26829024c0c4d4459e34548fb68957
Author: Matthias Clasen <mclasen redhat com>
Date:   Fri Jul 2 21:20:39 2021 -0400

    Add a simple python example
    
    This shows how to do custom drawing in a widget,
    implemented in python. The example sets up the
    environment for running from the toplevel dir,
    assuming that the build dir is called 'build'.

 examples/squares.py | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 61 insertions(+)
---
diff --git a/examples/squares.py b/examples/squares.py
new file mode 100755
index 0000000000..5aea3d32cd
--- /dev/null
+++ b/examples/squares.py
@@ -0,0 +1,61 @@
+#!/usr/bin/env -S GI_TYPELIB_PATH=${PWD}/build/gtk:${GI_TYPELIB_PATH} 
LD_PRELOAD=${PWD}/build/gtk/libgtk-4.so python3
+
+import gi
+
+gi.require_version('Gdk', '4.0')
+gi.require_version('Gtk', '4.0')
+
+from gi.repository import Gdk
+from gi.repository import Gtk
+from gi.repository import Graphene
+
+
+class DemoWidget(Gtk.Widget):
+
+    __gtype_name__ = "DemoWidget"
+
+    def __init__(self):
+        super().__init__()
+
+    def do_measure(self, orientation, for_size: int):
+        # We need some space to draw
+        return 100, 200, -1, -1
+
+    def do_snapshot(self, snapshot):
+        # Draw four color squares
+        color = Gdk.RGBA()
+        rect = Graphene.Rect.alloc()
+
+        width = self.get_width() / 2
+        height = self.get_height() / 2
+
+        Gdk.RGBA.parse(color, "red")
+        rect.init(0, 0, width, height)
+        snapshot.append_color(color, rect)
+
+        Gdk.RGBA.parse(color, "green")
+        rect.init(width, 0, width, height)
+        snapshot.append_color(color, rect)
+
+        Gdk.RGBA.parse(color, "yellow")
+        rect.init(0, height, width, height)
+        snapshot.append_color(color, rect)
+
+        Gdk.RGBA.parse(color, "blue")
+        rect.init(width, height, width, height)
+        snapshot.append_color(color, rect)
+
+def on_activate(app):
+    # Create a new window
+    win = Gtk.ApplicationWindow(application=app)
+    win.set_title("Squares")
+    icon = DemoWidget()
+    win.set_child(icon)
+    win.present()
+
+# Create a new application
+app = Gtk.Application(application_id='org.gtk.exampleapp')
+app.connect('activate', on_activate)
+
+# Run the application
+app.run(None)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]