95 lines
3.0 KiB
Python
95 lines
3.0 KiB
Python
|
#!/usr/bin/env python
|
||
|
""" pygame.examples.scrap_clipboard
|
||
|
|
||
|
Demonstrates the clipboard capabilities of pygame.
|
||
|
|
||
|
Copy/paste!
|
||
|
|
||
|
|
||
|
Keyboard Controls
|
||
|
-----------------
|
||
|
|
||
|
g - get and print types in clipboard. If, image blit to screen.
|
||
|
p - place some text into clipboard
|
||
|
a - print types available in the clipboard
|
||
|
i - put image into the clipboard
|
||
|
"""
|
||
|
import os
|
||
|
|
||
|
import pygame as pg
|
||
|
import pygame.scrap as scrap
|
||
|
|
||
|
from io import BytesIO
|
||
|
|
||
|
|
||
|
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")
|
||
|
|
||
|
|
||
|
main_dir = os.path.split(os.path.abspath(__file__))[0]
|
||
|
|
||
|
pg.init()
|
||
|
screen = pg.display.set_mode((200, 200))
|
||
|
c = pg.time.Clock()
|
||
|
going = True
|
||
|
|
||
|
# Initialize the scrap module and use the clipboard mode.
|
||
|
scrap.init()
|
||
|
scrap.set_mode(pg.SCRAP_CLIPBOARD)
|
||
|
|
||
|
usage()
|
||
|
|
||
|
while going:
|
||
|
for e in pg.event.get():
|
||
|
if e.type == pg.QUIT or (e.type == pg.KEYDOWN and e.key == pg.K_ESCAPE):
|
||
|
going = False
|
||
|
|
||
|
elif e.type == pg.KEYDOWN and e.key == pg.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(f"Type {t} : (large {len(r)} byte buffer)")
|
||
|
elif r is None:
|
||
|
print(f"Type {t} : None")
|
||
|
else:
|
||
|
print(f"Type {t} : '{r.decode('ascii', 'ignore')}'")
|
||
|
if "image" in t:
|
||
|
namehint = t.split("/")[1]
|
||
|
if namehint in ["bmp", "png", "jpg"]:
|
||
|
f = BytesIO(r)
|
||
|
loaded_surf = pg.image.load(f, "." + namehint)
|
||
|
screen.blit(loaded_surf, (0, 0))
|
||
|
|
||
|
elif e.type == pg.KEYDOWN and e.key == pg.K_p:
|
||
|
# Place some text into the selection.
|
||
|
print("Placing clipboard text.")
|
||
|
scrap.put(pg.SCRAP_TEXT, b"Hello. This is a message from scrap.")
|
||
|
|
||
|
elif e.type == pg.KEYDOWN and e.key == pg.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(f"Contains {types[0]}: {scrap.contains(types[0])}")
|
||
|
print("Contains _INVALID_: ", scrap.contains("_INVALID_"))
|
||
|
|
||
|
elif e.type == pg.KEYDOWN and e.key == pg.K_i:
|
||
|
print("Putting image into the clipboard.")
|
||
|
scrap.set_mode(pg.SCRAP_CLIPBOARD)
|
||
|
fp = open(os.path.join(main_dir, "data", "liquid.bmp"), "rb")
|
||
|
buf = fp.read()
|
||
|
scrap.put("image/bmp", buf)
|
||
|
fp.close()
|
||
|
|
||
|
elif e.type in (pg.KEYDOWN, pg.MOUSEBUTTONDOWN):
|
||
|
usage()
|
||
|
pg.display.flip()
|
||
|
c.tick(40)
|
||
|
pg.quit()
|