55 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/env python
 | |
| # -*- coding: utf-8 -*-
 | |
| """
 | |
| This module provides a base class to display codes and enable saving
 | |
| 
 | |
| (C) 2022 Louis Heredero  louis.heredero@edu.vs.ch
 | |
| """
 | |
| 
 | |
| import pygame
 | |
| 
 | |
| class Base:
 | |
|     def __init__(self, width, height, caption):
 | |
|         pygame.init()
 | |
|         
 | |
|         pygame.display.set_caption(caption)
 | |
|         self.w = pygame.display.set_mode([width, height])
 | |
|         
 | |
|         self.controls([
 | |
|             "CTRL + S: save as",
 | |
|             "ESC: quit"
 | |
|         ])
 | |
|     
 | |
|     def controls(self, controls, margin=2):
 | |
|         longest = max(list(map(len, controls))+[10])
 | |
|         print("┌─" + "─"*(longest+margin) + "─┐")
 | |
|         
 | |
|         _ = "\x1b[1;4mControls:\x1b[0m"
 | |
|         _ += " "*(longest+margin-9)
 | |
|         print(f"│ " + _ + " │")
 | |
|         for c in controls:
 | |
|             print("│ " + " "*margin + c.ljust(longest) + " │")
 | |
|         print("└─" + "─"*(longest+margin) + "─┘")
 | |
|     
 | |
|     def main(self):
 | |
|         pygame.display.flip()
 | |
|         
 | |
|         stop = False
 | |
|         while not stop:
 | |
|             event = pygame.event.wait()
 | |
|             # ESC or close button -> quit
 | |
|             if event.type == pygame.QUIT:
 | |
|                 stop = True
 | |
| 
 | |
|             elif event.type == pygame.KEYDOWN:
 | |
|                 if event.key == pygame.K_ESCAPE:
 | |
|                     stop = True
 | |
| 
 | |
|                 # CTRL+S -> save image
 | |
|                 elif event.key == pygame.K_s and \
 | |
|                      event.mod & pygame.KMOD_CTRL:
 | |
|                     self.save()
 | |
|     
 | |
|     def save(self):
 | |
|         path = input("Save as: ")
 | |
|         pygame.image.save(self.w, path) |