GTK4 は GtkRadioButton が廃止されていた。
え、GTK4 製な gnome-text-editor のメニューにはラジオボタンがあるぞ?
継承元である GtkCheckButton のドキュメントを見てみた。
Gtk.CheckButton
なるほど、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 で修正されているはずなのでそれから本格的に。