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

2 投票
2 回答
2833 浏览
提问于 2025-04-15 16:43

我有一个GTK布局,左边是一个HBox,里面放了一个小部件,我决定了它的最大高度。右边是一个VBox,里面有三个按钮,每个按钮只包含一张图片,没有文字。这些图片是GTK的标准图标,所以它们有标准的存储类型。

我使用了expand=True和fill=True来放置这些没有图片的按钮,它们的高度正好是我想要的——宽度随便小一点,高度是HBox左半部分的三分之一。但是一旦加上图片,它们要么太高了——在很多主题中,3 * ICON_SIZE_MENU的高度都太高了,要么如果我强制设置按钮的高度请求,它们就会被裁剪掉。我更希望它们能缩放到与父按钮相同的大小。

我是否需要为每个使用的标准图标自己制作pixbuf(图像缓冲区),而且如果大小改变还要重新生成?还是说GTK可以自动调整图片的大小以适应按钮,而不是反过来?因为这些图片在我尝试的每个主题中都只差几像素就能合适,有没有办法直接禁用按钮的裁剪功能?

这个应用是用Python和PyGTK写的,但任何语言的解决方案我都很欢迎。

(我试过把它设置成图标名称存储类型,但其中一个图标是REVERT_TO_SAVED,当我强制它到某个特定像素高度时,它变成了损坏的标准图像。而且,我也不想强制它到任何固定的像素高度。)

2 个回答

1

我最近在使用SVG文件并对它们进行缩放方面运气不错,因为在pyGtk程序中使用SVG非常简单。

img = gtk.gdk.pixbuf_new_from_file(fname)

我的做法是把SVG文件复制到一个临时文件,然后修改第一个'

接着,我读取这个修改过的SVG,它会作为一个缩放过的pixbuf加载,并且保留所有的透明通道效果。

可以查看这个链接了解更多:http://code.google.com/p/key-mon/source/browse/src/keymon/lazy_pixbuf_creator.py

2

没有办法自动实现你想要的效果。你可以考虑创建一个gtk.Image的子类,在这个子类里,把一个图片的大小调整到你这个小部件的大小。这样做的好处是,你会得到一个可以重复使用的小部件,并且可以实时调整图片的大小。

不过,这样做的缺点是,调整后的图片可能会看起来很模糊。你可能需要考虑使用可缩放的矢量图形。

撰写回答