如何在开罗表面上绘制任何 GTK 小部件
我想将 GTK 窗口的外观及其包含的所有按钮和其他小部件保存到 PNG 或 PDF 文件中。 Cairo 支持在此类表面上绘图。 我可以以某种方式要求 GTK 小部件在开罗表面上绘制自己吗? 代码示例将不胜感激,因为我是 GTK 和 Cairo 的新手。 Python 是我选择的语言。
I would like to save the looks of a GTK window, and all the buttons and other widgets it contains to a PNG or PDF file. Cairo supports drawing on such surfaces.
Could I somehow ask a GTK widget to draw itself on Cairo surface?
A code sample would be much appreciated, since I am a newcomer to both GTK and Cairo.
Python is my language of choice.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在 C 中,您可以将按钮和小部件放在
GtkOffscreenWindow
使用gtk_widget_reparent()
< /a>,然后使用 gtk_offscreen_window_get_pixbuf() 将其渲染到GdkPixbuf
上,然后您可以将其保存到文件中。抱歉,我没有任何 Python 代码,但我认为 PyGTK 中还没有屏幕外窗口。In C, you can put your buttons and widgets in a
GtkOffscreenWindow
usinggtk_widget_reparent()
and then usegtk_offscreen_window_get_pixbuf()
to render it onto aGdkPixbuf
, which you can then save to a file. Sorry I don't have any Python code, but I don't think the offscreen window is available in PyGTK yet.番茄说的话。如果您需要在屏幕外执行此操作,请使用 Gtk.OffscreenWindow,否则只需获取 Gdk 窗口和小部件的分配即可对其进行剪辑。这是一个可用于获取任何小部件的快照的片段。如以下代码所示,您还可以使用 Gtk.Widget.draw() 方法在 Cairo 上下文中渲染它。
您可以临时将一个小部件(如 ptomato 所说)重新设置为此 Gtk.OffscreenWindow,以便制作快照。
What ptomato says. Use a Gtk.OffscreenWindow if you need to do it off screen, otherwise just get the Gdk window and the widget's allocation to clip it. Here is a snippet that can be used to get a snapshot of any widget. As the following code shows, you can also use the Gtk.Widget.draw() method to render it in the Cairo context.
You can temporarily reparent a widget (as ptomato said) to this Gtk.OffscreenWindow, in order to make the snapshot.