Fechar

Mostrando postagens com marcador Python. Mostrar todas as postagens
Mostrando postagens com marcador Python. Mostrar todas as postagens

domingo, 26 de fevereiro de 2012

Preparando o Mint/Ubuntu para desenvolver com Pyqt4

0 comentários

Instalando o PyQt4 no Linux Mint/Ubuntu

Introdução

O PyQt4 é mais uma alternativa para desenvolver aplicações desktop com interface gráfica amigável ao usuário. Suporta Linux e outros sistemas Unix, bem como Mac OS X e Microsoft Windows. 
O PyQt é desenvolvido por British firm Riverbank Computing e está disponível sob termos similares aos Qt 4,5. Isto significa uma variedade de licenças, incluindo GNU General Public License (GPL) e licença comercial, mas não o GNU Lesser General Public License (LGPL).  

A melhor versão do Python atualmente para se trabalhar com PyQt4 é a 2.7 devido a algumas questões de compatibilidade, mas nada impede de se a usar uma versão acima desta.

Neste tutorial foi usado o Linux Mint 12 com Kde 4.8 rodando sobre o kernel  3.0.0-16-generic em um hardware com processador intel  pentium(R) dual CPU @240 Ghz com 4 Gb DDR 3.

Instalando o Python 2.7

Geralmente as distribuições Linux já trazem o Python instalado por padrão, você pode verificar a versão do python com o comando:

evaldo@TUX ~ $ python -vV
Python 2.7.2+


Se você não possuir a versão 2.7 pode instala-la assim:

TUX evaldo # aptitude install python2.7


Instalando as dependências

Com o Python instado, agora precisamos instalar as dependias do PyQt4:

TUX evaldo #  aptitude install python-pip python2.7-dev libxext-dev python-qt4 qt4-dev-tools build-essential qt4-designer  qt4-dev-tools libqt4-dev ibXext


Instando o PyQt4

Vá no site http://www.riverbankcomputing.co.uk/software/pyqt/download e baixe a última versão do PyQt4 e do Sip. (SIP é uma ferramenta de software de código aberto usado para conectar programas de computador ou bibliotecas escritas em C ou C + + com a linguagem Python).

Descompacte os arquivos em algum diretório:

TUX python # tar -xvf PyQt-x11-gpl-4.9.1.tar.gz 

TUX python # tar -xvf sip-4.13.2.tar.gz 

Precisamos instalar primeiro o sip. Entre o diretório onde foi descompactado o arquivo:

TUX python # cd sip-4.13.2/

Se você tiver mais de uma versão do python instalada, especifique com qual versão quer compilar com o seguinte comando:

TUX sip-4.13.2 # python2.7 configure.py ; make ; make install

A instalação do sip é rápido pouco mais de 30~60 segundos dependendo do seu pc.

Após instalar o sip podemos instalar o PyQt4. Acesse o diretório onde descompactou o arquivo e execute o mesmo comando acima:

TUX sip-4.13.2 # cd ../PyQt-x11-gpl-4.9.1/

TUX sip-4.13.2 # python2.7 configure.py ; make ; make install

A instalação do PyQt4 leva em torno de 40 minutos então pode deixar rodando e ir tomar um café :)   

Rodando um teste


Para comprovar que o PyQt4 foi instalado podemos rodar rodar um teste. Salve o codigo abaixo como teste.py:
  
#!/usr/bin/python

# teste.py

import sys
from PyQt4 import QtGui

app = QtGui.QApplication(sys.argv)

widget = QtGui.QWidget()
widget.resize(250, 150)
widget.setWindowTitle('simple')
widget.show()

sys.exit(app.exec_())
  
Agora execute:
evaldo@TUX ~ $ chmod +x teste.py 
evaldo@TUX ~ $ ./teste.py 


Resultado:



A documentação do PyQt4 pode ser encontrada aqui .

quarta-feira, 21 de setembro de 2011

Python: Download File from web

0 comentários
Baixando um arquivo com pyhon de uma servidor web que requer controle por cookie.

Como exemplo vamos baixar o arquivo com todos os resultados da mega sena

'''
Created on 20/09/2011

@author: Evaldo
'''
import cookielib,urllib2,urllib

class Downloads(object):
    '''
    classdocs
    '''
 
    def FileFromUrl(self,url, localFileName = None):        
        ''' Realiza a requisição'''

        request = urllib2.Request( url)
        response = urllib2.urlopen( request )    
               
        ''' Salvar o arquivo'''
        output = open(localFileName,'wb')
        output.write(response.read())
        output.close()


    def __init__(self):
        '''
        Define o cookie para a conexao
        '''
        self._logged_in = False
        self._cookies = cookielib.CookieJar()
        self._opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self._cookies))
        urllib2.install_opener(self._opener)
      
if __name__ == '__main__':
    try:
        print 'Baixando' 
        d = Downloads()
        d.FileFromUrl('http://www1.caixa.gov.br/loterias/_arquivos/loterias/D_megase.zip','m.zip')
        print 'Concluido'
    except Exception as e:
        print 'Erro' , e


Se você precisar passar algum parâmetro no cookie pode faze-lo assim


'''
Created on 20/09/2011

@author: Evaldo
'''
import cookielib,urllib2,urllib

class Downloads(object):
    '''
    classdocs
    '''
 
    def FileFromUrl(self,url, localFileName = None):        
        
       '''Parametros do cookie'''
        post = urllib.urlencode({"security" : "false"})

        ''' Realiza a requisição''' 
        request = urllib2.Request( url, post)
response = urllib2.urlopen( request )    
               
        ''' Salvar o arquivo'''
        output = open(localFileName,'wb')
        output.write(response.read())
        output.close()


    def __init__(self):
        '''
        Define o cookie para a conexao
        '''
        self._logged_in = False
        self._cookies = cookielib.CookieJar()
        self._opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self._cookies))
        urllib2.install_opener(self._opener)
      
if __name__ == '__main__':
    try:
        print 'Baixando' 
        d = Downloads()
        d.FileFromUrl('http://www1.caixa.gov.br/loterias/_arquivos/loterias/D_megase.zip','m.zip')
        print 'Concluido'
    except Exception as e:
        print 'Erro' , e


Isso também resolve o erro gerado pela urllib2:

HTTP Error 302: The HTTP server returned a redirect error tha t would lead to an infinite loop.

quarta-feira, 23 de março de 2011

1 comentários
Enter como tab no PyQt4
 Alguns usuários preferem usar o enter ao invez do tab para mudar o foco  dos campos. Com o PyQt isso pode ser feito facilmente.

Como teste criei o seguinte form no QtDesigner.  Eu usei um Qwidget como container, mas poderia ser um QMainWindow. Adicionei vários QLables e QLineEdits e 2 QpushButton:
No próprio QtDesigner, definir a ordem dos campos clicando no botão "Edit tab order" e depois  clicando nos campos. Isso também pode ser feito diretamente no código python.


Não vou postar aqui a implementação da classe que irá o instanciar form, pois não é foco do artigo.

No init da classe que instancia o form, fazaemos um laço que percorre todos os widgetse verifica quais deles são do tipo QLineEdit (podia ser de qualquer outro tipo, como um QtCombobox, desde que tivesse o evento keyPressEvent ) e  setamos o evento keyPressEvent  para a função "keyPressCampos" que vamos implementar na nossa classe:

for x in self.children():#percorrendo todos os wdigets associados
    if (isinstance(x,QtGui.QLineEdit)): #verifica se o widget é  QlineEdit
        x.keyPressEvent = self.keyPressCampos #associa o evento a função

Agora definimos a função keyPressCampos onde tratamos o evento, filtrando o tipo de tecla pressionada e jogando o foco para o próximo controle:

		
def keyPressCampos (self, event):
    key = event.key()        # captura a tecla pressionada

    if (key == QtCore.Qt.Key_Enter) or (key == 16777220): # verifica o tipo de tecla
         self.focusNextChild() # muda o foco para o proximo  widget
         event.accept()  # aceita o evento               
    else:    
         event.accept() # Se a tecla não for enter, aceita o evento

Pronto! Com isso, ao terminar de digitar em algum QlineEdit e teclar enter  o foco ira para o próximo widget no form:


sexta-feira, 28 de janeiro de 2011

Treinamento Python do Google

0 comentários
Se tiver dificuldades com o inglês, o youtube possui um recurso de "tradução de legendas", basta clicar no botão "CC" no player e depois escolher "Traduzir Legendas"



















Materiais e exercícios:
http://code.google.com/intl/pt-BR/edu/languages/google-python-class/

segunda-feira, 13 de dezembro de 2010

0 comentários
python 3.0: Gravando dicionários em arquivos

    Dicionários é um recurso interessante do python que nos permite representa uma coleção de elementos, como a strut do c ou o record do pascal. E também permite utilizar um índice de qualquer tipo imutável, ao contrário da lista, onde índices são sempre inteiros sequencialmente atribuídos.
    Para gravar o dicionário em um arquivo vamos precisar das funções dump e load disponíveis no modulo pickle. o pickle implementa um algoritmo fundamental, mas que é poderoso para serializar e de-serializar uma estrutura de objetos Python (python.org).
O processo é feito convertendo o objeto em uma stream(fluxo de bytes) e gravando o no arquivo (dump). A operação inversa (load) converte o stream gravado no arquivo em um objeto.

Exemplo gravação:

import pickle #modulo pickle

dic={ 'Nome':'Evaldo','Idade':25} #dicionário
arq = open('teste.txt','wb') #abrir o arquivo para gravação - o “b” significa que o arquivo é binário
pickle.dump(dic,arq) #Grava uma stream do objeto “dic” para o arquivo.
arq.close() #fechar o arquivo


Exemplo leitura:

import pickle #modulo pickle

arq = open('teste.txt','rb') #abrir o arquivo para leitura - o “b” significa que o arquivo é binário
dic = pickle.load(arq)#Ler a stream a partir do  arquivo e reconstroi o objeto original.
arq.close() #fechar o arquivo
print (dic) #imprime o conteúdo do dicionário

Saída:
>>>  { 'Nome':'Evaldo','Idade':25}


Mais informações:
http://docs.python.org/library/pickle.html
http://defpython.blogspot.com/2007/01/conhecendo-os-dicionrios.html

quinta-feira, 9 de dezembro de 2010

0 comentários
python: for loop reverso

Python é um linguagem de programação simples e elegante. A maioria dos comandos realiza a mesma instrução que outras linguagens de programação gastando até ⅓ a menos de código.  

A linguagem foi projetada com a filosofia de enfatizar a importância do esforço do programador sobre o esforço computacional. Prioriza a legibilidade do código sobre a velocidade ou expressividade. Combina uma sintaxe concisa e clara com os recursos poderosos de sua biblioteca padrão e por módulos e frameworks desenvolvidos por terceiros. (Fonte: Wikipédia)

Para um exemplo de estrutura de repetição FOR em C/C++ para contar de 10 ate 0 escrevemos:
int i;
for (i = 10; i >= 0; --i){
    printf ("%d",i);
}

E em Pascal
var i : Integer;
begin
for i := 10 downto 0 do
begin
         write (i);
    end;
end;

O equivalente em python pode ser feito:
       for i in range(10, -1, -1):
print i

Ou
      for i in reversed(range(1,10)):
print (i)


Para mais informações visite: http://www.python.org/

Palavras chaves python, loop

Mais Populares

Seguidores

Є & V. Copyright 2011 Evaldo Avelar Marques - sprintrade network