5

この質問に対する部分的かつ間接的な答えを見つけましたが (たとえば、このリンクを参照)、パズルの断片をまとめるのに少し時間がかかり、他の誰かが私の答えを見つけるかもしれないと思ったので、ここに投稿します。使用の努力。

では、親ウィンドウのサイズが変更されたときに GTK+ のボタンの画像をシームレスにサイズ変更するにはどうすればよいでしょうか?

4

2 に答える 2

6

質問に投稿されたリンクで PyGTK に対して提供されたソリューションは、GTK3 を使用する Python-GI では機能しませんが、通常の Box の代わりに ScrolledWindow を使用するというトリックは非常に便利でした。

これは、コンテナでサイズ変更するボタンの画像を取得するための私の最小限の実用的なソリューションです。

from gi.repository import Gtk, Gdk, GdkPixbuf

class ButtonWindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title="Button Demo")
        self.set_border_width(10)
        self.connect("delete-event", Gtk.main_quit)
        self.connect("check_resize", self.on_check_resize)

        self.box = Gtk.ScrolledWindow()
        self.box.set_policy(Gtk.PolicyType.ALWAYS,
                       Gtk.PolicyType.ALWAYS)
        self.add(self.box)

        self.click = Gtk.Button()
        self.box.add_with_viewport(self.click)

        self.pixbuf = GdkPixbuf.Pixbuf().new_from_file('gtk-logo-rgb.jpg')
        self.image = Gtk.Image().new_from_pixbuf(self.pixbuf)
        self.click.add(self.image)

    def resizeImage(self, x, y):
        print('Resizing Image to ('+str(x)+','+str(y)+')....')
        pixbuf = self.pixbuf.scale_simple(x, y,
                                          GdkPixbuf.InterpType.BILINEAR)
        self.image.set_from_pixbuf(pixbuf)

    def on_check_resize(self, window):
        print("Checking resize....")

        boxAllocation = self.box.get_allocation()
        self.click.set_allocation(boxAllocation)
        self.resizeImage(boxAllocation.width-10,
                         boxAllocation.height-10)

win = ButtonWindow()
win.show_all()
Gtk.main()

(幅と高さの -10 は、ボタンの内側の境界線とパディングに対応するためのものです。ボタンの画像を大きくするためにこれをいじってみましたが、結果はあまり良くありませんでした。)

この例で使用する jpeg ファイルは、ここからダウンロードできます。

これを行う方法についてのさらなる提案を歓迎します。

于 2012-09-11T06:50:26.870 に答える
0

self.image = Gtk.Image().new_from_pixbuf(self.pixbuf) おそらく次のようになります。 self.image = Gtk.Image().set_from_pixbuf(self.pixbuf)

新しいイメージを 2 回作成しています。

于 2015-07-02T10:21:34.367 に答える