【问题标题】:How can i import gtk.gdk from gi.repository我如何从 gi.repository 导入 gtk.gdk
【发布时间】:2013-08-10 23:30:22
【问题描述】:

我有这个截取 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 Gdk 而不是 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 6, in <module>
    sz = w.get_size()
AttributeError: 'gtk.gdk.X11Window' object has no attribute 'get_size'

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

编辑:我解决了 AttributeError 的问题:'gtk.gdk.X11Window' 对象没有属性 'get_size' 使用 sz = w.get_geometry() 而不是 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”属性? 再次感谢!

【问题讨论】:

  • 你有没有解决 AttributeError: 'Pixbuf' object has no attribute 'get_from_drawable'
  • @SubodhGhulaxe 不幸的是没有。 dir(Pixbuf) 没有任何关于可绘制的选项。

标签: python import pygtk gdk


【解决方案1】:

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

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."

【讨论】:

    【解决方案2】:

    也许你想要 get_width()get_height()

    根据他们的文档 get_size() 已弃用:https://developer.gnome.org/gdk/stable/gdk-Drawing-Primitives.html#gdk-drawable-get-size

    【讨论】:

    • 感谢@TingPing 我使用 sz = w.get_geometry() 解决了 get_size() 的问题
    猜你喜欢
    • 2011-12-11
    • 1970-01-01
    • 2014-11-10
    • 2022-01-03
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    相关资源
    最近更新 更多