restore files
30
README.md
|
@ -1,5 +1,27 @@
|
|||
# PyGTK examples
|
||||
# PyGObject examples
|
||||
|
||||
| libhandy | screenshot |
|
||||
| ------------------ | ---------------------------------------------------------- |
|
||||
| 1-box.py | ![box](screenshots/handy/1-box-py.png) |
|
||||
| 2-headerbar.py | ![headerbar](screenshots/handy/2-headerbar-py.png) |
|
||||
| 3-revealer.py | ![revealer](screenshots/handy/3-revealer-py.png) |
|
||||
| 4-stack.py | ![stack](screenshots/handy/4-stack-py.png) |
|
||||
| 5-style-classes.py | ![style-classes](screenshots/handy/5-style-classes-py.png) |
|
||||
| 6-deck.py | ![deck](screenshots/handy/6-deck-py.png) |
|
||||
|
||||
| libadwaita | screenshot |
|
||||
| ------------------ | -------------------------------------------------------------- |
|
||||
| 1-hello-world.py | ![helloworld](screenshots/libadwaita/1-hello-world-py.png) |
|
||||
| 2-buttons.py | ![buttons](screenshots/libadwaita/2-buttons-py.png) |
|
||||
| 3-leaflet.py | ![leaflet](screenshots/libadwaita/3-leaflet-py.png) |
|
||||
| 4-clamp.py | ![clamp](screenshots/libadwaita/4-clamp-py.png) |
|
||||
| 5-lists.py | ![lists](screenshots/libadwaita/5-lists-py.png) |
|
||||
| 6-view-switcher.py | ![viewswitcher](screenshots/libadwaita/6-view-switcher-py.png) |
|
||||
| 7-carousel.py | ![carousel](screenshots/libadwaita/7-carousel-py.png) |
|
||||
|
||||
## Requirements:
|
||||
* Python 3
|
||||
* GTK+ 3.0
|
||||
* Handy 1.0 (dev)
|
||||
|
||||
- Python 3
|
||||
- GTK+ 3.0 (4.0 for libadwaita)
|
||||
- Handy 1.0
|
||||
- Libadwaita 1.0
|
||||
|
|
63
handy/5-style-classes.py
Normal file
|
@ -0,0 +1,63 @@
|
|||
import gi
|
||||
gi.require_version("Gtk", "3.0")
|
||||
gi.require_version("Handy", "1")
|
||||
from gi.repository import Gtk, Handy
|
||||
|
||||
Handy.init()
|
||||
|
||||
class MyWindow(Handy.Window):
|
||||
def __init__(self):
|
||||
super().__init__(title="Hello World")
|
||||
self.set_default_size(900, 300)
|
||||
self.handle = Handy.WindowHandle()
|
||||
self.add(self.handle)
|
||||
|
||||
# Window box
|
||||
self.winbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
||||
self.handle.add(self.winbox)
|
||||
## Headerbar
|
||||
self.hb = Handy.HeaderBar()
|
||||
self.hb.set_show_close_button(True)
|
||||
self.hb.props.title = "Style Classes Example"
|
||||
self.winbox.pack_start(self.hb, False, True, 0)
|
||||
|
||||
# MainBox
|
||||
self.mainbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6, halign=Gtk.Align.CENTER, valign=Gtk.Align.CENTER)
|
||||
self.winbox.pack_start(self.mainbox, True, True, 0)
|
||||
## Button box
|
||||
self.btn_box = Gtk.ButtonBox(halign=Gtk.Align.CENTER, valign=Gtk.Align.CENTER, spacing=6)
|
||||
self.mainbox.pack_start(self.btn_box, True, True, 0)
|
||||
### Normal button
|
||||
self.btn = Gtk.Button(label="Normal")
|
||||
self.btn_box.pack_start(self.btn, False, False, 0)
|
||||
### Suggested button
|
||||
self.btn_suggested = Gtk.Button(label="Suggested")
|
||||
self.btn_suggested.get_style_context().add_class("suggested-action")
|
||||
self.btn_box.pack_start(self.btn_suggested, False, False, 0)
|
||||
### Destructive button
|
||||
self.btn_destructive = Gtk.Button(label="Destructive")
|
||||
self.btn_destructive.get_style_context().add_class("destructive-action")
|
||||
self.btn_box.pack_start(self.btn_destructive, False, False, 0)
|
||||
|
||||
## Flat button box
|
||||
self.btn_box2 = Gtk.ButtonBox(halign=Gtk.Align.CENTER, valign=Gtk.Align.CENTER, spacing=6)
|
||||
self.mainbox.pack_start(self.btn_box2, True, True, 0)
|
||||
### Normal button
|
||||
self.btn_flat = Gtk.Button(label="Flat")
|
||||
self.btn_flat.get_style_context().add_class("flat")
|
||||
self.btn_box.pack_start(self.btn_flat, False, False, 0)
|
||||
### Suggested button
|
||||
self.btn_suggested_flat = Gtk.Button(label="Suggested Flat")
|
||||
self.btn_suggested_flat.get_style_context().add_class("suggested-action")
|
||||
self.btn_suggested_flat.get_style_context().add_class("flat")
|
||||
self.btn_box.pack_start(self.btn_suggested_flat, False, False, 0)
|
||||
### Destructive button
|
||||
self.btn_destructive_flat = Gtk.Button(label="Destructive Flat")
|
||||
self.btn_destructive_flat.get_style_context().add_class("destructive-action")
|
||||
self.btn_destructive_flat.get_style_context().add_class("flat")
|
||||
self.btn_box.pack_start(self.btn_destructive_flat, False, False, 0)
|
||||
|
||||
win = MyWindow()
|
||||
win.connect("destroy", Gtk.main_quit)
|
||||
win.show_all()
|
||||
Gtk.main()
|
194
handy/6-deck.py
Normal file
|
@ -0,0 +1,194 @@
|
|||
import gi
|
||||
gi.require_version ('Gtk', '3.0')
|
||||
gi.require_version ('Handy', '1')
|
||||
from gi.repository import Gtk, Handy
|
||||
|
||||
Handy.init ()
|
||||
|
||||
class MyWindow (Handy.Window):
|
||||
def __init__ (self):
|
||||
super() .__init__(
|
||||
title = 'Hello World'
|
||||
)
|
||||
self.set_default_size (900, 300)
|
||||
|
||||
# WindowHandle
|
||||
self.hdl = Handy.WindowHandle ()
|
||||
self.add (self.hdl)
|
||||
|
||||
# Deck
|
||||
self.deck = Handy.Deck ()
|
||||
self.deck.set_can_swipe_back (True)
|
||||
self.hdl.add (self.deck)
|
||||
|
||||
# Main Page
|
||||
self.mainpage = Gtk.Box(
|
||||
spacing = 6,
|
||||
orientation = Gtk.Orientation.VERTICAL
|
||||
)
|
||||
|
||||
self.hb = Handy.HeaderBar()
|
||||
self.hb.set_show_close_button(True)
|
||||
self.hb.props.title = "Handy Deck Example"
|
||||
self.mainpage.pack_start(
|
||||
self.hb,
|
||||
False,
|
||||
True,
|
||||
0
|
||||
)
|
||||
self.deck.add (self.mainpage)
|
||||
|
||||
# Page 1
|
||||
self.page1 = Gtk.Box(
|
||||
spacing = 6,
|
||||
orientation = Gtk.Orientation.VERTICAL,
|
||||
halign = Gtk.Align.CENTER,
|
||||
valign = Gtk.Align.CENTER
|
||||
)
|
||||
self.lbl_page1 = Gtk.Label (
|
||||
label = 'Page 1',
|
||||
)
|
||||
self.btn_prev1 = Gtk.Button (
|
||||
label = 'Previous',
|
||||
halign = Gtk.Align.CENTER,
|
||||
valign = Gtk.Align.CENTER
|
||||
)
|
||||
self.btn_prev1.connect(
|
||||
'clicked', self.on_prev_clicked
|
||||
)
|
||||
self.page1.pack_start(
|
||||
self.lbl_page1,
|
||||
True,
|
||||
True,
|
||||
0
|
||||
)
|
||||
self.page1.pack_start(
|
||||
self.btn_prev1,
|
||||
True,
|
||||
True,
|
||||
0
|
||||
)
|
||||
|
||||
self.deck.add (self.page1)
|
||||
|
||||
# Page 2
|
||||
self.page2 = Gtk.Box(
|
||||
spacing = 6,
|
||||
orientation = Gtk.Orientation.VERTICAL,
|
||||
halign = Gtk.Align.CENTER,
|
||||
valign = Gtk.Align.CENTER
|
||||
)
|
||||
self.lbl_page2 = Gtk.Label (
|
||||
label = 'Page 2'
|
||||
)
|
||||
self.btn_prev2 = Gtk.Button (
|
||||
label = 'Previous',
|
||||
halign = Gtk.Align.CENTER,
|
||||
valign = Gtk.Align.CENTER
|
||||
)
|
||||
self.btn_prev2.connect(
|
||||
'clicked', self.on_prev_clicked
|
||||
)
|
||||
self.page2.pack_start(
|
||||
self.lbl_page2,
|
||||
True,
|
||||
True,
|
||||
0
|
||||
)
|
||||
self.page2.pack_start(
|
||||
self.btn_prev2,
|
||||
True,
|
||||
True,
|
||||
0
|
||||
)
|
||||
|
||||
self.deck.add (self.page2)
|
||||
|
||||
# Page 3
|
||||
self.page3 = Gtk.Box(
|
||||
spacing = 6,
|
||||
orientation = Gtk.Orientation.VERTICAL,
|
||||
halign = Gtk.Align.CENTER,
|
||||
valign = Gtk.Align.CENTER
|
||||
)
|
||||
self.btn_prev3 = Gtk.Button (
|
||||
label = 'Previous',
|
||||
halign = Gtk.Align.CENTER,
|
||||
valign = Gtk.Align.CENTER
|
||||
)
|
||||
self.btn_prev3.connect(
|
||||
'clicked', self.on_prev_clicked
|
||||
)
|
||||
self.lbl_page3 = Gtk.Label (
|
||||
label = 'Page 3'
|
||||
)
|
||||
self.page3.pack_start(
|
||||
self.lbl_page3,
|
||||
True,
|
||||
True,
|
||||
0
|
||||
)
|
||||
self.page3.pack_start(
|
||||
self.btn_prev3,
|
||||
True,
|
||||
True,
|
||||
0
|
||||
)
|
||||
|
||||
self.deck.add (self.page3)
|
||||
|
||||
# Main page
|
||||
self.btn_box = Gtk.ButtonBox (
|
||||
spacing = 6,
|
||||
halign = Gtk.Align.CENTER,
|
||||
valign = Gtk.Align.CENTER
|
||||
)
|
||||
|
||||
self.btn_page1 = Gtk.Button (
|
||||
label = 'Page 1',
|
||||
)
|
||||
self.btn_box.add (self.btn_page1)
|
||||
self.btn_page1.connect(
|
||||
'clicked',
|
||||
self.on_btn_page1_clicked
|
||||
)
|
||||
|
||||
self.btn_page2 = Gtk.Button (
|
||||
label = 'Page 2',
|
||||
)
|
||||
self.btn_page2.connect(
|
||||
'clicked', self.on_btn_page2_clicked
|
||||
)
|
||||
|
||||
self.btn_box.add (self.btn_page2)
|
||||
|
||||
self.btn_page3 = Gtk.Button (
|
||||
label = 'Page 3'
|
||||
)
|
||||
|
||||
self.btn_page3.connect(
|
||||
'clicked',
|
||||
self.on_btn_page3_clicked
|
||||
)
|
||||
|
||||
self.btn_box.add (self.btn_page3)
|
||||
self.mainpage.pack_start(
|
||||
self.btn_box,
|
||||
True,
|
||||
True,
|
||||
0
|
||||
)
|
||||
|
||||
def on_btn_page1_clicked (self, widget):
|
||||
self.deck.set_visible_child (self.page1)
|
||||
def on_btn_page2_clicked (self, widget):
|
||||
self.deck.set_visible_child (self.page2)
|
||||
def on_btn_page3_clicked (self, widget):
|
||||
self.deck.set_visible_child (self.page3)
|
||||
def on_prev_clicked (self, widget):
|
||||
self.deck.set_visible_child (self.mainpage)
|
||||
|
||||
win = MyWindow ()
|
||||
win.connect ('destroy', Gtk.main_quit)
|
||||
win.show_all ()
|
||||
Gtk.main ()
|
108
libadwaita/1-hello-world.py
Normal file
|
@ -0,0 +1,108 @@
|
|||
import sys
|
||||
import gi
|
||||
gi.require_version('Gtk', '4.0')
|
||||
gi.require_version('Adw', '1')
|
||||
from gi.repository import Gtk, Adw, GLib, Gio
|
||||
|
||||
|
||||
class MainWindow(Gtk.ApplicationWindow):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.set_default_size(300, 400)
|
||||
self.set_title("Merhaba dünya!")
|
||||
GLib.set_application_name("Merhaba Dünya!")
|
||||
GLib.set_prgname('Merhaba Dünya!')
|
||||
|
||||
self.main_box = Gtk.Box(
|
||||
orientation = Gtk.Orientation.VERTICAL,
|
||||
spacing = 6, # Öğeler arasında boşluk
|
||||
halign = Gtk.Align.CENTER,
|
||||
valign = Gtk.Align.CENTER # Öğeleri ortaya sabitledik
|
||||
)
|
||||
self.set_child(self.main_box)
|
||||
|
||||
self.lbl_hello = Gtk.Label(
|
||||
label = "Merhaba dünya"
|
||||
)
|
||||
self.main_box.append(self.lbl_hello)
|
||||
|
||||
self.btn_hello = Gtk.Button(
|
||||
label = "Bana tıkla"
|
||||
)
|
||||
self.btn_hello.connect(
|
||||
"clicked",
|
||||
self.btn_hello_clicked
|
||||
)
|
||||
self.main_box.append(self.btn_hello)
|
||||
|
||||
self.hb = Gtk.HeaderBar()
|
||||
self.set_titlebar(self.hb)
|
||||
|
||||
self.btn_open = Gtk.Button(
|
||||
label = "Aç"
|
||||
)
|
||||
self.btn_open.set_icon_name("document-open-symbolic")
|
||||
self.hb.pack_start(self.btn_open)
|
||||
|
||||
self.dyl_open = Gtk.FileChooserNative.new(
|
||||
title = "Bir dosya seçin",
|
||||
parent = self,
|
||||
action = Gtk.FileChooserAction.OPEN
|
||||
)
|
||||
self.dyl_open.connect("response", self.open_response)
|
||||
self.btn_open.connect("clicked", self.show_open_dialog)
|
||||
|
||||
self.lbl_filepath = Gtk.Label()
|
||||
|
||||
menuAction = Gio.SimpleAction.new("birseyler", None)
|
||||
menuAction.connect("activate", self.print_something)
|
||||
self.add_action(menuAction)
|
||||
|
||||
menu = Gio.Menu.new()
|
||||
menu.append("Bir şeyler yap!", "win.birseyler")
|
||||
|
||||
self.popover = Gtk.PopoverMenu()
|
||||
self.popover.set_menu_model(menu)
|
||||
|
||||
self.hamburger = Gtk.MenuButton()
|
||||
self.hamburger.set_popover(self.popover)
|
||||
self.hamburger.set_icon_name("open-menu-symbolic")
|
||||
|
||||
self.hb.pack_end(self.hamburger)
|
||||
|
||||
app = self.get_application()
|
||||
sm = app.get_style_manager()
|
||||
sm.set_color_scheme(Adw.ColorScheme.PREFER_DARK)
|
||||
|
||||
self.main_box.set_margin_top(10)
|
||||
self.main_box.set_margin_bottom(10)
|
||||
self.main_box.set_margin_start(10)
|
||||
self.main_box.set_margin_end(10)
|
||||
|
||||
def print_something(self, action, param):
|
||||
print("Bir şeyler!")
|
||||
|
||||
def open_response(self, dialog, response):
|
||||
if response == Gtk.ResponseType.ACCEPT:
|
||||
file = dialog.get_file()
|
||||
filename = file.get_path()
|
||||
self.lbl_filepath.set_label(filename)
|
||||
self.main_box.append(self.lbl_filepath)
|
||||
|
||||
def show_open_dialog(self, button):
|
||||
self.dyl_open.show()
|
||||
|
||||
def btn_hello_clicked(self, button):
|
||||
print("Merhaba dünya!")
|
||||
|
||||
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="net.teteos.example")
|
||||
app.run(sys.argv)
|
172
libadwaita/2-buttons.py
Normal file
|
@ -0,0 +1,172 @@
|
|||
import sys
|
||||
import gi
|
||||
import os
|
||||
gi.require_version (
|
||||
'Gtk', '4.0'
|
||||
)
|
||||
gi.require_version (
|
||||
'Adw', '1'
|
||||
)
|
||||
from gi.repository import Gtk, Adw, GLib, Gio, Gdk
|
||||
|
||||
class MainWindow (Gtk.ApplicationWindow):
|
||||
def __init__ (self, *args, **kwargs):
|
||||
super ().__init__ (*args, **kwargs)
|
||||
GLib.set_application_name ('Adwaita Buttons')
|
||||
GLib.set_prgname ('Adwaita Examples by Afacanc38')
|
||||
|
||||
self.set_default_size (500, 600)
|
||||
|
||||
css_provider = Gtk.CssProvider()
|
||||
css_provider.load_from_file(Gio.File.new_for_path(f'{os.path.dirname(os.path.realpath(__file__))}/resources/2-buttons.css'))
|
||||
Gtk.StyleContext.add_provider_for_display(Gdk.Display.get_default(), css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
|
||||
|
||||
self.hb = Gtk.HeaderBar ()
|
||||
self.set_titlebar (self.hb)
|
||||
|
||||
self.scroll = Gtk.ScrolledWindow ()
|
||||
self.scroll.set_policy (Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
|
||||
self.set_child (self.scroll)
|
||||
|
||||
self.main_box = Gtk.Box (
|
||||
spacing = 10,
|
||||
orientation = Gtk.Orientation.VERTICAL
|
||||
)
|
||||
self.main_box.set_margin_top (20)
|
||||
self.main_box.set_margin_bottom (20)
|
||||
self.main_box.set_margin_start (20)
|
||||
self.main_box.set_margin_end (20)
|
||||
self.scroll.set_child(self.main_box)
|
||||
|
||||
self.box_normal_buttons_group = Gtk.Box (
|
||||
spacing = 6,
|
||||
orientation = Gtk.Orientation.VERTICAL,
|
||||
halign = Gtk.Align.START,
|
||||
valign = Gtk.Align.CENTER
|
||||
)
|
||||
self.main_box.append (self.box_normal_buttons_group)
|
||||
|
||||
self.lbl_normal_buttons_title = Gtk.Label (
|
||||
label = 'Normal Buttons',
|
||||
halign = Gtk.Align.START
|
||||
)
|
||||
self.lbl_normal_buttons_title.get_style_context().add_class ('title-1')
|
||||
self.box_normal_buttons_group.append (self.lbl_normal_buttons_title)
|
||||
|
||||
self.box_normal_buttons = Gtk.Box (
|
||||
spacing = 6
|
||||
)
|
||||
self.box_normal_buttons_group.append (self.box_normal_buttons)
|
||||
|
||||
self.normal_button_regular = Gtk.Button (
|
||||
label = 'Regular'
|
||||
)
|
||||
self.box_normal_buttons.append (self.normal_button_regular)
|
||||
|
||||
self.normal_button_flat = Gtk.Button (
|
||||
label = 'Flat'
|
||||
)
|
||||
self.normal_button_flat.get_style_context().add_class ('flat')
|
||||
self.box_normal_buttons.append (self.normal_button_flat)
|
||||
|
||||
self.normal_button_suggested = Gtk.Button (
|
||||
label = 'Suggested'
|
||||
)
|
||||
self.normal_button_suggested.get_style_context ().add_class ('suggested-action')
|
||||
self.box_normal_buttons.append (self.normal_button_suggested)
|
||||
|
||||
self.normal_button_destructive = Gtk.Button (
|
||||
label = 'Destructive'
|
||||
)
|
||||
self.normal_button_destructive.get_style_context ().add_class ('destructive-action')
|
||||
self.box_normal_buttons.append (self.normal_button_destructive)
|
||||
|
||||
self.box_custom_buttons = Gtk.Box (
|
||||
spacing = 6
|
||||
)
|
||||
self.box_normal_buttons_group.append (self.box_custom_buttons)
|
||||
|
||||
self.custom_button_green = Gtk.Button (
|
||||
label = 'Custom'
|
||||
)
|
||||
self.custom_button_green.get_style_context ().add_class ('green')
|
||||
self.box_custom_buttons.append (self.custom_button_green)
|
||||
|
||||
self.custom_button_purple = Gtk.Button (
|
||||
label = 'Custom'
|
||||
)
|
||||
self.custom_button_purple.get_style_context ().add_class ('purple')
|
||||
self.box_custom_buttons.append (self.custom_button_purple)
|
||||
|
||||
self.custom_button_yellow = Gtk.Button (
|
||||
label = 'Custom'
|
||||
)
|
||||
self.custom_button_yellow.get_style_context ().add_class ('yellow')
|
||||
self.box_custom_buttons.append (self.custom_button_yellow)
|
||||
|
||||
self.custom_button_orange = Gtk.Button (
|
||||
label = 'Custom'
|
||||
)
|
||||
self.custom_button_orange.get_style_context ().add_class ('orange')
|
||||
self.box_custom_buttons.append (self.custom_button_orange)
|
||||
|
||||
self.box_other_buttons_group = Gtk.Box (
|
||||
spacing = 6,
|
||||
orientation = Gtk.Orientation.VERTICAL,
|
||||
halign = Gtk.Align.START,
|
||||
valign = Gtk.Align.CENTER
|
||||
)
|
||||
self.main_box.append (self.box_other_buttons_group)
|
||||
|
||||
self.lbl_ohter_buttons_title = Gtk.Label (
|
||||
label = 'Other Buttons',
|
||||
halign = Gtk.Align.START
|
||||
)
|
||||
self.lbl_ohter_buttons_title.get_style_context ().add_class ('title-1')
|
||||
self.box_other_buttons_group.append (self.lbl_ohter_buttons_title)
|
||||
|
||||
self.box_other_buttons = Gtk.Box (
|
||||
spacing = 6
|
||||
)
|
||||
self.box_other_buttons_group.append (self.box_other_buttons)
|
||||
|
||||
self.circular_button_1 = Gtk.Button.new_from_icon_name ('go-home-symbolic')
|
||||
self.circular_button_1.get_style_context().add_class ('circular')
|
||||
self.box_other_buttons.append (self.circular_button_1)
|
||||
|
||||
self.circular_button_2 = Gtk.Button.new_from_icon_name ('document-save-symbolic')
|
||||
self.circular_button_2.get_style_context().add_class ('circular')
|
||||
self.box_other_buttons.append (self.circular_button_2)
|
||||
|
||||
self.circular_button_3 = Gtk.Button.new_from_icon_name ('document-properties-symbolic')
|
||||
self.circular_button_3.get_style_context().add_class ('circular')
|
||||
self.box_other_buttons.append (self.circular_button_3)
|
||||
|
||||
self.box_other_buttons_2 = Gtk.Box (
|
||||
spacing = 6
|
||||
)
|
||||
self.box_other_buttons_group.append (self.box_other_buttons_2)
|
||||
|
||||
self.pill_button = Gtk.Button (
|
||||
label = 'Pill Button'
|
||||
)
|
||||
self.pill_button.get_style_context ().add_class ('pill')
|
||||
self.box_other_buttons_2.append (self.pill_button)
|
||||
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.adw-buttons'
|
||||
)
|
||||
app.run(sys.argv)
|
165
libadwaita/3-leaflet.py
Normal file
|
@ -0,0 +1,165 @@
|
|||
import sys
|
||||
import gi
|
||||
import os
|
||||
gi.require_version (
|
||||
'Gtk', '4.0'
|
||||
)
|
||||
gi.require_version (
|
||||
'Adw', '1'
|
||||
)
|
||||
from gi.repository import Gtk, Adw, GLib, Gio, Gdk
|
||||
|
||||
class MainWindow (Gtk.ApplicationWindow):
|
||||
def __init__ (self, *args, **kwargs):
|
||||
super ().__init__ (
|
||||
*args,
|
||||
**kwargs
|
||||
)
|
||||
|
||||
GLib.set_application_name (
|
||||
'Adwaita Leaflet'
|
||||
)
|
||||
GLib.set_prgname (
|
||||
'Adwaita Examples by Afacanc38'
|
||||
)
|
||||
|
||||
self.set_default_size (300, 300)
|
||||
|
||||
self.hb = Gtk.HeaderBar ()
|
||||
self.set_titlebar (self.hb)
|
||||
|
||||
self.lf_main = Adw.Leaflet (
|
||||
halign = Gtk.Align.FILL,
|
||||
valign = Gtk.Align.FILL
|
||||
)
|
||||
self.lf_main.set_can_unfold (False)
|
||||
self.set_child (
|
||||
self.lf_main
|
||||
)
|
||||
|
||||
# Home Page
|
||||
|
||||
self.pg_home = Gtk.Box (
|
||||
spacing = 6,
|
||||
halign = Gtk.Align.FILL,
|
||||
valign = Gtk.Align.FILL,
|
||||
hexpand = True,
|
||||
vexpand = True,
|
||||
orientation = Gtk.Orientation.VERTICAL
|
||||
)
|
||||
self.pg_home.set_margin_top (20)
|
||||
self.pg_home.set_margin_bottom (20)
|
||||
self.pg_home.set_margin_start (20)
|
||||
self.pg_home.set_margin_end (20)
|
||||
|
||||
self.lf_main.append (
|
||||
self.pg_home
|
||||
)
|
||||
|
||||
self.btn_go_second = Gtk.Button (
|
||||
label = "Go to second page"
|
||||
)
|
||||
self.btn_go_second.connect (
|
||||
'clicked',
|
||||
self.on_btn_go_second
|
||||
)
|
||||
self.btn_go_second.get_style_context ().add_class ('pill')
|
||||
self.pg_home.append (
|
||||
self.btn_go_second
|
||||
)
|
||||
self.sw_box_set_can_unfold = Gtk.Box (
|
||||
spacing = 6,
|
||||
orientation = Gtk.Orientation.HORIZONTAL
|
||||
)
|
||||
self.pg_home.append (
|
||||
self.sw_box_set_can_unfold
|
||||
)
|
||||
self.sw_set_can_unfold = Gtk.Switch ()
|
||||
self.sw_set_can_unfold.set_active (True)
|
||||
self.sw_set_can_unfold.connect (
|
||||
'notify::active',
|
||||
self.on_set_can_unfold
|
||||
)
|
||||
self.sw_box_set_can_unfold.append (
|
||||
self.sw_set_can_unfold
|
||||
)
|
||||
|
||||
self.sw_lbl_set_can_unfold = Gtk.Label (
|
||||
label = 'Can unfold'
|
||||
)
|
||||
self.sw_box_set_can_unfold.append (
|
||||
self.sw_lbl_set_can_unfold
|
||||
)
|
||||
|
||||
# Second page
|
||||
|
||||
self.pg_second = Gtk.Box (
|
||||
spacing = 6,
|
||||
halign = Gtk.Align.FILL,
|
||||
valign = Gtk.Align.FILL,
|
||||
hexpand = True,
|
||||
vexpand = True,
|
||||
orientation = Gtk.Orientation.VERTICAL
|
||||
)
|
||||
|
||||
self.pg_second.set_margin_top (20)
|
||||
self.pg_second.set_margin_bottom (20)
|
||||
self.pg_second.set_margin_start (20)
|
||||
self.pg_second.set_margin_end (20)
|
||||
|
||||
self.lf_main.append (
|
||||
self.pg_second
|
||||
)
|
||||
|
||||
self.lbl_pg2 = Gtk.Label (
|
||||
label = 'Second Page'
|
||||
)
|
||||
self.pg_second.append (
|
||||
self.lbl_pg2
|
||||
)
|
||||
|
||||
self.btn_go_home = Gtk.Button (
|
||||
label = "Retrun to home"
|
||||
)
|
||||
self.btn_go_home.get_style_context ().add_class ('pill')
|
||||
self.pg_second.append (
|
||||
self.btn_go_home
|
||||
)
|
||||
self.btn_go_home.connect (
|
||||
'clicked',
|
||||
self.on_btn_go_home
|
||||
)
|
||||
|
||||
|
||||
def on_set_can_unfold (self, switch, gparam):
|
||||
if self.sw_set_can_unfold.get_active() == False:
|
||||
self.lf_main.set_can_unfold (True)
|
||||
else:
|
||||
self.lf_main.set_can_unfold (False)
|
||||
|
||||
def on_btn_go_second (self, widget):
|
||||
self.lf_main.set_visible_child (self.pg_second)
|
||||
|
||||
def on_btn_go_home (self, widget):
|
||||
self.lf_main.set_visible_child (self.pg_home)
|
||||
|
||||
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.adw-leaflet'
|
||||
)
|
||||
app.run (sys.argv)
|
109
libadwaita/4-clamp.py
Normal file
|
@ -0,0 +1,109 @@
|
|||
import sys
|
||||
import gi
|
||||
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
|
||||
)
|
||||
# Set application name
|
||||
GLib.set_prgname (
|
||||
'Adwaita Examples by Afacanc38'
|
||||
)
|
||||
GLib.set_application_name (
|
||||
'Adwaita Clamp'
|
||||
)
|
||||
|
||||
self.box_main = Gtk.Box (
|
||||
orientation = Gtk.Orientation.VERTICAL
|
||||
)
|
||||
self.set_content (
|
||||
self.box_main
|
||||
)
|
||||
|
||||
# Headerbar
|
||||
self.hb = Gtk.HeaderBar ()
|
||||
self.box_main.append (
|
||||
self.hb
|
||||
)
|
||||
|
||||
# Clamp widget
|
||||
self.clamp = Adw.Clamp ()
|
||||
self.box_main.append (
|
||||
self.clamp
|
||||
)
|
||||
|
||||
# Wrapper inside Adw.Clamp
|
||||
self.box_wrapper = Gtk.Box (
|
||||
spacing = 10,
|
||||
margin_start = 20,
|
||||
margin_end = 20,
|
||||
margin_top = 20,
|
||||
margin_bottom = 20,
|
||||
orientation = Gtk.Orientation.VERTICAL
|
||||
)
|
||||
self.clamp.set_child (
|
||||
self.box_wrapper
|
||||
)
|
||||
|
||||
# Label
|
||||
self.lbl1 = Gtk.Label (
|
||||
label = 'This widget is inside the Clamp.',
|
||||
halign = Gtk.Align.CENTER
|
||||
)
|
||||
self.lbl1.get_style_context ().add_class (
|
||||
'title-1'
|
||||
)
|
||||
self.lbl1.set_wrap (
|
||||
True
|
||||
)
|
||||
self.box_wrapper.append (
|
||||
self.lbl1
|
||||
)
|
||||
|
||||
# Sample box
|
||||
self.box_sample = Gtk.Box ()
|
||||
self.box_sample.get_style_context ().add_class (
|
||||
'card'
|
||||
)
|
||||
self.box_wrapper.append (
|
||||
self.box_sample
|
||||
)
|
||||
|
||||
# Label inside sample box
|
||||
self.lbl2 = Gtk.Label (
|
||||
label = "I am a box",
|
||||
margin_start = 10,
|
||||
margin_end = 10,
|
||||
margin_top = 10,
|
||||
margin_bottom = 10,
|
||||
)
|
||||
self.box_sample.append (
|
||||
self.lbl2
|
||||
)
|
||||
|
||||
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.adw-clamp'
|
||||
)
|
||||
app.run (sys.argv)
|
360
libadwaita/5-lists.py
Normal file
|
@ -0,0 +1,360 @@
|
|||
import sys
|
||||
import gi
|
||||
import os
|
||||
gi.require_version('Gtk', '4.0')
|
||||
gi.require_version('Adw', '1')
|
||||
from gi.repository import Gtk, Adw, GLib, Gio, Gdk
|
||||
|
||||
class MainWindow (Gtk.Window):
|
||||
def __init__ (self, *args, **kwargs):
|
||||
super ().__init__ (*args, **kwargs)
|
||||
|
||||
GLib.set_prgname (
|
||||
'Adwaita Examples by Afacanc38'
|
||||
)
|
||||
GLib.set_application_name (
|
||||
'Adwaita ListBox'
|
||||
)
|
||||
|
||||
self.set_default_size (650, 500)
|
||||
self.set_size_request (400, 400)
|
||||
|
||||
self.scroll = Gtk.ScrolledWindow ()
|
||||
self.scroll.set_policy (Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
|
||||
self.set_child (self.scroll)
|
||||
|
||||
self.box_main = Gtk.Box (
|
||||
orientation = Gtk.Orientation.VERTICAL
|
||||
)
|
||||
self.scroll.set_child (
|
||||
self.box_main
|
||||
)
|
||||
|
||||
# HeaderBar
|
||||
self.hb = Gtk.HeaderBar ()
|
||||
self.set_titlebar (
|
||||
self.hb
|
||||
)
|
||||
|
||||
# Clamp
|
||||
self.clamp = Adw.Clamp ()
|
||||
self.box_main.append (
|
||||
self.clamp
|
||||
)
|
||||
|
||||
# Wrapper
|
||||
self.box_wrapper = Gtk.Box (
|
||||
orientation = Gtk.Orientation.VERTICAL,
|
||||
margin_top = 20,
|
||||
margin_bottom = 20,
|
||||
margin_start = 20,
|
||||
margin_end = 20
|
||||
)
|
||||
self.clamp.set_child (
|
||||
self.box_wrapper
|
||||
)
|
||||
|
||||
# Header
|
||||
self.box_header = Gtk.Box (
|
||||
orientation = Gtk.Orientation.VERTICAL,
|
||||
margin_bottom = 10
|
||||
)
|
||||
self.box_wrapper.append (
|
||||
self.box_header
|
||||
)
|
||||
|
||||
# Title
|
||||
self.lbl_title = Gtk.Label (
|
||||
label = "Lists",
|
||||
halign = Gtk.Align.CENTER,
|
||||
wrap = True
|
||||
)
|
||||
self.lbl_title.get_style_context ().add_class ('title-1')
|
||||
self.box_header.append (
|
||||
self.lbl_title
|
||||
)
|
||||
|
||||
self.box_listbox_wrapper = Gtk.Box (
|
||||
spacing = 20,
|
||||
orientation = Gtk.Orientation.VERTICAL
|
||||
)
|
||||
self.box_wrapper.append (
|
||||
self.box_listbox_wrapper
|
||||
)
|
||||
|
||||
# ListBox
|
||||
self.listbox1 = Gtk.ListBox (
|
||||
selection_mode = Gtk.SelectionMode.NONE
|
||||
)
|
||||
self.listbox1.get_style_context ().add_class ('boxed-list')
|
||||
self.box_listbox_wrapper.append (
|
||||
self.listbox1
|
||||
)
|
||||
|
||||
# Row 1
|
||||
self.row_listbox1_1 = Adw.ActionRow (
|
||||
title = 'ActionRow',
|
||||
subtitle = 'This ActionRow has subtitle and icon',
|
||||
icon_name = 'emblem-system-symbolic'
|
||||
)
|
||||
self.listbox1.append (
|
||||
self.row_listbox1_1
|
||||
)
|
||||
|
||||
# Row 2
|
||||
self.row_listbox1_2 = Adw.ActionRow (
|
||||
title = 'ActionRow can have suffix widgets',
|
||||
icon_name = 'go-home-symbolic',
|
||||
subtitle = 'This listbox has subtitle, suffix widget and icon'
|
||||
)
|
||||
|
||||
self.btn_listbox1_2_suffix = Gtk.Button (
|
||||
label = 'Button',
|
||||
halign = Gtk.Align.CENTER,
|
||||
valign = Gtk.Align.CENTER,
|
||||
)
|
||||
self.row_listbox1_2.add_suffix (
|
||||
self.btn_listbox1_2_suffix
|
||||
)
|
||||
|
||||
self.listbox1.append (
|
||||
self.row_listbox1_2
|
||||
)
|
||||
|
||||
# ListBox 2
|
||||
self.listbox2 = Gtk.ListBox (
|
||||
selection_mode = Gtk.SelectionMode.NONE
|
||||
)
|
||||
self.listbox2.get_style_context ().add_class ('boxed-list')
|
||||
self.box_listbox_wrapper.append (
|
||||
self.listbox2
|
||||
)
|
||||
|
||||
# Row 1
|
||||
self.row_listbox2_1 = Adw.ActionRow (
|
||||
title = 'ActionRow can have prefix widgets',
|
||||
activatable = True
|
||||
)
|
||||
|
||||
self.rd_listbox2_1_prefix = Gtk.CheckButton ()
|
||||
self.row_listbox2_1.add_prefix (
|
||||
self.rd_listbox2_1_prefix
|
||||
)
|
||||
self.row_listbox2_1.set_activatable_widget (
|
||||
self.rd_listbox2_1_prefix
|
||||
)
|
||||
|
||||
self.listbox2.append (
|
||||
self.row_listbox2_1
|
||||
)
|
||||
|
||||
# Row 2
|
||||
self.row_listbox2_2 = Adw.ActionRow (
|
||||
title = 'ActionRow can have prefix widgets',
|
||||
activatable = True
|
||||
)
|
||||
|
||||
self.rd_listbox2_2_prefix = Gtk.CheckButton ()
|
||||
self.row_listbox2_2.add_prefix (
|
||||
self.rd_listbox2_2_prefix
|
||||
)
|
||||
self.rd_listbox2_2_prefix.set_group (
|
||||
self.rd_listbox2_1_prefix
|
||||
)
|
||||
self.row_listbox2_2.set_activatable_widget (
|
||||
self.rd_listbox2_2_prefix
|
||||
)
|
||||
|
||||
self.listbox2.append (
|
||||
self.row_listbox2_2
|
||||
)
|
||||
|
||||
# ListBox 3
|
||||
self.prfgr_listbox3 = Adw.PreferencesGroup (
|
||||
title = 'Expander Rows',
|
||||
margin_top = 10
|
||||
)
|
||||
self.box_wrapper.append (
|
||||
self.prfgr_listbox3
|
||||
)
|
||||
|
||||
self.listbox3 = Gtk.ListBox (
|
||||
selection_mode = Gtk.SelectionMode.NONE
|
||||
)
|
||||
self.listbox3.get_style_context ().add_class ('boxed-list')
|
||||
self.prfgr_listbox3.add (
|
||||
self.listbox3
|
||||
)
|
||||
|
||||
# ExpanderRow 1
|
||||
self.row_listbox3_1 = Adw.ExpanderRow (
|
||||
title = 'ExpanderRow',
|
||||
subtitle = 'This ActionRow has subtitle and icon',
|
||||
icon_name = 'emblem-system-symbolic'
|
||||
)
|
||||
self.listbox3.append (
|
||||
self.row_listbox3_1
|
||||
)
|
||||
|
||||
for x in range(3):
|
||||
self.row_listbox3_1.add_row (
|
||||
Adw.ActionRow (
|
||||
title = 'Nested row',
|
||||
)
|
||||
)
|
||||
# ExpanderRow 2
|
||||
self.row_listbox3_2 = Adw.ExpanderRow (
|
||||
title = 'ExpanderRow',
|
||||
subtitle = 'With an action',
|
||||
icon_name = 'emblem-system-symbolic'
|
||||
)
|
||||
self.btn_listbox3_2_action = Gtk.Button.new_from_icon_name (
|
||||
'edit-copy-symbolic',
|
||||
)
|
||||
self.btn_listbox3_2_action.set_halign (Gtk.Align.CENTER)
|
||||
self.btn_listbox3_2_action.set_valign (Gtk.Align.CENTER)
|
||||
self.row_listbox3_2.add_action (
|
||||
self.btn_listbox3_2_action
|
||||
)
|
||||
self.listbox3.append (
|
||||
self.row_listbox3_2
|
||||
)
|
||||
|
||||
for x in range(3):
|
||||
self.row_listbox3_2.add_row (
|
||||
Adw.ActionRow (
|
||||
title = 'Nested row',
|
||||
)
|
||||
)
|
||||
|
||||
# ListBox 4
|
||||
self.prfgr_listbox4 = Adw.PreferencesGroup (
|
||||
title = 'Preferences Group has a suffix',
|
||||
margin_top = 10
|
||||
)
|
||||
|
||||
self.btn_prfgr_listbox4_suffix = Gtk.Button ()
|
||||
self.btn_prfgr_listbox4_suffix.get_style_context ().add_class (
|
||||
'image-text-button'
|
||||
)
|
||||
self.btn_prfgr_listbox4_suffix.get_style_context ().add_class (
|
||||
'flat'
|
||||
)
|
||||
|
||||
self.btn_prfgr_listbox4_suffix_content = Adw.ButtonContent (
|
||||
label = 'Button',
|
||||
icon_name = 'view-pin-symbolic'
|
||||
)
|
||||
self.btn_prfgr_listbox4_suffix.set_child (
|
||||
self.btn_prfgr_listbox4_suffix_content
|
||||
)
|
||||
|
||||
self.prfgr_listbox4.set_header_suffix (
|
||||
self.btn_prfgr_listbox4_suffix
|
||||
)
|
||||
|
||||
self.box_wrapper.append (
|
||||
self.prfgr_listbox4
|
||||
)
|
||||
|
||||
self.listbox4 = Gtk.ListBox (
|
||||
selection_mode = Gtk.SelectionMode.NONE
|
||||
)
|
||||
self.listbox4.get_style_context ().add_class ('boxed-list')
|
||||
self.prfgr_listbox4.add (
|
||||
self.listbox4
|
||||
)
|
||||
|
||||
# ExpanderRow 1
|
||||
self.row_listbox4_1 = Adw.ExpanderRow (
|
||||
title = 'ExpanderRow',
|
||||
subtitle = 'This ActionRow has subtitle and icon',
|
||||
icon_name = 'emblem-system-symbolic'
|
||||
)
|
||||
self.listbox4.append (
|
||||
self.row_listbox4_1
|
||||
)
|
||||
|
||||
for x in range(3):
|
||||
self.row_listbox4_1.add_row (
|
||||
Adw.ActionRow (
|
||||
title = 'Nested row',
|
||||
)
|
||||
)
|
||||
|
||||
# ExpanderRow 2
|
||||
self.row_listbox4_2 = Adw.ExpanderRow (
|
||||
title = 'ExpanderRow',
|
||||
subtitle = 'This ActionRow has subtitle and icon',
|
||||
icon_name = 'emblem-system-symbolic',
|
||||
show_enable_switch = True
|
||||
)
|
||||
self.listbox4.append (
|
||||
self.row_listbox4_2
|
||||
)
|
||||
|
||||
for x in range(3):
|
||||
self.row_listbox4_2.add_row (
|
||||
Adw.ActionRow (
|
||||
title = 'Nested row',
|
||||
)
|
||||
)
|
||||
|
||||
# ListBox 5
|
||||
self.prfgr_listbox5 = Adw.PreferencesGroup (
|
||||
title = 'Combo Rows',
|
||||
margin_top = 10
|
||||
)
|
||||
self.box_wrapper.append (
|
||||
self.prfgr_listbox5
|
||||
)
|
||||
|
||||
self.listbox5 = Gtk.ListBox (
|
||||
selection_mode = Gtk.SelectionMode.NONE
|
||||
)
|
||||
self.listbox5.get_style_context ().add_class ('boxed-list')
|
||||
self.prfgr_listbox5.add (
|
||||
self.listbox5
|
||||
)
|
||||
|
||||
self.strlist_listbox5_1 = Gtk.StringList ()
|
||||
self.strlist_listbox5_1.append ('Foo')
|
||||
self.strlist_listbox5_1.append ('Bar')
|
||||
self.strlist_listbox5_1.append ('Baz')
|
||||
# Row 1
|
||||
self.row_listbox5_1 = Adw.ComboRow (
|
||||
title = 'This a combo row'
|
||||
)
|
||||
self.row_listbox5_1.connect (
|
||||
'notify::selected-item',
|
||||
self.on_row_listbox5_1_select
|
||||
)
|
||||
self.row_listbox5_1.set_model (
|
||||
self.strlist_listbox5_1
|
||||
)
|
||||
self.listbox5.append (
|
||||
self.row_listbox5_1
|
||||
)
|
||||
def on_row_listbox5_1_select (self, widget, event):
|
||||
print (f'"{self.row_listbox5_1.get_selected_item ().get_string ()}" is selected.')
|
||||
|
||||
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.adw-listbox'
|
||||
)
|
||||
app.run (sys.argv)
|
184
libadwaita/6-view-switcher.py
Normal file
|
@ -0,0 +1,184 @@
|
|||
import sys
|
||||
import gi
|
||||
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_prgname (
|
||||
'Adwaita Examples by Afacanc38'
|
||||
)
|
||||
GLib.set_application_name (
|
||||
'Adwaita ViewSwitcher'
|
||||
)
|
||||
|
||||
self.set_name (
|
||||
'ViewSwitcherDemo'
|
||||
)
|
||||
self.set_default_size (600, 300)
|
||||
|
||||
self.box_main = Gtk.Box (
|
||||
orientation = Gtk.Orientation.VERTICAL,
|
||||
halign = Gtk.Align.FILL,
|
||||
valign = Gtk.Align.FILL,
|
||||
hexpand = True,
|
||||
vexpand = True
|
||||
)
|
||||
self.set_content (
|
||||
self.box_main
|
||||
)
|
||||
|
||||
self.hb = Adw.HeaderBar ()
|
||||
self.box_main.append (self.hb)
|
||||
|
||||
self.stack = Adw.ViewStack ()
|
||||
self.box_main.append (
|
||||
self.stack
|
||||
)
|
||||
|
||||
# Squieezer
|
||||
self.sq_viewswitcher = Adw.Squeezer ()
|
||||
self.sq_viewswitcher.set_switch_threshold_policy (
|
||||
Adw.FoldThresholdPolicy.NATURAL
|
||||
)
|
||||
self.sq_viewswitcher.set_transition_type (
|
||||
Adw.SqueezerTransitionType.CROSSFADE
|
||||
)
|
||||
self.sq_viewswitcher.set_xalign (1)
|
||||
self.sq_viewswitcher.set_homogeneous (True)
|
||||
self.hb.set_title_widget (
|
||||
self.sq_viewswitcher
|
||||
)
|
||||
|
||||
# ViewSwitcher (wide)
|
||||
self.viewswitcher_wide = Adw.ViewSwitcher ()
|
||||
self.viewswitcher_wide.set_policy(
|
||||
Adw.ViewSwitcherPolicy.WIDE
|
||||
)
|
||||
self.viewswitcher_wide.set_stack (
|
||||
self.stack
|
||||
)
|
||||
self.sq_viewswitcher.add (
|
||||
self.viewswitcher_wide
|
||||
)
|
||||
|
||||
# ViewSwitcher (narrow)
|
||||
self.viewswitcher_narrow = Adw.ViewSwitcher ()
|
||||
self.viewswitcher_narrow.set_policy(
|
||||
Adw.ViewSwitcherPolicy.NARROW
|
||||
)
|
||||
self.viewswitcher_narrow.set_stack (
|
||||
self.stack
|
||||
)
|
||||
self.sq_viewswitcher.add (
|
||||
self.viewswitcher_narrow
|
||||
)
|
||||
|
||||
# ViewSwitcherBar (bottom viewswitcher)
|
||||
self.viewswitcherbar = Adw.ViewSwitcherBar (
|
||||
vexpand = True,
|
||||
valign = Gtk.Align.END
|
||||
)
|
||||
self.viewswitcherbar.set_stack (
|
||||
self.stack
|
||||
)
|
||||
self.viewswitcherbar.set_reveal (False)
|
||||
self.box_main.append (
|
||||
self.viewswitcherbar
|
||||
)
|
||||
|
||||
# Window Title
|
||||
self.wintitle = Adw.WindowTitle (
|
||||
title = 'Adwaita ViewSwitcher'
|
||||
)
|
||||
self.sq_viewswitcher.add (self.wintitle)
|
||||
|
||||
# Connect signals
|
||||
self.sq_viewswitcher.connect (
|
||||
'notify::visible-child',
|
||||
self.on_sq_get_visible_child
|
||||
)
|
||||
|
||||
# Page 1
|
||||
self.page1 = Adw.StatusPage (
|
||||
title = 'Apps',
|
||||
icon_name = 'view-grid-symbolic',
|
||||
valign = Gtk.Align.CENTER,
|
||||
vexpand = True
|
||||
)
|
||||
self.stack.add_titled (
|
||||
self.page1,
|
||||
'page0',
|
||||
'Apps'
|
||||
)
|
||||
self.stack.get_page (self.page1).set_icon_name (
|
||||
'view-grid-symbolic'
|
||||
)
|
||||
|
||||
# Page 2
|
||||
self.page2 = Adw.StatusPage (
|
||||
title = 'Installed',
|
||||
icon_name = 'system-software-install-symbolic',
|
||||
valign = Gtk.Align.CENTER,
|
||||
vexpand = True
|
||||
)
|
||||
self.stack.add_titled (
|
||||
self.page2,
|
||||
'page1',
|
||||
'Installed'
|
||||
)
|
||||
self.stack.get_page (self.page2).set_icon_name (
|
||||
'system-software-install-symbolic'
|
||||
)
|
||||
|
||||
# Page 3
|
||||
self.page3 = Adw.StatusPage (
|
||||
title = 'Updates',
|
||||
icon_name = 'view-refresh-symbolic',
|
||||
valign = Gtk.Align.CENTER,
|
||||
vexpand = True
|
||||
)
|
||||
self.stack.add_titled (
|
||||
self.page3,
|
||||
'page2',
|
||||
'Updates'
|
||||
)
|
||||
self.stack.get_page (self.page3).set_icon_name (
|
||||
'view-refresh-symbolic'
|
||||
)
|
||||
|
||||
def on_sq_get_visible_child (self, widget, event):
|
||||
if self.sq_viewswitcher.get_visible_child() == self.wintitle:
|
||||
self.viewswitcherbar.set_reveal (True)
|
||||
else:
|
||||
self.viewswitcherbar.set_reveal (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.adw-viewswitcher'
|
||||
)
|
||||
app.run (sys.argv)
|
252
libadwaita/7-carousel.py
Normal file
|
@ -0,0 +1,252 @@
|
|||
import sys
|
||||
import gi
|
||||
gi.require_version (
|
||||
'Gtk',
|
||||
'4.0'
|
||||
)
|
||||
gi.require_version (
|
||||
'Adw',
|
||||
'1'
|
||||
)
|
||||
from gi.repository import Gtk, Adw, GLib
|
||||
|
||||
class MainWindow (Adw.Window):
|
||||
def __init__ (self, *args, **kwargs):
|
||||
super ().__init__ (
|
||||
*args,
|
||||
**kwargs
|
||||
)
|
||||
GLib.set_prgname (
|
||||
'Adwaita Examples by Afacanc38'
|
||||
)
|
||||
GLib.set_application_name (
|
||||
'Adwaita Carousel'
|
||||
)
|
||||
self.set_default_size (650, 500)
|
||||
self.set_size_request (400, 400)
|
||||
|
||||
self.box_main = Gtk.Box (
|
||||
orientation = Gtk.Orientation.VERTICAL,
|
||||
valign = Gtk.Align.FILL,
|
||||
vexpand = True
|
||||
)
|
||||
self.set_content (
|
||||
self.box_main
|
||||
)
|
||||
|
||||
self.hb = Gtk.HeaderBar ()
|
||||
self.box_main.append (
|
||||
self.hb
|
||||
)
|
||||
|
||||
# Carousel
|
||||
self.carousel = Adw.Carousel (
|
||||
hexpand = True,
|
||||
vexpand = True,
|
||||
allow_scroll_wheel = True,
|
||||
allow_long_swipes = False
|
||||
)
|
||||
self.box_main.append (
|
||||
self.carousel
|
||||
)
|
||||
|
||||
# Indicator
|
||||
self.stk_indicator = Gtk.Stack (
|
||||
transition_type = Gtk.StackTransitionType.CROSSFADE
|
||||
)
|
||||
self.box_main.append (
|
||||
self.stk_indicator
|
||||
)
|
||||
self.carousel_dots = Adw.CarouselIndicatorDots (
|
||||
carousel = self.carousel
|
||||
)
|
||||
self.stk_indicator.add_titled (
|
||||
self.carousel_dots,
|
||||
'page0',
|
||||
'page0'
|
||||
)
|
||||
self.carousel_lines = Adw.CarouselIndicatorLines (
|
||||
carousel = self.carousel
|
||||
)
|
||||
self.stk_indicator.add_titled (
|
||||
self.carousel_lines,
|
||||
'page1',
|
||||
'page1'
|
||||
)
|
||||
|
||||
# Page 1
|
||||
self.page1 = Adw.StatusPage (
|
||||
title = 'Carousel',
|
||||
description = 'A widget for paginated scrolling.',
|
||||
icon_name = 'go-next-symbolic',
|
||||
hexpand = True,
|
||||
vexpand = True,
|
||||
)
|
||||
self.carousel.append (
|
||||
self.page1
|
||||
)
|
||||
# Page 2
|
||||
self.page2 = Gtk.Box (
|
||||
hexpand = True,
|
||||
vexpand = True,
|
||||
halign = Gtk.Align.CENTER,
|
||||
valign = Gtk.Align.CENTER
|
||||
)
|
||||
self.carousel.append (
|
||||
self.page2
|
||||
)
|
||||
|
||||
self.clamp = Adw.Clamp ()
|
||||
self.page2.append (
|
||||
self.clamp
|
||||
)
|
||||
|
||||
self.listbox = Gtk.ListBox (
|
||||
selection_mode = Gtk.SelectionMode.NONE
|
||||
)
|
||||
self.listbox.get_style_context ().add_class (
|
||||
'boxed-list'
|
||||
)
|
||||
self.clamp.set_child (
|
||||
self.listbox
|
||||
)
|
||||
|
||||
self.setting1 = Adw.ComboRow (
|
||||
title = 'Indicator Style'
|
||||
)
|
||||
self.strlist1 = Gtk.StringList ()
|
||||
self.strlist1.append (
|
||||
'Dots'
|
||||
)
|
||||
self.strlist1.append (
|
||||
'Lines'
|
||||
)
|
||||
self.setting1.set_model (
|
||||
self.strlist1
|
||||
)
|
||||
self.setting1.connect (
|
||||
'notify::selected-item',
|
||||
self.on_setting1_set
|
||||
)
|
||||
self.listbox.append (
|
||||
self.setting1
|
||||
)
|
||||
|
||||
self.setting2 = Adw.ActionRow (
|
||||
title = 'Long swipes'
|
||||
)
|
||||
self.sw_long_swipe = Gtk.Switch (
|
||||
valign = Gtk.Align.CENTER
|
||||
)
|
||||
self.sw_long_swipe.connect (
|
||||
'notify::active',
|
||||
self.on_long_swipe_set
|
||||
)
|
||||
self.setting2.add_suffix (
|
||||
self.sw_long_swipe
|
||||
)
|
||||
self.listbox.append (
|
||||
self.setting2
|
||||
)
|
||||
|
||||
self.setting3 = Adw.ActionRow (
|
||||
title = 'Scroll with mouse wheel'
|
||||
)
|
||||
self.sw_scroll_wheel = Gtk.Switch (
|
||||
valign = Gtk.Align.CENTER
|
||||
)
|
||||
self.sw_scroll_wheel.set_active (True)
|
||||
self.sw_scroll_wheel.connect (
|
||||
'notify::active',
|
||||
self.on_scroll_wheel_set
|
||||
)
|
||||
self.setting3.add_suffix (
|
||||
self.sw_scroll_wheel
|
||||
)
|
||||
self.listbox.append (
|
||||
self.setting3
|
||||
)
|
||||
for x in range(4):
|
||||
self.carousel.append (
|
||||
Adw.StatusPage (
|
||||
title = f'Page {x}',
|
||||
hexpand = True,
|
||||
vexpand = True,
|
||||
)
|
||||
)
|
||||
|
||||
self.page4 = Gtk.Box (
|
||||
orientation = Gtk.Orientation.VERTICAL,
|
||||
hexpand = True,
|
||||
vexpand = True,
|
||||
halign = Gtk.Align.CENTER,
|
||||
valign = Gtk.Align.CENTER
|
||||
)
|
||||
self.carousel.append (
|
||||
self.page4
|
||||
)
|
||||
|
||||
self.page4_status = Adw.StatusPage (
|
||||
title = 'Page 4',
|
||||
)
|
||||
self.page4.append (
|
||||
self.page4_status
|
||||
)
|
||||
|
||||
self.btn_go_first_page = Gtk.Button (
|
||||
label = 'Return to the first page'
|
||||
)
|
||||
self.btn_go_first_page.get_style_context ().add_class (
|
||||
'pill'
|
||||
)
|
||||
self.btn_go_first_page.connect (
|
||||
'clicked',
|
||||
self.go_first_page
|
||||
)
|
||||
self.btn_go_first_page.get_style_context ().add_class (
|
||||
'suggested-action'
|
||||
)
|
||||
self.page4.append (
|
||||
self.btn_go_first_page
|
||||
)
|
||||
|
||||
|
||||
def on_setting1_set (self, widget, event):
|
||||
if "Dots" in self.setting1.get_selected_item ().get_string ():
|
||||
self.stk_indicator.set_visible_child (self.carousel_dots)
|
||||
if "Lines" in self.setting1.get_selected_item ().get_string ():
|
||||
self.stk_indicator.set_visible_child (self.carousel_lines)
|
||||
|
||||
def on_long_swipe_set (self, widget, event):
|
||||
if self.sw_long_swipe.get_active ():
|
||||
self.carousel.set_allow_long_swipes (True)
|
||||
else:
|
||||
self.carousel.set_allow_long_swipes (False)
|
||||
|
||||
def on_scroll_wheel_set (self, widget, event):
|
||||
if self.sw_scroll_wheel.get_active ():
|
||||
self.carousel.set_allow_scroll_wheel (True)
|
||||
else:
|
||||
self.carousel.set_allow_scroll_wheel (False)
|
||||
|
||||
def go_first_page (self, widget):
|
||||
self.carousel.scroll_to (self.page1, True)
|
||||
|
||||
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.adw-viewswitcher'
|
||||
)
|
||||
app.run (sys.argv)
|
15
libadwaita/resources/2-buttons.css
Normal file
|
@ -0,0 +1,15 @@
|
|||
.green {
|
||||
background: #2ec27e;
|
||||
}
|
||||
|
||||
.yellow {
|
||||
background: #f5c211;
|
||||
}
|
||||
|
||||
.purple {
|
||||
background: #813d9c;
|
||||
}
|
||||
|
||||
.orange {
|
||||
background: #e66100;
|
||||
}
|
BIN
screenshots/handy/1-box-py.png
Normal file
After Width: | Height: | Size: 6.7 KiB |
BIN
screenshots/handy/2-headerbar-py.png
Normal file
After Width: | Height: | Size: 9 KiB |
BIN
screenshots/handy/3-revealer-py.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
screenshots/handy/4-stack-py.png
Normal file
After Width: | Height: | Size: 9.1 KiB |
BIN
screenshots/handy/5-style-classes-py.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
screenshots/handy/6-deck-py.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
screenshots/libadwaita/1-hello-world-py.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
screenshots/libadwaita/2-buttons-py.png
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
screenshots/libadwaita/3-leaflet-py.png
Normal file
After Width: | Height: | Size: 9.1 KiB |
BIN
screenshots/libadwaita/4-clamp-py.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
screenshots/libadwaita/5-lists-py.png
Normal file
After Width: | Height: | Size: 51 KiB |
BIN
screenshots/libadwaita/6-view-switcher-py.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
screenshots/libadwaita/7-carousel-py.png
Normal file
After Width: | Height: | Size: 18 KiB |
19
shell.nix
Normal file
|
@ -0,0 +1,19 @@
|
|||
{ pkgs ? import <nixpkgs> {} }:
|
||||
|
||||
pkgs.mkShell {
|
||||
name = "gtk-examples-python";
|
||||
|
||||
nativeBuildInputs = [
|
||||
pkgs.gobject-introspection
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
pkgs.gtk3
|
||||
pkgs.libhandy
|
||||
pkgs.libadwaita
|
||||
pkgs.gst_all_1.gstreamer
|
||||
(pkgs.python3.withPackages (p: with p; [
|
||||
pygobject3 gst-python
|
||||
]))
|
||||
];
|
||||
}
|