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
Como wxPython é uma biblioteca para construir aplicações GUI, precisamos ter um ambiente X instalado. Você terá problemas se estiver instalando numa Vagrant box por exemplo.

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

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.

Written on March 28, 2015

Share: