Python GTK调整大图像的大小以适应窗口

时间:2018-06-14 12:02:23

标签: python gtk pygobject image-scaling

重要提示:我正在使用PyGObject来访问GTK小部件,而不是PyGTK。这就是使这个问题与类似问题不同的原因:

我想制作一个非常简单的应用程序,它显示标签,图像和按钮,所有这些都叠在一起。该应用应该以全屏模式运行。

当我尝试它时,我遇到了一个问题。我的图像分辨率非常高,所以当我只是从文件中创建并添加它时,我几乎看不到它的20%。

我想要的是根据窗口的大小(这与应用程序全屏运行时的屏幕大小相等)按宽度缩放此图像。

我尝试过使用Pixbufs,但是对它们调用scale_simple似乎并没有太大变化。

这是我目前的代码:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GdkPixbuf


class Window(Gtk.Window):
    def __init__(self):
        super().__init__(title='My app')

        layout = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        dimensions = layout.get_allocation()

        pixbuf = GdkPixbuf.Pixbuf.new_from_file('path/to/image')
        pixbuf.scale_simple(dimensions.width, dimensions.height, GdkPixbuf.InterpType.BILINEAR)
        image = Gtk.Image.new_from_pixbuf(pixbuf)
        dismiss_btn = Gtk.Button(label='Button')

        dismiss_btn.connect('clicked', Gtk.main_quit)
        layout.add(image)
        layout.add(dismiss_btn)
        self.add(layout)


win = Window()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()

1 个答案:

答案 0 :(得分:0)

问题是scale_simple实际上返回了一个新的Pixbuf,按照GTK+ docs

可以通过调用窗口上的.get_screen()然后调用屏幕对象上的.width().height()来获取屏幕尺寸。

整个代码放在一起看起来像这样:

screem = self.get_screen()
pixbuf = GdkPixbuf.Pixbuf.new_from_file('/path/to/image')
pixbuf = pixbuf.scale_simple(screen.width(), screen.height() * 0.9, GdkPixbuf.InterpType.BILINEAR)
# the multiplication by 0.9 is to make the image take up 90% of the screen height
image = Gtk.Image.new_from_pixbuf(pixbuf)
相关问题