GtkImage が GTK3 から結構変わっていた。
そもそものインプリメント関数がまるっきり違うし。
pixbuf や surface プロパティが無くなった。
surface にいたっては new_*** すら削除されている、変換しろってことですね。
pixbuf は筆者が使っているぞ、 new_*** が残っていて良かった。
そんなことよりコレですよ。
#!/usr/bin/env python3 import gi gi.require_version('Gtk', '4.0') from gi.repository import Gtk class RadioWin(Gtk.ApplicationWindow): ''' GTK4: GtkPicture ''' def __init__(self, a): Gtk.ApplicationWindow.__init__(self, application=a, title='GTK4') image = Gtk.Image(file='400x300px.jpg') self.set_child(image) #image.set_pixel_size(400) def app_activate(a): w = RadioWin(a) w.present() app = Gtk.Application() app.connect('activate', app_activate) app.run()
GTK4.
#!/usr/bin/env python3 import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk class Win(Gtk.ApplicationWindow): ''' GTK3: GtkPicture ''' def __init__(self, a): Gtk.ApplicationWindow.__init__(self, application=a, title='GTK3') image = Gtk.Image(file='400x300px.jpg') self.add(image) self.show_all() def app_activate(a): w = Win(a) w.present() app = Gtk.Application() app.connect('activate', app_activate) app.run()
GTK3.
と、GTK3 と違い画像サイズに自動的設定されなくなっています。
コメントアウトを外すとリサイズできますが正方形にしかできません。
GTK3 の仕様だと巨大画像を間違って読み込むと本当にそのサイズになっていたし。
この Widget はアイコン用途にしか使っては駄目ですよってことなんでしょう。
どうしても GTK3 の時と同じでないと困る場合は GtkPicture を使います。
#!/usr/bin/env python3 import gi gi.require_version('Gtk', '4.0') from gi.repository import Gtk, Gio class RadioWin(Gtk.ApplicationWindow): ''' GTK4: GtkPicture ''' def __init__(self, a): Gtk.ApplicationWindow.__init__(self, application=a, title='GTK4') gfile = Gio.file_new_for_path('400x300px.jpg') pic = Gtk.Picture(file=gfile) self.set_child(pic) def app_activate(a): w = RadioWin(a) w.present() app = Gtk.Application() app.connect('activate', app_activate) app.run()
いや。
画像を表示したいなら素直に GtkDrawingArea にしましょうね。
ということで今日の GTK4 おしまい。
やっと、やっと夏鳥が撮影できました!
センダイムシクイ、のようです。
葉っぱ邪魔、見つかりづらいからココにいるんだと解っているけど。
オオルリのメス、だと思う。
ほんとヒタギ類のメスって判別がむつかしい。
オオルリのオス、これは誰でも間違えない。
キビタキもいたらしいけど筆者の前には現われなかった。
以上、ゴールデンウイーク完全オケラはギリギリ防げた。
おかげで GTK4 の勉強が捗ったのでなんともいえないけど。