Paepoi » GTK4(Python) Tips » GTK4(Python) Tips | Adw
GTK4(Python) Tips | Adw
# 最終更新日 2023.05.14
以下のように AdwStyleManager を設定するだけで適用されるようになります。
又ダークテーマへの追従もこれで指定できます。
Adw.ToastOverlay の内部に Adw.Torst を作り add_toast で表示させます。
Adwaita スタイルにしないと上手く動作しませんので注意。
形やレスポンスに特別な定義は無くすべて文字列でのやりとりになっています。
GtkAboutDialog 同様にプロパティを埋めていくだけで作れます。
Adwaita Style
GTK4 で作成されたアプリは Adwaita の統一されたスタイルになっています。以下のように AdwStyleManager を設定するだけで適用されるようになります。
又ダークテーマへの追従もこれで指定できます。
#!/usr/bin/env python3 import gi, sys gi.require_version('Gtk', '4.0') gi.require_version('Adw', '1') from gi.repository import Gtk, Adw class Win(Gtk.ApplicationWindow): ''' PREFER_LIGHT PREFER_DARK は意味が無い ''' def __init__(self, a): Gtk.ApplicationWindow.__init__(self, application=a) # Set Adwaita Style manager = Adw.StyleManager.get_default() # ダークテーマを OS の設定に追従させる #manager.set_color_scheme(Adw.ColorScheme.DEFAULT) # 常にダークテーマ manager.set_color_scheme(Adw.ColorScheme.FORCE_DARK) # 常にライトテーマ #manager.set_color_scheme(Adw.ColorScheme.FORCE_LIGHT) # label = Gtk.Label(label='ダークテーマ') self.set_child(label) app = Gtk.Application() app.connect('activate', lambda a: Win(a).present()) app.run()
Toast
昔ながらのトースターで食パンが跳ね上がるようにメッセージを出すウイジェット。Adw.ToastOverlay の内部に Adw.Torst を作り add_toast で表示させます。
Adwaita スタイルにしないと上手く動作しませんので注意。
#!/usr/bin/env python3 import gi, sys gi.require_version('Gtk', '4.0') gi.require_version('Adw', '1') from gi.repository import Gtk, Adw class Win(Gtk.ApplicationWindow): ''' GTK4: No Decorated Window ''' def __init__(self, a): # Set Adwaita Style manager = Adw.StyleManager.get_default() manager.set_color_scheme(Adw.ColorScheme.DEFAULT) # init Gtk.ApplicationWindow.__init__(self, application=a) # Button button = Gtk.Button(label='Show Toast', halign=Gtk.Align.CENTER, valign=Gtk.Align.CENTER) button.connect('clicked', self.on_button_clicked) # Toast self.toast = Adw.ToastOverlay(child=button) self.set_child(self.toast) self.set_default_size(200, 200) def on_button_clicked(self, button): toast = Adw.Toast(title='Hello World') self.toast.add_toast(toast) app = Gtk.Application() app.connect('activate', lambda a: Win(a).present()) app.run()
MessageDialog
GtkMessageDialog が廃止された代わりに Adw に用意されました。形やレスポンスに特別な定義は無くすべて文字列でのやりとりになっています。
#!/usr/bin/env python3 import gi gi.require_version('Gtk', '4.0') gi.require_version('Adw', '1') from gi.repository import Gtk, Adw class Win(Gtk.ApplicationWindow): ''' Adw: Sample Code ''' def __init__(self, a): # Set Adwaita Style manager = Adw.StyleManager.get_default() manager.set_color_scheme(Adw.ColorScheme.DEFAULT) # init Gtk.ApplicationWindow.__init__(self, application=a) # Button button = Gtk.Button(label='Message Dialog', halign=Gtk.Align.CENTER, valign=Gtk.Align.CENTER) button.connect('clicked', self.on_button_clicked) # Toast self.toast = Adw.ToastOverlay(child=button) self.set_child(self.toast) self.set_default_size(200, 100) def on_button_clicked(self, button): dlg = Adw.MessageDialog.new(self, '何が撮りたい?', '選んでください') dlg.add_response('bird', '野鳥(_b)') dlg.add_response('portrait', 'ヌード(_p)') dlg.add_response('train', '電車(_d)') dlg.connect('response', self.on_message_response) dlg.present() def on_message_response(self, dlg, response): match response: case 'bird': toast = Adw.Toast(title='変態!') case 'portrait': toast = Adw.Toast(title='エッチ!') case 'train': toast = Adw.Toast(title='キチガイ!') case 'close': toast = Adw.Toast(title='Esc かよ!') case _: toast = Adw.Toast(title='不明...') self.toast.add_toast(toast) app = Gtk.Application() app.connect('activate', lambda a: Win(a).present()) app.run()
AboutDialog
gnome-text-editor や nautilus で採用されている About です。GtkAboutDialog 同様にプロパティを埋めていくだけで作れます。
#!/usr/bin/env python3 import gi, sys gi.require_version('Gtk', '4.0') gi.require_version('Adw', '1') from gi.repository import Gtk, Adw class Win(Gtk.ApplicationWindow): ''' このダイアログのデフォルトは非表示になっています ''' def __init__(self, a): # Set Adwaita Style manager = Adw.StyleManager.get_default() manager.set_color_scheme(Adw.ColorScheme.DEFAULT) # init Gtk.ApplicationWindow.__init__(self, application=a) # Button button = Gtk.Button(label='Show About', halign=Gtk.Align.CENTER, valign=Gtk.Align.CENTER) button.connect('clicked', self.on_button_clicked) self.set_child(button) def on_button_clicked(self, button): d = Adw.AboutWindow( developer_name='sasakima-nao', developers=['sasakima-nao'], copyright='© 2023 sasakima-nao', license_type=Gtk.License.GPL_2_0, #application_icon='org.sasakima.Comipoli', application_name='Comipoli', version='0.0.1', website='http://palepoli.skr.jp/', modal = True, transient_for=self) d.set_visible(True) app = Gtk.Application() app.connect('activate', lambda a: Win(a).present()) app.run()
Copyright(C) sasakima-nao All rights reserved 2002 --- 2024.