在GTK中将图像缩放到其父按钮大小?

时间:2009-12-05 10:48:25

标签: python user-interface pygtk gtk

我有一个GTK布局,HBox左边的小部件决定了我想要的最大高度,右边的VBox包含三个按钮,每个按钮只包含一个图像而没有文字。图像是GTK库存图标,库存存储类型也是如此。

使用expand = True,fill = True包装没有图像的按钮正是我想要的高度 - 一些任意小的宽度,以及HBox左半部分的高度的1/3。然而,对于图像,它们要么太高 - 3 * ICON_SIZE_MENU在许多主题中太高 - 或者如果我强制按钮的高度请求,它们会被剪裁。我宁愿将它们缩放到父按钮的大小。

我是否必须为我正在使用的每个股票图标制作自己的pixbuf(如果尺寸发生变化,则重新生成它们)?或者GTK可以自动调整图像大小以适应按钮,而不是相反吗?由于图像与我尝试的每个主题相比只有几个像素,所以有没有办法只是禁用按钮的剪辑?

此应用程序是使用PyGTK以Python编写的,但我们赞赏任何语言的解决方案。

(我试过让它成为一个图标名称存储类型,但其中一个图标是REVERT_TO_SAVED,当我试图强制它到特定的像素高度时,它变成了破损的股票图像。而且,我宁愿不强迫它到任何固定的像素高度。)

2 个答案:

答案 0 :(得分:2)

没有办法让你想要自动。您可能想要子类gtk.Image并在您的子类中,将pixbuf缩放到您的小部件的分配大小。这样做的好处是,您将拥有一个可重复使用的小部件,并且您可以随时调整大小。

缺点是你会有一个丑陋的,放大的像素图。您可能需要查看可缩放的矢量图形。

答案 1 :(得分:1)

我一直很幸运使用SVG文件并扩展它们,因为很容易将SVG合并到pyGtk程序中。

img = gtk.gdk.pixbuf_new_from_file(fname)

我所做的是将svg复制到临时文件并修改第一个'

然后我读到我修改过的svg,它会加载为pixbuf缩放并具有所有alpha通道的优点。

请参阅http://code.google.com/p/key-mon/source/browse/src/keymon/lazy_pixbuf_creator.py