RSS

PySide e aplicações web

28 set

Recentemente eu me vi obrigado a mudar a linha de desenvolvimento de um projeto meu, e pra isso eu resolvi abandonar muita coisa e me dedicar de fato ao Python. Eu sempre soube que a comunidade do Python era muito grande e bem entusiasmada, mas me surpreendi com o quanto eu consegui progredir em tão pouco tempo, tá dando tempo até de postar no blog e adiantar tempo no cronograma :D

Enfim, minha situação é a seguinte: pretendo fazer um sistema web, com a interface inteira em HTML e um back-end qualquer (tá, eu vou escolher o Django, mas você que está lendo é livre para escolher qualquer outro), mas que o usuário final veja esse sistema como um software comum, com atalho na área de trabalho, janelinha dedicada e tudo mais. Até ai eu poderia usar um Adobe AIR da vida, mas o problema é que eu preciso me comunicar com alguns recursos do PC, tipo comandos no terminal, janela de autenticação, ou até mesmo um “visual” mais desktop. Então me surgiram diversas opções pra Mono, Python, e até o C++… Mas quem me agradou de verdade foi o PySide, uma binding oficial do Qt em Python.

O que me convenceu a gostar do PySide foi a facilidade de implementar instâncias derivadas de QObject dentro de um QWebView, essas instâncias ficam acessíveis no objeto window do JavaScript. Suponhamos que eu tenha uma classe mais ou menos assim:

from PySide import QtCore

class MyJSObject(QtCore.QObject):
    @QtCore.Slot()
    def teste(self):
        print "Hello from JavaScript"

Com essa classe criada, eu posso adicioná-la ao frame principal de um determinado QWebView da seguinte maneira:

meuBrowser = QtWebKit.QWebView()
meuBrowser.load(QtCore.QUrl('http://localhost/minhapagina.htm'))
meuBrowser.page().mainFrame().addToJavaScriptWindowObject('myjs', MyJSObject())

Experimente fazer uma chamada no JavaScript ao objeto window["myjs"].teste(), ou se você preferir injetar um código JavaScript para esse fim, também é possível através do evaluateJavaScript():

meuBrowser.page().mainFrame().evaluateJavaScript('window["myjs"].teste()')

Agora é só conferir o terminal do Python pra você ver o print do método teste() funcionando. A partir desse conceito você tem uma gama de opções para desenvolver aplicações ricas usando todo potencial do Python e do que há de melhor na web ao mesmo tempo.

Não se esqueça de os métodos declarados dentro da sua classe derivada de QObject precisam do decorator Slot para ficarem visíveis no JavaScript. Para tirar mais dúvidas quanto as slots e aos signals, leia esse trecho da documentação oficial.

Dedico esse artigo ao pessoal do canal #python na rede vIRCio, em especial ao Rafaelzinhu por ter me indicado esse servidor IRC e ao vitorlobo com o blog Pythonando, que serviu de ótima referência pra que eu pudesse destrinchar bastante coisa sobre o PySide.

 
3 Comments

Publicado por em 28 28UTC setembro 28UTC 2011 em Web

 

3 respostas para PySide e aplicações web

  1. Terry Laundos Aguiar

    28 28UTC setembro 28UTC 2011 at 6:36 PM

    Parabéns pelo artigo Timóteo, estou com uma missão, que me vi na duvida de como e com o que realizar, já me passou pela cabeça Python, Java e até C . No momento estou achando que vou embarcar nessa sua idéia. Parabéns mesmo :)

     
    • timoteoramos

      28 28UTC setembro 28UTC 2011 at 8:52 PM

      Obrigado pelo comentário, Terry :)

      Em um único dia eu estou conseguindo fazer tudo que eu quero com o PySide, inclusive essa comunicação com JavaScript, é o canal perfeito pra fazer bastante coisa com Django, jQuery e outras ótimas tecnologias da web… Eu ainda vou escrever um artigo sobre PyInstaller e Py2Exe pra fazer executáveis Windows em breve, além de trocar umas ideias com o vitorlobo pra incrementar o material dele de PySide.

       

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s

 
Seguir

Obtenha todo post novo entregue na sua caixa de entrada.