Taking screenshot using python
5,603
The correct way to take an Screenshot using PyGobject (the Gtk version used by Quickly) is:
from gi.repository import Gdk
window = Gdk.get_default_root_window()
x, y, width, height = window.get_geometry()
print("The size of the root window is {} x {}".format(width, height))
# get_from_drawable() was deprecated. See:
# https://developer.gnome.org/gtk3/stable/ch24s02.html#id-1.6.3.4.7
pb = Gdk.pixbuf_get_from_window(window, x, y, width, height)
if pb:
pb.savev("screenshot.png", "png", (), ())
print("Screenshot saved to screenshot.png.")
else:
print("Unable to get the screenshot.")
The first version you posted is for the older PyGtk. So it works on console because it only loads PyGtk. In Quickly apps, PyGobject is loaded, and you cannot load both. You got stuck looking for get_from_drawable(), see section "GdkDrawable is gone":
Related videos on Youtube
Author by
Subodh Ghulaxe
Updated on September 18, 2022Comments
-
Subodh Ghulaxe over 1 year
The below code work perfectly when I run it as a console application
import gtk.gdk import time 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]) ts = time.time() filename = "screenshot" filename += str(ts) filename += ".png" if (pb != None): pb.save(filename,"png") print "Screenshot saved to "+filename else: print "Unable to get the screenshot."
But now I when I used it in a ubuntu application (using the quickly and glade) it is giving me error messages
WARNING **: Couldn't connect to accessibility bus: Failed to connect to socket /tmp/dbus-O1o56xxlHA: Connection refused /usr/lib/python2.7/dist-packages/gobject/constants.py:24: Warning: g_boxed_type_register_static: assertion `g_type_from_name (name) == 0' failed import gobject._gobject /usr/lib/python2.7/dist-packages/gtk-2.0/gtk/__init__.py:40: Warning: specified class size for type `PyGtkGenericCellRenderer' is smaller than the parent type's `GtkCellRenderer' class size from gtk import _gtk /usr/lib/python2.7/dist-packages/gtk-2.0/gtk/__init__.py:40: Warning: g_type_get_qdata: assertion `node != NULL' failed from gtk import _gtk
How can I improve this code to work in GUI based application
EDIT What I have done to change the code
from gi.repository import Gdk, GdkX11, Gtk w = Gdk.get_default_root_window() geo = w.get_geometry() pb = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB,False,8,geo[2],geo[3]) pb = pb.gdk_pixbuf_get_from_window(w,0,0,geo[2],geo[3]) pixbuf = pb.get_from_drawable(w,w.get_colormap(),0,0,0,0,geo[2],geo[3]) pixbuf.save("xdfgxfdgdfxgfdx.png","png") print "The size of the window is %d x %d" % sz pix = GdkPixbuf.Pixbuf.gdk_pixbuf_get_from_window(root_window, 0, 0, 500, 500) pix = GdkPixbuf.gdk_pixbuf_get_from_window(window,0,0,500,500); ts = time.time() filename = "screenshot" filename += str(ts) filename += ".png" if (pix != None): pix.save(filename,"png") print "Screenshot saved to "+filename else: print "Unable to get the screenshot."
But still it is giving me error
(0, 0, 1366, 768) <Pixbuf object at 0x2966410 (GdkPixbuf at 0x2e42d90)> Traceback (most recent call last): File "/home/srs/projectob-team/projectob_team/SelectmemoDialog.py", line 63, in on_start_clicked pb = pb.gdk_pixbuf_get_from_window(w,0,0,geo[2],geo[3]) AttributeError: 'Pixbuf' object has no attribute 'gdk_pixbuf_get_from_window'
-
WinEunuuchs2Unix almost 3 yearsNote the link is 404 (Not Found).
-
Havok over 2 years@WinEunuuchs2Unix fixed the link. Thanks.