GTK+ 4.10 にて Gtk.MessageDialog は廃止になる。
変わりに Gtk.AlertDialog を、とドキュメントには書いている。
しかし、Adw 1.2 には Adw.MessageDialog が追加されている。
どちらを使えと?
まあ現状 AlertDialog は使えないしコッチを試してみよう。
Gtk のは GtkDialog ベースだったが Adw のは GtkWindow ベース。
DialogFlags や ButtonsType のような単純明快な定数も用意されていない。
heading にメッセージを body に詳細を、ということみたい。
GtkWindow ベースなので parent を NULL にすれば単体でも使える。
#!/usr/bin/env python3
import gi
gi.require_version('Adw', '1')
from gi.repository import Adw
class Win(Adw.MessageDialog):
def __init__(self, a):
Adw.MessageDialog.__init__(self, application=a)
# Create
self.set_heading('Message')
self.set_body('body')
self.add_response('ok', 'OK')
app = Adw.Application()
app.connect('activate', lambda a: Win(a).present())
app.run()
親ウインドウが無いというメッセージは一応出るようです。
ついでに app の最短表記を思いついたので今後はコレで。
これだけじゃ使い道が解らないので普通なサンプルコード。
#!/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='This is Button\nShow Message Dialog')
button.connect('clicked', self.on_button_clicked)
# Toast
self.toast = Adw.ToastOverlay(child=button)
# pack
box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
box.append(self.toast)
self.set_child(box)
self.set_default_size(600, 300)
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()
定数が無いおかげでむしろ簡単になったって感じですね。
Alt キーのニーモニックも普通に使えるようです。
Python の match 文と相性がいいのも嬉しいです。
ついでに、ウインドウを小さくするとボタンが縦並びになったりする。
なんだよ凄く便利じゃないの。
Adw.Toast ではモーダルにできないのでやはり必要ですね。
今後メッセージはこれでいこう。


