Examples

Basic Logging

from logngraph import get_logger
from logngraph.log.levels import DEBUG, INFO, ERROR

logger = get_logger(__name__, level=DEBUG, filename="app.log")

def process_data(data):
    logger.debug(f"Processing data: {data}")
    try:
        result = complex_operation(data)
        logger.info(f"Operation successful: {result}")
        return result
    except Exception as e:
        logger.error(f"Operation failed: {e}")
        return None

Simple Drawing

from logngraph import Window

window = Window("Shapes Demo", 400, 400)

# Draw a face
window.fill("#87ceeb")  # Sky blue background
window.circle((200, 200), 100, "#ffd700")  # Face
window.circle((170, 170), 15, "#000000")   # Left eye
window.circle((230, 170), 15, "#000000")   # Right eye
window.polygon((200, 200), (180, 230), (220, 230), color="#ff0000")  # Nose

window.update()

# Keep window open
while window.running:
    window.handle_events()

Key binding & Vec2D

from logngraph import Window, get_logger
from logngraph.log.levels import INFO
from logngraph.vector import Vec2D

logger = get_logger(__name__, level=INFO)

class App:
    def __init__(self):
        self.window = Window("Interactive Demo", 600, 400, resizable=True)
        self.circle_pos = Vec2D(300, 200)
        self.logger = logger

    def on_k(self):
        self.window.screenshot("verycoolscreenshot.png")
        self.circle_pos.x += 2
        self.circle_pos.x %= self.window.width  # Width changes if window is resized
        self.circle_pos = self.circle_pos.rotate(2, Vec2D(300, 200))
        self.logger.info("Saved screenshot")

    def run(self):
        self.logger.info("Starting interactive demo")
        self.window.bind_keydown("k", self.on_k)
        while self.window.running:
            self.window.fill("#2c3e50")
            self.window.circle(self.circle_pos, 30, "#e74c3c")

            # Handle events, e.g. window close or key press
            self.window.handle_events()

            self.window.update()

        self.logger.info("Demo ended")


if __name__ == "__main__":
    app = App()
    app.run()