Python GTK 正在调整大图像的大小以适应 window
Python GTK resizing large image to fit inside a window
重要说明:我正在使用 PyGObject
来访问 GTK 小部件,而不是 PyGTK
。这就是这个问题与类似问题的不同之处:
- PyGTK: How do I make an image automatically scale to fit it's parent widget?
- Scale an image in GTK
我想制作一个非常简单的应用程序,显示一个标签、一个图像和一个按钮,所有这些都堆叠在一起。该应用程序应该 运行 处于全屏模式。
当我尝试时,我 运行 遇到了问题。我的图片分辨率非常高,所以当我简单地从文件创建并添加它时,我几乎看不到它的 20%。
我想要的是根据 window 的大小(等于应用 运行 的全屏屏幕大小)按宽度缩放此图像。
我试过使用 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()
问题是 scale_simple
实际上 returns 一个新的 Pixbuf,根据 GTK+ docs。
获取屏幕尺寸可以通过在 window 上调用 .get_screen()
然后在屏幕对象上调用 .width()
或 .height()
来完成。
整个代码放在一起看起来像这样:
screen = 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)
image = Gtk.Image.new_from_pixbuf(pixbuf)
重要说明:我正在使用 PyGObject
来访问 GTK 小部件,而不是 PyGTK
。这就是这个问题与类似问题的不同之处:
- PyGTK: How do I make an image automatically scale to fit it's parent widget?
- Scale an image in GTK
我想制作一个非常简单的应用程序,显示一个标签、一个图像和一个按钮,所有这些都堆叠在一起。该应用程序应该 运行 处于全屏模式。
当我尝试时,我 运行 遇到了问题。我的图片分辨率非常高,所以当我简单地从文件创建并添加它时,我几乎看不到它的 20%。
我想要的是根据 window 的大小(等于应用 运行 的全屏屏幕大小)按宽度缩放此图像。
我试过使用 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()
问题是 scale_simple
实际上 returns 一个新的 Pixbuf,根据 GTK+ docs。
获取屏幕尺寸可以通过在 window 上调用 .get_screen()
然后在屏幕对象上调用 .width()
或 .height()
来完成。
整个代码放在一起看起来像这样:
screen = 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)
image = Gtk.Image.new_from_pixbuf(pixbuf)