Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Afacanc38/c8f9581e31bfa8aa41509570b764d621 to your computer and use it in GitHub Desktop.
Save Afacanc38/c8f9581e31bfa8aa41509570b764d621 to your computer and use it in GitHub Desktop.
import gi, sys
gi.require_version('Gtk', '4.0')
gi.require_version('Adw', '1')
from gi.repository import Gtk, Adw, GLib
class MainWindow(Adw.ApplicationWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
GLib.set_application_name("Gtk Overlay")
GLib.set_prgname("Gtk Examples by Afacanc38")
self.box_main = Gtk.Box(
spacing = 6,
orientation = Gtk.Orientation.VERTICAL
)
self.set_content(self.box_main)
self.set_size_request(300, 300)
self.set_default_size(300, 300)
self.hb = Adw.HeaderBar()
self.box_main.append(self.hb)
self.box_wrapper = Gtk.Box(
spacing = 10,
margin_start = 20,
margin_end = 20,
margin_top = 20,
margin_bottom = 20,
orientation = Gtk.Orientation.VERTICAL
)
self.box_main.append(self.box_wrapper)
self.box_sec1 = Gtk.Box(
spacing = 10,
orientation = Gtk.Orientation.VERTICAL
)
self.box_wrapper.append(self.box_sec1)
self.lbl_sec1 = Gtk.Label(
label = 'Example 1: Button',
halign = Gtk.Align.START
)
self.lbl_sec1.get_style_context().add_class('title-1')
self.box_sec1.append (self.lbl_sec1)
self.frm_sec1 = Gtk.Frame(
hexpand = True
)
self.box_sec1.append(self.frm_sec1)
self.ovl_sec1 = Gtk.Overlay()
self.frm_sec1.set_child(self.ovl_sec1)
self.lbl_lipsum = Gtk.Label(
label = """
Lorem Ipsum Nedir?
Lorem Ipsum, dizgi ve baskı endüstrisinde kullanılan mıgır metinlerdir. Lorem Ipsum, adı bilinmeyen bir matbaacının bir hurufat numune kitabı oluşturmak üzere bir yazı galerisini alarak karıştırdığı 1500'lerden beri endüstri standardı sahte metinler olarak kullanılmıştır. Beşyüz yıl boyunca varlığını sürdürmekle kalmamış, aynı zamanda pek değişmeden elektronik dizgiye de sıçramıştır. 1960'larda Lorem Ipsum pasajları da içeren Letraset yapraklarının yayınlanması ile ve yakın zamanda Aldus PageMaker gibi Lorem Ipsum sürümleri içeren masaüstü yayıncılık yazılımları ile popüler olmuştur.
"""
)
self.lbl_lipsum.set_wrap(True)
self.ovl_sec1.set_child(self.lbl_lipsum)
self.btn_sec1 = Gtk.Button(
label='I\'am overlay button!',
halign = Gtk.Align.CENTER,
valign = Gtk.Align.CENTER
)
self.btn_sec1.get_style_context().add_class('suggested-action')
self.ovl_sec1.add_overlay(self.btn_sec1)
self.box_sec2 = Gtk.Box(
spacing = 10,
orientation = Gtk.Orientation.VERTICAL
)
self.box_wrapper.append(self.box_sec2)
self.lbl_sec2 = Gtk.Label(
label = "Example 2: In app notification",
halign = Gtk.Align.START
)
self.lbl_sec2.get_style_context().add_class('title-1')
self.box_sec2.append(self.lbl_sec2)
self.frm_sec2 = Gtk.Frame(
hexpand = True
)
self.box_sec2.append(self.frm_sec2)
self.ovl_sec2 = Gtk.Overlay()
self.frm_sec2.set_child(self.ovl_sec2)
self.btn_sec2 = Gtk.Button(
label = "Show",
halign = Gtk.Align.CENTER,
valign = Gtk.Align.CENTER,
margin_top = 50,
margin_bottom = 50
)
self.btn_sec2.connect('clicked', self.show_notify)
self.ovl_sec2.set_child(self.btn_sec2)
self.rvl_sec2 = Gtk.Revealer(
halign = Gtk.Align.CENTER,
valign = Gtk.Align.START
)
self.ovl_sec2.add_overlay(self.rvl_sec2)
self.notify = Gtk.Box(
halign = Gtk.Align.CENTER,
valign = Gtk.Align.START
)
self.notify.get_style_context().add_class('app-notification')
self.rvl_sec2.set_child(self.notify)
self.lbl_notify = Gtk.Label(
label = "Hello!"
)
self.notify.append(
self.lbl_notify
)
self.btn_notify_close = Gtk.Button.new_from_icon_name(
'window-close-symbolic'
)
self.btn_notify_close.get_style_context().add_class('flat')
self.btn_notify_close.connect('clicked', self.hide_notify)
self.notify.append (
self.btn_notify_close
)
def show_notify(self, widget):
self.rvl_sec2.set_reveal_child(True)
def hide_notify(self, widget):
self.rvl_sec2.set_reveal_child(False)
class MyApp(Adw.Application):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.connect('activate', self.on_activate)
def on_activate(self, app):
self.win = MainWindow(application = app)
self.win.present()
app = MyApp(
application_id = "io.github.afacanc38.gtk-overlay"
)
app.run(sys.argv)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment