如何在Python中使用Gtk3显示PNG图像?
首先,我想说的是,我正在学习Python和Gtk+ 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 个回答
你可以使用 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 中的示例,特别是 处理图像的示例。