GTK4 は PyGObject ばかりやっていたけど。
たまには Gjs もやろうかなって、gir なのは同じなんだけど。
gjs/gtk4-template.js at master ? GNOME/gjs ? GitHub
あれ?
GtkApplication を使わないでイケる方法があったんだ。
同様なはずなので PyGObject で書いてみる。
#!/usr/bin/env python3
import gi
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk, GLib
class TestWindow(Gtk.Window):
def __init__(self):
Gtk.ApplicationWindow.__init__(self)
btn = Gtk.Button(label='The best camera for wild birds')
btn.connect('clicked', self.on_button_clicked)
self.label = Gtk.Label(label='...')
box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
box.append(btn)
box.append(self.label)
self.set_child(box)
#self.connect('delete-event', self.on_close_request) # v3
self.connect('close-request', self.on_close_request)
self.present()
def on_button_clicked(self, widget):
self.label.set_text('MICRO FOUR THIRDS !')
def on_close_request(self, widget):
loop.quit()
loop = GLib.MainLoop.new(None, False)
#GLib.set_prgname('LUMIX')
TestWindow()
loop.run()

GMainLoop でも良かったようです、知らなかった。
でも何故かこの方法ではタイトルバーに何も表示されないね。
アプリ名表示は使っていないはずの GtkApplication になる、なんだかな。
ウインドウを作る前に g_set_prgname すればいいんだけどさ。
GtkApplication を使えば今までどおりファイル名が表示される。
いや application-id を指定するとそちらが優先されるみたい。
g_set_prgname 無指定の場合だけの話ですけど。
close-request は delete-event の名前が変わっただけです。
×ボタンを押したよってシグナル、destroy は破棄されたよってシグナル。
GtkApplication を使う場合はこんな処理いりませんからね。
しかしのんびりしている間に GNOME 41 が出てしまった。
GNOME 41 Release Notes
Multitasking って GSettings で変更できていたジャン。
GUI 設定が付いただけ、いや筆者はデフォルトで使うけど。
それよりランチャを左に戻す設定が欲しい、macOS でも左にしているんだ。
ちなみに普段は隱して三本指スワイプでランチャを出す GNOME3 式で使っている。
The GTK Project
GTK の stable は 4.2.1 か、こっちは今までどおり奇数が開発版なのか。
でもドキュメントは 4.5 かよ、バージョンの関連性がもうよくワカラン。
関係ないけどサンプルコードでカメラネタはやっぱりイマイチだ。
やっぱりスズキのバイクが一番だなって。