GTK4 は GtkRadioButton が廃止されていた。
え、GTK4 製な gnome-text-editor のメニューにはラジオボタンがあるぞ?
継承元である GtkCheckButton のドキュメントを見てみた。
なるほど、GtkCheckButton に統合されたってことなんだね。
グループ化すると自動的に丸い形になるのか、よしやってみよう。
#!/usr/bin/env python3 import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk class RadioWin(Gtk.ApplicationWindow): ''' GTK4: GtkRadioButton ''' def __init__(self, a): Gtk.ApplicationWindow.__init__(self, application=a) vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) root = None for s in ['Leica', 'SIGMA', 'Panasonic']: # GtkRadioButton to GtkCheckButton r = Gtk.RadioButton(label=s, group=root) #r = Gtk.CheckButton(label=s, group=root) r.connect('toggled', self.on_radio_toggled) if not root: root = r r.props.active = True vbox.pack_start(r, False, False, 0) #vbox.append(r) self.add(vbox) #self.set_child(vbox) self.show_all() def on_radio_toggled(self, button): if button.props.active: self.props.title = button.props.label def app_activate(a): w = RadioWin(a) w.present() app = Gtk.Application() app.connect('activate', app_activate) app.run()
GTK3
#!/usr/bin/env python3 import gi gi.require_version('Gtk', '4.0') from gi.repository import Gtk class RadioWin(Gtk.ApplicationWindow): ''' GTK4: GtkRadioButton ''' def __init__(self, a): Gtk.ApplicationWindow.__init__(self, application=a) vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) root = None for s in ['Leica', 'SIGMA', 'Panasonic']: # GtkRadioButton to GtkCheckButton #r = Gtk.RadioButton(label=s, group=root) r = Gtk.CheckButton(label=s, group=root) r.connect('toggled', self.on_radio_toggled) if not root: root = r r.props.active = True #vbox.pack_start(r, False, False, 0) vbox.append(r) #self.add(vbox) self.set_child(vbox) #self.show_all() def on_radio_toggled(self, button): if button.props.active: self.props.title = button.props.label def app_activate(a): w = RadioWin(a) w.present() app = Gtk.Application() app.connect('activate', app_activate) app.run()
GTK4
うん唖然とするくらい同じだ、これなら GTK4 化に困らない。
そんなことより、GTK3 と GTK4 って思っていたより違うんだね。
GTK3 はデフォルトが非表示なせいか最初の toggled シグナルが発生しない。
GTK4 のウインドウのほうが少しだけ大きい、なんでだろう。
非アクティブ時のタイトルバー文字列が GTK4 だと濃いまま。
いやタイトルバーはヘッダーバーにすれば普通に薄くなるみたいですけど。
関係ないけど GtkApplication 部分はコレが一番短く書けるな。
今後のサンプルコードはコレでいこうと思う。
だいぶ GTK4 も解ってきたしまとめや自アプリの GTK4 化を。
したいんだけど Fedora 35 の PyGObject は DnD に不具合があるので。
text/uri-list の取得ができずファイルのドロップで開くことができない。
次の Fedora で修正されているはずなのでそれから本格的に。