image - 如何使用 PyGI 在 Python3 中自动调整图像大小?

标签 image python-3.x resize gtk introspection

虽然我已经找到了这个问题的部分和间接答案(参见,例如,this link),我在这里发布这个是因为把拼图的点点滴滴拼凑起来花了我一些时间,我认为其他人可能会找到我的努力使用。

那么,如何在 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文件可以从here下载.

我欢迎关于如何做到这一点的进一步建议。

关于image - 如何使用 PyGI 在 Python3 中自动调整图像大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12364112/

相关文章:

python - 注册基于 Celery 类的任务

java - Swing 组件 - 禁用布局调整大小

html - 如何禁用谷歌浏览器文本区域大小调整

c++ - 在 OpenCV 中寻找轮廓?

c++ - 将图像和文件包含到项目中

image - Matlab写入1位bmp

python - 为什么我的元组值会改变 (Python)?

javascript - html 中的 Image Element 构造函数的浏览器支持是什么?

python - 不同人的平均访问间隔

html - 如何使用 Bootstrap 表单控件类自动调整内容大小来制作 contenteditable div?