#!/usr/bin/env python """ Demonstrates the clipboard capabilities of pygame. """ import pygame from pygame.locals import * import pygame.scrap as scrap import StringIO def usage (): print "Press the 'g' key to get all of the current clipboard data" print "Press the 'p' key to put a string into the clipboard" print "Press the 'a' key to get a list of the currently available types" print "Press the 'i' key to put an image into the clipboard" pygame.init () screen = pygame.display.set_mode ((200, 200)) c = pygame.time.Clock () going = True # Initialize the scrap module and use the clipboard mode. scrap.init () scrap.set_mode (SCRAP_CLIPBOARD) usage () while going: for e in pygame.event.get (): if e.type == QUIT or (e.type == KEYDOWN and e.key == K_ESCAPE): going = False elif e.type == KEYDOWN and e.key == K_g: # This means to look for data. print "Getting the different clipboard data.." for t in scrap.get_types (): r = scrap.get (t) if r and len (r) > 500: print "Type %s : (large buffer)" % t else: print "Type %s : %s" % (t, r) if "image" in t: namehint = t.split("/")[1] if namehint in ['bmp', 'png', 'jpg']: f = StringIO.StringIO(r) loaded_surf = pygame.image.load(f, "." + namehint) screen.blit(loaded_surf, (0,0)) elif e.type == KEYDOWN and e.key == K_p: # Place some text into the selection. print "Placing clipboard text." scrap.put (SCRAP_TEXT, "Hello. This is a message from scrap.") elif e.type == KEYDOWN and e.key == K_a: # Get all available types. print "Getting the available types from the clipboard." types = scrap.get_types () print types if len (types) > 0: print "Contains %s: %s" % (types[0], scrap.contains (types[0])) print "Contains _INVALID_: ", scrap.contains ("_INVALID_") elif e.type == KEYDOWN and e.key == K_i: print "Putting image into the clipboard." scrap.set_mode (SCRAP_CLIPBOARD) fp = open ("data/liquid.bmp", "rb") buf = fp.read () scrap.put ("image/bmp", buf) fp.close () elif e.type in (KEYDOWN, MOUSEBUTTONDOWN): usage () pygame.display.flip() c.tick(40)