simple graphics is a lightweight python graphics package that offers a more readable alternative to pygame
simple graphics is meant to be extremely readable, allowing you to focus on the logic of your code instead of graphic specifics
pip install simple-graphics-libfrom simple_graphics import *
# Create shapes
rect = Rect(50, 50, 100, 100, color="blue")
circle = Circle(200, 200, radius=50, color="red")
# Define event handlers
@on_click(rect)
def on_rect_click():
print("Rectangle clicked!")
@on_press("space")
def on_space_press():
print("Space pressed!")
# Run the window
run(width=400, height=400, caption="My Graphics App")Simple Graphics offers support for various shapes, that will automatically appear on the screen when defined
Arguments:
| Argument | Type | Role | Default |
|---|---|---|---|
| x | int | The x position of the rect | None |
| y | int | The y position of the rect | None |
| width | int | the width of the rect | 10 |
| height | int | the height of the rect | 10 |
| color | str | the color of the rect | "black" |
| outline | bool | whether the rect is just an outline | False |
Methods:
| Method | Purpose | Arguments | Returns |
|---|---|---|---|
| is_obj_over | determines if a point is in the rectangle | x: int, y:int | bool |
| get_area | returns the area of the rectangle | None | int |
| get_perimeter | returns the perimeter of the rectangle | None | int |
Arguments:
| Argument | Type | Role | Default |
|---|---|---|---|
| x | int | the x position of the circle | None |
| y | int | the y position of the circle | None |
| radius | int | the radius of the circle | 10 |
| color | str | the color of the circle | "black" |
| outline | bool | whether the circle is just an outline | False |
Methods:
| Method | Purpose | Arguments | Returns |
|---|---|---|---|
| is_obj_over | determines if a point is in the circle | x: int, y:int | bool |
| get_area | returns the area of the circle | None | int |
Arguments:
| Argument | Type | Role | Default |
|---|---|---|---|
| points | list[tuple] | the vertices of the polygon | None |
| color | str | the color of the polygon | "black" |
| outline | bool | whther the polygon is just an outline | False |
Methods:
| Method | Purpose | Arguments | Returns |
|---|---|---|---|
| is_obj_over | determines if a point is in the polygon | x: int, y:int | bool |
Arguments:
| Argument | Type | Role | Default |
|---|---|---|---|
| points | list[tuple] | the points that the line will connect | None |
| width | int | the width of the line | 10 |
| color | str | the color of the line | "black" |
Methods:
| Method | Purpose | Arguments | Returns |
|---|---|---|---|
| is_obj_over | determines if a point is over the line | x: int, y:int | bool |
Arguments:
| Argument | Type | Role | Default |
|---|---|---|---|
| x | int | the x value of the text | None |
| y | int | the y value of the text | None |
| text | str | the text of the text | None |
| color | str | the color of the text | "black" |
| size | int | the size of the text | 36 |
Methods:
| Method | Purpose | Arguments | Returns |
|---|---|---|---|
| is_obj_over | determines if a point is in the text | x: int, y:int | bool |
Arguments:
| Argument | Type | Role | Default |
|---|---|---|---|
| x | int | the x value of the image | None |
| y | int | the y value of the image | None |
| img_path | str | the path to the image | None |
| width | int | the width of the image | the width from the image path |
| height | int | the height of the image | the height from the image path |
Methods:
| Method | Purpose | Arguments | Returns |
|---|---|---|---|
| is_obj_over | determines if a point is in the image | x: int, y:int | bool |
Group groups a bunch of objects together, so you can treat them all as one shape, modifying x,y and color and checking for collisions for every shape in the group at once
the below code creates a group of two rectangles
r1 = Rect(20, 20)
r2 = Rect(40, 40)
group = Group(r1, r2)
group.x += 10
group.y -= 10
group.color = "green"Arguments:
| Argument | Type | Role | Default |
|---|---|---|---|
| *shapes | list[Shape] | the shapes to group | None |
Methods:
| Method | Purpose | Arguments | Returns |
|---|---|---|---|
| add | appends shapes to the group | *shapes | None |
| remove | removes shapes from the group | *shapes | None |
| clear | clears the group | None | None |
| is_obj_over | checks if a point is over the group | x, y | bool |
Examples:
r1 = Rect(20, 20)
r2 = Rect(40, 40)
group = Group(r1, r2)
c1 = Circle(100,100)
t1 = Text(300, 300, "hi")
group.add(c1, t1)
group.remove(r2, t1)run() is Simple Graphics main function.
it creates a screen where all defined objects appear and can be interacted with.
Arguments:
| Argument | Type | Role | Default |
|---|---|---|---|
| width | int | The screen width in pixels | 200 |
| height | int | the screen height in pixels | 200 |
| resizable | bool | whether or not the screen is resizable via dragging | True |
| caption | str | the name of the graphics window | "SG window" |
to check for a collision between 2 shapes, use the is_colliding() method:
rect1 = Rect(10, 10)
ball = Circle(10 , 5)
print(is_colliding(ball, rect1)) # TrueInstead of a for loop, Simple Graphics handles events using decorators
The on_tick decorator runs the function every frame
The default framerate is 60 FPS
Functions with the on_tick decorator may not take arguments
@on_tick
def main():
do_something()
run()the on_press runs the decorator whenever a specified button is pressed, or when any button is pressed if none are specified
The function below will run whenever w or s is pressed
@on_press("w,s")
def do_w():
do_soemthing()
run()The function below will run whenever any key is pressed
@on_press
def any_key():
do_something()
run()Functions with the @on_press decorator may only take 1 argument, which will show up as the key pressed
@on_press
def print_key(key):
print(key)
run()the on_hold decorator functions exactly like the on_press decorator, but the function runs every frame for as long as the key is held, instead of just once
The function below will run for as long as w or s is pressed
@on_hold("w,s")
def do_w():
do_soemthing()
run()The function below will run while any key is pressed
@on_press
def any_key():
do_something()
run()Functions with the @on_hold decorator may only take 1 argument, which will show up as the key held
@on_press
def print_key(key):
print(key)
run()functions defined with the on_click decorator will run whenever the specified object is clicked, or whenever any click is detected if none is specified
the function below will run whenever the button rect is clicked
button = Rect(10, 10)
@on_click(button)
def click_button():
print("button clicked")
run()the function below will run when there is any click at all
@on_click
def print_click():
print("clicked!")
run()functions defined with the @on_hover decorator will run whenever the specified object is being hovered over
the function below will run whenever the mouse is over the rectangle
r1 = Rect(200,200, 100, 100)
@on_hover(r1)
def p():
print("hovering")
run(400,400)A mouse object is already initialized in the Simple Graphics import
to get mouse coordinates, simply use mouse.x and mouse.y
Example:
@on_tick
def main():
print(mouse.x, mouse.y)
run()set_bg() simply sets the background to the specified color
the default background color is white
set_bg("black")changes the background color to black
clear_screen() clears the screen.
objects defined before a screen clear can no longer be interacted with
erase() deletes a single object
erased objects can no longer be invoked