GTK4: Image

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.

gtkimage

と、GTK3 と違い画像サイズに自動的設定されなくなっています。
コメントアウトを外すとリサイズできますが正方形にしかできません。

gtkimage

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 おしまい。
やっと、やっと夏鳥が撮影できました!

musikui

センダイムシクイ、のようです。
葉っぱ邪魔、見つかりづらいからココにいるんだと解っているけど。

ooruri

オオルリのメス、だと思う。
ほんとヒタギ類のメスって判別がむつかしい。

ooruri

オオルリのオス、これは誰でも間違えない。
キビタキもいたらしいけど筆者の前には現われなかった。

以上、ゴールデンウイーク完全オケラはギリギリ防げた。
おかげで GTK4 の勉強が捗ったのでなんともいえないけど。