Gtk3 从文件加载全窗口图像(python3)

0 投票
1 回答
1861 浏览
提问于 2025-04-18 09:52

我需要找到一种方法,从文件中加载一张图片,并且这张图片要保持原来的大小。我看过一些文档,像是这个这个,但似乎只有通过使用构建器类来加载用glade设计的界面才能实现。不过,我通过代码尝试了以下方法,但结果并不理想,图片被裁剪了。

from gi.repository import Gtk

class MainWindow(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title='GMouse 600')
        self.layout = Gtk.Layout.new(None,None)
        self.add(self.layout)
        self.background = Gtk.Image.new_from_file('./images/g600-thumb-buttons.jpg')
        self.layout.put(self.background, 0, 0)    

window = MainWindow()
window.connect('delete-event', Gtk.main_quit)
window.show_all()
Gtk.main()

我想知道如何通过代码来做到这一点,让我的图片能够填满整个窗口。有没有人能提供一些建议或可能的解决方案让我试试?

需要注意的是,我想通过代码来实现这个功能,因为使用glade确实能达到想要的效果,但当我尝试在图片上添加网格布局或其他控件时,它就不允许我这样做。此外,自己编码也能让我更好地学习,而且我的界面比较小,使用的控件也很少。

1 个回答

1

看起来我用下面的代码解决了这个问题,使用的是Gtk.Overlay。

from gi.repository import Gtk

class MainWindow(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title='GMouse 600')
        self.overlay = Gtk.Overlay()
        self.add(self.overlay)
        self.background = Gtk.Image.new_from_file('./images/g600-thumb-buttons.jpg')
        self.overlay.add(self.background)
        self.grid = Gtk.Grid()
        self.button = Gtk.Button(label='Test')
        self.grid.add(self.button)
        self.overlay.add_overlay(self.grid)


window = MainWindow()
window.connect('delete-event', Gtk.main_quit)
window.show_all()
Gtk.main()

撰写回答