GTK+ 4.10 にて Gtk.ComboBox は廃止になる。
Adw に ComboRow というものがあるね。
ちょっとまて、コレ Nautilus 43 の設定にあるのそのまんまじゃん。
しかも Adw.PreferencesGroup というソレっぽいものもあるという。
それよりも、GtkStringList という GListStore 派生 class があったのかい!
文字列のみで使うなら当然 ListView や GridView にも使えます。
そんなこんなで。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #!/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) # GListStore slist = Gtk.StringList() slist.append( 'OM-1' ) slist.append( 'GH6' ) rlist = Gtk.StringList() rlist.append( 'PRO レンズ' ) rlist.append( 'パナライカ' ) # combo self .r1 = Adw.ComboRow(model = slist, title = 'カメラ' ) self .r2 = Adw.ComboRow(model = rlist, title = 'レンズ' ) # Group group = Adw.PreferencesGroup() group.add( self .r1) group.add( self .r2) # Button button = Gtk.Button(label = '確認' , margin_top = 12 , margin_bottom = 12 ) button.connect( 'clicked' , self .on_button_clicked) # pack box = Gtk.Box(orientation = Gtk.Orientation.VERTICAL, margin_start = 48 , margin_end = 48 ) box.append(Gtk.Label(label = '欲しい' , halign = Gtk.Align.START, margin_top = 12 , margin_bottom = 12 )) box.append(group) box.append(button) self .set_child(box) self .set_default_size( 400 , 300 ) def on_button_clicked( self , button): ''' 値の取り出し ''' s1 = self .r1.get_selected_item().get_string() s2 = self .r2.get_selected_item().get_string() self .set_title(f '{s1}, {s2}' ) app = Gtk.Application() app.connect( 'activate' , lambda a: Win(a).present()) app.run() |
予想以上に簡単だった、margin は勘で割り当てした適当な値です。
変更を即座に適用させたい場合は activated シグナルを処理。
いや GTK+ アプリの設定は基本「適用」ボタンなんて無い文化ですし。
値の取り出しはもちろん selected プロパティの UINT 値を利用する手段もある。
そのほうが設定保存等で都合がいいけど GSettings 的には文字列のほうが良さげ。
しかし GTK+ も Adw のおかげで型がいっぱい増えてなんというか。
UI の統一を狙うなら 4.10 の新規 Widget は Adw にまかせたほうがとか。