Python 如何从gi.repository导入gtk.gdk

Python 如何从gi.repository导入gtk.gdk,python,import,pygtk,gdk,Python,Import,Pygtk,Gdk,我有一段python代码,它截图了x屏幕 #!/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,

我有一段python代码,它截图了x屏幕

#!/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."
它可以工作,但是我需要从gi.repository导入
,而不是gtk.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 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'
回溯(最近一次呼叫最后一次):
文件“/dsd”,第9行,在
pb=pb.get_from_drawable(w,w.get_colormap(),0,0,0,0,sz[2],sz[3])
AttributeError:'Pixbuf'对象没有属性'get_from_drawable'
如何使用Pixbuf的“get_from_drawable”属性?
再次感谢

也许你想要获得宽度()获得高度()


根据他们的文档,get_size()被弃用:

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

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

#!/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."

谢谢@TingPing,我用sz=w解决了get_size()的问题。get_geometry()你有没有找到AttributeError的解决方案:'Pixbuf'对象没有属性'get_from_drawable'@subodhgulaxe不幸的是没有。
dir(Pixbuf)
没有任何关于drawable的选项。
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'
#!/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."