GTK4 は GtkMessageDialog が面倒になっていた。
#!/usr/bin/env python3
import gi, sys
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk, GLib
def on_message_response(dialog, response_id):
dialog.destroy()
loop.quit()
msg = Gtk.MessageDialog(
buttons = Gtk.ButtonsType.OK,
text = 'GTK4 MessageDialog Sample Code')
msg.connect('response', on_message_response)
#res = msg.run() # GTK3
msg.show()
loop = GLib.MainLoop.new(None, False)
loop.run()

run が廃止、戻り値はシグナルで受け取りする必要がある。
シグナルってことはメインループが必要ということで。
GTK3 までのように単独で使えるほうが変だったのを見直したようで。
おまけに親ウインドウが無いと警告まで出るように。
いやまあ、通常の利用ではそれで問題ないんだけどさ。
シグナルのハンドラは Gjs ならいいけど PyGObject だと面倒だな。
表示させるだけならラムダ式にすればいいかと。
ついでに、GtkLabel のマークアップって a href とかもイケるんだね。
GTK3 の時からイケたみたい、use-markup プロパティがある場所は全部使える。
上記をウインドウから使うサンプルと合わせてこんな感じ。
#!/usr/bin/env python3
import gi, sys
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk, GLib
class TestWindow(Gtk.ApplicationWindow):
def __init__(self, app):
Gtk.ApplicationWindow.__init__(self, application=app)
try:
button = Gtk.Button(label = 'Show Message Dialog')
button.connect('clicked', self.on_button_clicked)
self.set_child(button)
except Exception as e:
print(e, file=sys.stderr)
app.quit()
self.present()
def on_button_clicked(self, button):
msg = Gtk.MessageDialog(
buttons = Gtk.ButtonsType.OK,
modal = True,
text = '<a href="trash:///">Open the Trash</a>',
transient_for = self,
use_markup = True)
msg.connect('response', lambda dlg, i: dlg.destroy())
msg.show()
class TestApplication(Gtk.Application):
def __init__(self):
Gtk.Application.__init__(self, application_id='org.olympus.e-m5mark3')
def do_activate(self):
w = TestWindow(self)
w.present()
app = TestApplication()
app.run()

show は非同期なので show の後は何も処理を書いたら駄目なので注意。
ところで。
GNOME 開発センター(旧)
以前からあったのかどうかは知らないけど旧ページを見つけた。
developer-old としているので多分更新はしないんだろうけど。
API を個別サイトで参照するの面倒なんだよね。