虽然我找到了这个问题的部分和间接答案(例如,参见这个链接),但我在这里发布这个是因为把拼图的零碎拼凑起来花了我一些时间,而且我认为其他人可能会找到我的使用的努力。
那么,如何在 GTK+ 中实现父窗口大小调整时按钮上的图像无缝调整大小呢?
虽然我找到了这个问题的部分和间接答案(例如,参见这个链接),但我在这里发布这个是因为把拼图的零碎拼凑起来花了我一些时间,而且我认为其他人可能会找到我的使用的努力。
那么,如何在 GTK+ 中实现父窗口大小调整时按钮上的图像无缝调整大小呢?
问题中发布的链接中为 PyGTK 提供的解决方案在带有 GTK3 的 Python-GI 中不起作用,尽管使用 ScrolledWindow 代替通常的 Box 的技巧非常有用。
这是我在按钮上获取图像以随容器调整大小的最小工作解决方案。
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 文件可以从这里下载。
我欢迎有关如何执行此操作的进一步建议。
self.image = Gtk.Image().new_from_pixbuf(self.pixbuf)
应该是:
self.image = Gtk.Image().set_from_pixbuf(self.pixbuf)
您正在创建两次新图像。