我想保存一个GTK窗口的外观,以及它包含的所有按钮和其他小部件到PNG或PDF文件。开罗支持在这些表面上绘图。 我能以某种方式请求一个GTK小部件在开罗表面绘制自己吗? 代码示例将非常感谢,因为我是GTK和开罗的新手。 Python是我选择的语言。如何在开罗表面上绘制任何GTK小部件
11
A
回答
10
在C语言中,你可以把你的按钮和小部件在使用GtkOffscreenWindow
和gtk_widget_reparent()
然后用gtk_offscreen_window_get_pixbuf()
以使其到GdkPixbuf
,然后你就可以保存到一个文件中。对不起,我没有任何Python代码,但我不认为PyGTK中的屏幕外窗口可用。
10
ptomato说什么。如果您需要在屏幕外执行此操作,请使用Gtk.OffscreenWindow,否则只需获取Gdk窗口和窗口小部件的分配即可将其剪下。这是一个可用于获取任何窗口小部件快照的片段。如下面的代码所示,您还可以使用Gtk.Widget.draw()方法在Cairo上下文中呈现它。
from gi.repository import Gtk
import cairo
WINDOW_WIDTH, WINDOW_HEIGHT = 400, 300
window = Gtk.OffscreenWindow()
window.set_default_size(WINDOW_WIDTH, WINDOW_HEIGHT)
window.show()
canvas = Gtk.HBox()
window.add(canvas)
canvas.show()
button = Gtk.Button("Hello World!")
canvas.add(button)
button.show()
# this is needed, otherwise the screenshot is black:
while Gtk.events_pending():
Gtk.main_iteration()
surf = cairo.ImageSurface(cairo.FORMAT_ARGB32,
WINDOW_WIDTH, WINDOW_HEIGHT)
cr = cairo.Context(surf)
canvas.draw(cr)
surf.write_to_png('test.png')
可以暂时重新设置父级的窗口小部件(如ptomato说的)这个Gtk.OffscreenWindow,为了使快照。
original_parent = canvas.get_parent()
canvas.reparent(offscreen_window)
# do snapshot
canvas.reparent(original_parent)
相关问题
- 1. 如何在开罗/ Gtk绘制圆角图像?
- 2. GTK + /开罗 - 绘制到临时图层?
- 3. 绘制图像的一部分开罗表面
- 4. 如何在开罗上下文中使用Skia绘制Gtk3
- 5. 如何绘制子类DrawingArea小部件?
- 6. Java:如何在尽可能小的表面上绘制图像?
- 7. 如何从开罗表面创建GtkImage?
- 8. 如何复制或复制gtk小部件?
- 9. 如何旋转gtk小部件?
- 10. 如何更改GTK +中任意小部件的颜色?
- 11. 开罗和高DPI绘图(视网膜上表面,OS X图)
- 12. Qt4如何在小部件内部绘制?
- 13. 如何绘制表面图
- 14. 在GTK中,如何在屏幕上获取小部件的实际大小?
- 15. 开罗图像不在GtkDrawingArea上绘画
- 16. 如何在Gtk#窗口上绘制某些东西(线,圆等)?
- 17. 如何直接在桌面上绘制?
- 18. 如何在桌面上绘制文字?
- 19. 如何在指针向下事件的位置上绘制CustomPaint小部件?
- 20. 多线程,gtk3和开罗:在开罗表面拉丝
- 21. GTK或Qt的图表小部件
- 22. 拨号/仪表GTK小部件
- 23. 如何在小图上用很多点绘制图表
- 24. GTK 2.9需要什么开罗才能编译(在Lucid Lynx上)?
- 25. 如何在图表上绘制线条?
- 26. 堆叠GTK +小部件
- 27. 如何在GTK +中设置小部件的位置?
- 28. 在现有的sdl_opengl上下文上绘制小部件
- 29. 如何控制稍后在c中用gtk添加的小部件?
- 30. 绘制任何矩形到一个GTK + DrawingArea填充整个DrawingArea