この質問に部分的かつ間接的な回答がありましたが(例えばthis link参照)、パズルのビットとピースを合わせることで少し時間がかかり、他の人が私の使用の努力。Python3でPyGIを使用して自動的にイメージのサイズを変更する方法は?
親ウィンドウのサイズを変更したときに、GTK +のボタンで画像をシームレスにリサイズする方法はありますか?
この質問に部分的かつ間接的な回答がありましたが(例えばthis link参照)、パズルのビットとピースを合わせることで少し時間がかかり、他の人が私の使用の努力。Python3でPyGIを使用して自動的にイメージのサイズを変更する方法は?
親ウィンドウのサイズを変更したときに、GTK +のボタンで画像をシームレスにリサイズする方法はありますか?
質問に投稿されたリンクの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ファイルは、hereからダウンロードできます。
私はこれを行う方法に関するさらなる提案を歓迎します。
self.image = Gtk.Image().new_from_pixbuf(self.pixbuf)
はおそらくあるべき: self.image = Gtk.Image().set_from_pixbuf(self.pixbuf)
あなたは二回、新しいイメージを作成しています。
私のテストプログラムでこのメソッドに変更しようとしましたが、ちょうどトレースバック(Python 3.2、Debian Wheezy)がありました。おそらく、このメソッドはAPIの方が新しいかもしれません(しかし、ドキュメンテーションはそれと矛盾するようです)。しかし、ドキュメントを読む私はイメージを2回作成することについて間違っていると思います(['set_from_pixbuf'](http://www.pygtk.org/pygtk2reference/class-gtkimage.html#method-gtkimage--set-from-pixbuf )と['new_from_pixbuf'](http://www.pygtk.org/pygtk2reference/class-gtkimage.html#function-gtk--image-new-from-pixbuf)を参照してください)。彼らはどちらもpixbufから新しいイメージを作成します。 1つのpixbuf、1つのイメージがあります。 – Bobble