Aplicação Desktop Multiplataforma com Python
Logo nos dias de hoje, com ascensão da web e mobile, você vem me falar de aplicações desktops, que rodam direto no sistema operacional?
Se você trabalha numa startup e deseja automatizar alguns processos fora do browser, por que não? O foco é entregar valor pro cliente, não importa de que forma.
Você precisa de algo alto nível, que seja rápido pra fazer. O programa tem que ser multiplataforma, rodar em Linux e Windows principalmente.
Esqueça o Java, muito verboso, será que conseguimos fazer em Ruby ou Python?
Python por ser uma linguagem mais madura e que tem abrangência não só pra web parece uma boa solução.
Pesquisando na net encontrei o wxPython, um wrapper para a biblioteca cross-platform wxWidgets que é feita em C++.
Setup
Isso é o que precisamos para desenvolver com wxPython:
- Python 2.7 instalado (já vem com Linux)
- wxPython:
sudo apt-get update && sudo apt-get install python-wxtools
- CXFreeze (opcional, utilizado para construir os binários):
sudo apt-get install cx-freeze
- PIP (opcional, útil se você for instalar outras bibliotecas):
sudo apt-get install python-pip
Recursos
Abaixo deixo alguns excelentes recursos que utilizei para aprender como desenvolver com wxPython (todos em inglês):
Livros
- wxPython 2.8 Application Development Cookbook (2010)
- wxPython in Action
O primeiro livro é muito bom, praticamente só usei ele..
Tutoriais/Documentação
- Layout management in wxPython
- Catching all the Errors
- Advanced Generic Widgets (AGW) é um pacote de widgets customizados/melhorados. A partir da versão 2.8.9.2 ele foi integrado ao wxPython.
No projeto que criei, fiz uso do widget UltimateListCtrl
contido no AGW, porém, usei a versão standalone disponível aqui.
Dicas
Erros e feedback
Por padrão, os erros que ocorrem durante a execução do programa quando compilado não são exibidos. O programa trava e o usuário fica sem feedback. É uma boa fazer uso do tutorial acima para exibir erros.
Use threads
Operações bloqueantes como consumir dados de uma api ou manipular arquivos são recomendadas que sejam executas numa thread separada, para não obstruir o programa.
Só tome cuidado porque uma thread paralela não pode modificar a interface gráfica, você deve fazer isso chamando callbacks. No primeiro livro citado tem um capítulo que fala sobre o tema, vale a penal ler.
Crie um Makefile
Para buildar/instalar a aplicação, limpar arquivos/banco de dados e tarefas como essas que necessitam de comandos shell, é bom colocar num Makefile, assim você só executa um comando para cada rotina.
Acessar janela principal
Use wx.GetApp().GetTopWindow()
em qualquer parte de sua aplicação para ter acesso a janela principal (não esqueça de importar o pacote wx
). Se você tem uma barra de status na primeira tela e deseja definir um texto nela a partir de outras classes por exemplo, invés de ficar passando o objeto principal como parâmetro, basta você usar o trecho acima que conseguirá acesso.
Conclusão
É isso pessoal, minha idéia com esse post é apenas mostrar pra vocês que há uma forma mais simples de criar esse tipo de aplicação de uma forma menos dolorosa.
Até mais.