如何从gi.repository导入gtk.gdk

rl

我有这个需要x屏幕截图的python代码。

#!/usr/bin/python
import gtk.gdk

w = gtk.gdk.get_default_root_window()
sz = w.get_size()
print "The size of the window is %d x %d" % sz
pb = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,False,8,sz[0],sz[1])
pb = pb.get_from_drawable(w,w.get_colormap(),0,0,0,0,sz[0],sz[1])
if (pb != None):
    pb.save("screenshot.png","png")
    print "Screenshot saved to screenshot.png."
else:
    print "Unable to get the screenshot."

它有效,但我需要导入from gi.repository import Gdkgtk.gdk。我尝试了以下方法:

#!/usr/bin/python
from gi.repository import Gtk, Gdk, GdkPixbuf
from gi.repository.GdkPixbuf import Pixbuf

w = Gdk.get_default_root_window()
sz = w.get_size()
print "The size of the window is %d x %d" % sz
pb = Pixbuf(Gdk.COLORSPACE_RGB,False,8,sz[0],sz[1])
pb = pb.get_from_drawable(w,w.get_colormap(),0,0,0,0,sz[0],sz[1])
if (pb != None):
    pb.save("screenshot.png","png")
    print "Screenshot saved to screenshot.png."
else:
    print "Unable to get the screenshot."

但:

Traceback (most recent call last):
  File "./dsd", line 6, in <module>
    sz = w.get_size()
AttributeError: 'gtk.gdk.X11Window' object has no attribute 'get_size'

有没有办法为该脚本完全使用gi.repository?谢谢

编辑:我解决了AttributeError的问题:'gtk.gdk.X11Window'对象使用sz = w.get_geometry()而不是get_size没有属性'get_size'。新代码:

#!/usr/bin/python
from gi.repository import Gtk, Gdk, GdkPixbuf 
from gi.repository.GdkPixbuf import Pixbuf

w = Gdk.get_default_root_window()
sz = w.get_geometry()
#print "The size of the window is %d x %d" % sz
pb = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB,False,8,sz[2],sz[3])
pb = pb.get_from_drawable(w,w.get_colormap(),0,0,0,0,sz[2],sz[3])
if (pb != None):
    pb.save("screenshot.png","png")
    print "Screenshot saved to screenshot.png."
else:
    print "Unable to get the screenshot."

但是此代码还有另一个问题:

Traceback (most recent call last):
  File "./dsd", line 9, in <module>
    pb = pb.get_from_drawable(w,w.get_colormap(),0,0,0,0,sz[2],sz[3])
AttributeError: 'Pixbuf' object has no attribute 'get_from_drawable'

如何使用Pixbuf的“ get_from_drawable”属性?再次感谢!

伊万·德·帕兹·森特诺

我知道这个答案来得有点晚,但总比没有好。

Gdk3 +实际上简化了Pixbuf从中检索的过程GdkWindow因此,您的代码应如下所示:

#!/usr/bin/python
from gi.repository import Gdk, GdkPixbuf

w = Gdk.get_default_root_window()
sz = w.get_geometry()[2:4]
#print "The size of the window is %d x %d" % sz
pb = Gdk.pixbuf_get_from_window(w, 0, 0, sz[0], sz[1])
if (pb != None):
    pb.savev("screenshot.png","png", [], [])
    print "Screenshot saved to screenshot.png."
else:
    print "Unable to get the screenshot."

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何修复由于缺少“ gi.repository”而导致的“无法导入:GTK +”错误?

如何导入 Gtk、gi.repository?表格网格的最佳 GUI?Tkinter * vs ttk?

如何快速使用GDK

GDK android相机示例如何工作?

如何使用gdk_device_get_position()?

如何使用GDK模拟关键事件?

Vala对更高版本的GTK / GDK生成不建议使用的警告

如何创建Gdk :: Pixbuf实例的std :: map并在Gdk :: Cairo中使用它

如何在不使用已弃用的 Gdk.Screen.get_width() 的情况下在 Python/GTK 中获取总屏幕大小?

为什么python3无法导入gi.repository?

如何在 Haskell 的 GI-Gtk 中将 Widget 转换为 Label?

如何在Linux上使Python-gi GTK + 3窗口散焦(模糊)

如何修复“ gi.require_version('Gtk','3.0')”的“'模块'对象没有属性'required_version'”?

如何通过玻璃gdk API检测头部运动?

如何从Python调用`gdk_frame_clock_get_refresh_info`

如何使用Skype,Gdk警告修复图形问题?

如何调试Google Glass GDK应用程序?

如何创建带有活动堆栈的GDK应用?

GDK_POINTER_MOTION_HINT_MASK 如何工作?

导入gi时出错

无法导入名称“_gi”

请将所有出现的“导入gobject”更改为“从gi.repository导入GObject”

无法在py2exe中包含gi.repository.Gtk

GDK3 / GTK3窗口更新的精确定时

使用mutter,gdk,wnck或gtk在gnome-shell中隐藏窗口标题

GTK3中的gdk_test_simulate_button无法正常工作的问题

自Gtk +版本3.22起,不推荐使用'gdk_screen_get_active_window()'

GDK线程不允许gtk更改(制作计时器)

Gtk2多线程gdk_pixbuf_get_from_drawable问题