wxPython + Basilisp — Demo
Uma aplicação GUI demonstrando a integração entre wxPython e
Basilisp — um dialeto Clojure/Lisp hospedado em Python 3.
Para rodar, use:
poe main
O que é Basilisp?
Basilisp é um dialeto Lisp
compatível com Clojure que roda sobre a JVM Python. Arquivos fonte usam
a extensão .lpy e têm interoperabilidade total com qualquer biblioteca
Python — incluindo wxPython.
Pré-requisitos
- Python 3.9 ou superior
- Sistema operacional com suporte a GUI (Linux com GTK3, macOS ou Windows)
No Linux (Ubuntu/Debian) — instale as dependências GTK antes:
sudo apt install python3-dev libgtk-3-dev libglib2.0-dev \
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
freeglut3-dev libgl1-mesa-dev libglu1-mesa-dev \
libpng-dev libjpeg-dev libtiff-dev libsdl2-dev \
libwebkit2gtk-4.0-dev libnotify-dev libsm-dev
Instalação
# 1. Clone ou extraia este projeto
cd wxdemo
# 2. (Recomendado) Crie um ambiente virtual
python -m venv .venv
source .venv/bin/activate # Linux/macOS
# .venv\Scripts\activate # Windows
# 3. Instale as dependências
pip install basilisp wxPython
Dica (Linux): Caso a compilação do wxPython falhe, tente usar
os wheels pré-compilados:
pip install -f https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-22.04 wxPython
Executando
Opção 1 — via script Python (bootstrap)
python run.py
Opção 2 — via CLI do Basilisp
basilisp run -n src/wxdemo/core.lpy
Estrutura do projeto
wxdemo/
├── run.py # Bootstrap Python → Basilisp
├── README.md
└── src/
└── wxdemo/
└── core.lpy # Código principal em Basilisp
Funcionalidades da demo
| Funcionalidade | Descrição |
|---|
| Saudação contextual | Detecta hora do dia e exibe "Bom dia/tarde/noite" |
| Contador atômico | Usa atom do Clojure — estado imutável gerenciado |
| Lista de tarefas | Adiciona/remove itens; aceita Enter no campo de texto |
| Relógio em tempo real | Atualizado via wx.Timer a cada segundo |
Conceitos Basilisp demonstrados
;; Interop com Python — chamar métodos com notação de ponto
(.Show frame)
(.Bind btn wx/EVT_BUTTON (fn [_] ...))
;; Importar módulos Python normalmente
(ns wxdemo.core
(:import wx [datetime :as dt]))
;; Estado gerenciado com atom (como em Clojure)
(def contador (atom 0))
(swap! contador inc)
(reset! contador 0)
;; Funções de ordem superior como handlers de evento
(.Bind btn wx/EVT_BUTTON
(fn [evento]
(println "clicado!")))
;; Interop de constantes wxPython
(bit-or wx/EXPAND wx/ALL)
Licença
MIT