【问题标题】:How to show a png image in Gtk3 with Python?如何使用 Python 在 Gtk3 中显示 png 图像?
【发布时间】:2013-03-15 18:52:49
【问题描述】:

首先要提一下,我正在学习 PythonGtk+ 3,所以我不是这些语言的高级程序员。 p>

我正在尝试在 Gtk3 中为创建 png 图像的 Python 脚本制作图形界面,我想显示它,但是 PyGobject文档是如此稀缺,以至于我还没有找到一种方法来做到这一点。到目前为止,我的界面是这样的:

按钮和文本条目排列在一个网格中,我想将右侧的大空间(由大按钮表示)留空,直到脚本完成构建图像,然后在该区域显示它.代码是here

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

提前致谢,

德语。

编辑

查看@gpoo 指出的演示,我发现了 Frame 小部件,并在我的 GUI 中实现了它。看起来是这样的:

在窗口类中,我将 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 **: Attempting to add a widget with 将 GtkImage 输入到 GtkFrame,但作为 GtkBin 子类,GtkFrame 可以 一次只包含一个小部件;它已经包含一个小部件 输入 GtkImage

感谢任何帮助!

【问题讨论】:

  • 如果你完成了这个可以发布答案
  • 答案如下,来自@gpoo。

标签: python user-interface gtk3 pygobject


【解决方案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

一般情况下,您可以使用documentation for C 并将习语更改为Python。另外,您可以查看demos available in PyGObject,尤其是demo for handling images

【讨论】:

  • 感谢@gpoo 的回答。这并没有解决我的问题,因为在显示图像之前,脚本必须创建它,并在 GUI 中保留一个可用空间来渲染它,这必须在回调函数中完成。
  • 我提出了 2 个可能的选项。第二个做到了。只需输入一个空的Gtk.Image。生成图像后,使用img.set_from_file('/path/to/my_file.png')
  • 最后两个链接上的链接失效:P
  • 修复了两个链接。
猜你喜欢
  • 2019-02-14
  • 1970-01-01
  • 2020-08-04
  • 1970-01-01
  • 1970-01-01
  • 2010-12-16
  • 1970-01-01
  • 2022-07-28
相关资源
最近更新 更多