如何在Python中使用Gtk3显示PNG图像?

7 投票
1 回答
11550 浏览
提问于 2025-04-17 19:15

首先,我想说的是,我正在学习PythonGtk+ 3,所以在这些语言上我还不是个高级程序员。

我正在尝试为一个创建png图像的Python脚本制作一个图形界面,我想在界面上显示这个图像,但PyGobject的文档太少了,我找不到实现的方法。目前,我的界面看起来是这样的:

在这里输入图片描述

按钮和文本输入框是按网格排列的,我希望在脚本完成生成图像之前,右边的大空间(用大按钮表示)保持空白,然后在那个区域显示图像。代码在这里

有没有办法用Python在Gtk3中做到这一点呢?

提前谢谢你,

Germán。

编辑

看了@gpoo推荐的示例后,我发现了Frame这个控件,并把它应用到了我的界面中。现在看起来是这样的:

在这里输入图片描述

在窗口类中,我把Frame添加到了网格里:

self.frame_rgb = Gtk.Frame(label='RGB image')
self.frame_rgb.set_label_align(0.5, 0.5)
self.frame_rgb.set_shadow_type(Gtk.ShadowType.IN)
self.grid.attach_next_to(self.frame_rgb, self.label_img_name,
                         Gtk.PositionType.RIGHT, 3, 8)

我还把运行按钮连接到了一个回调函数,这样当我点击它时,我的脚本就会创建并显示png图像:

self.button_run = Gtk.Button(stock=Gtk.STOCK_EXECUTE)
self.button_run.connect('clicked', self.on_button_run_clicked)
self.grid.attach_next_to(self.button_run, self.entry_b_img,
                         Gtk.PositionType.BOTTOM, 1, 1)

最后,我的回调函数是(目前还没有计算,只是为了测试把图像渲染到Frame上):

def on_button_run_clicked(self, widget):
    self.img = Gtk.Image.new_from_file('astro-tux.png')
    self.frame_rgb.add(self.img)

但是当我点击运行按钮时,出现了以下错误:

(makeRGB.py:2613): Gtk-WARNING **: 尝试将类型为GtkImage的控件添加到GtkFrame,但作为GtkBin的子类,GtkFrame一次只能包含一个控件;它已经包含了一个类型为GtkImage的控件

任何帮助都非常感谢!

1 个回答

13

你可以使用 Gtk.Image。如果你生成了一个文件,可以这样做:

img = Gtk.Image.new_from_file('/path/to/my_file.png')

然后把 img 加到容器里(在你的情况下是 GtkGrid)。或者,如果你已经有了 Gtk.Image,你可以这样做:

img.set_from_file('/path/to/my_file.png')

你可以用 from_pixbuf 替代 ...from_file,而且你可以从一个流创建一个 Gdk.Pixbuf

一般来说,你可以参考 C语言的文档,然后把里面的用法改成 Python 的。还有,你可以查看 PyGObject 中的示例,特别是 处理图像的示例

撰写回答