Revista Do Linux
 


 
EDIÇÃO DO MÊS
 CD do Mês


 Capa
 Entrevista
 Estudo de Caso
 Desenvolvimento
 Programação
 Segurança
 Internacional
 Mascote
 Corporativo
 Distro
assinantes
 

Python QT

Aprenda mais sobre a combinação de uma das mais poderosas linguagens com um dos melhores toolkits gráficos

O Python é uma linguagem de programação poderosa e fácil de aprender. Há algum tempo a febre do Python deu a impressão de que a linguagem era um tipo de XML, ou seja, mais uma solução para todos os problemas da humanidade que aparecem a torto e a direito por aí nestes tempos. Em pouco tempo, porém, se viu que o Python era real.

Com características emprestadas de várias outras linguagens associadas a aspectos próprios bastante, digamos, característicos, o Python vem se firmando como a mais bem sucedida das linguagens interpretadas.

Uma das grandes vantagens do Python sobre outras linguagens semelhantes é a sua capacidade de permitir que a linguagem seja facilmente estendida com funções em C ou C++.

A Qt é um toolkit de desenvolvimento de aplicações em C++ multiplataforma. Para muitos, é considerado o melhor toolkit gráfico para qualquer plataforma, oferecendo, além da funcionalidade gráfica, funções de acesso a bancos de dados, rede, gerenciamento de arquivos, etc.

Surge então o PyQT, ou Python QT, que se propõe a unir a melhor linguagem e o melhor toolkit num só produto. Com o PyQT é possível utilizar Python para criar interfaces de aparência bem profissional com a Qt.

O primeiro passo é instalar o PyQT. A referência aos fontes pode ser encontrada no final do artigo. Os pacotes binários devem ser oferecidos pelas várias distribuições.

Este arquivo não se propõe a ensinar ninguém a usar Python, nem a usar Qt. Destina-se, sim, às pessoas que conhecem os dois e gostariam de trabalhar com PyQT. Os links para documentação de Python e Qt se encontram no final do artigo.

Hello world

Como de costume, a primeira coisa que se faz com uma nova linguagem de programação (ou novo toolkit neste caso) é criar o famoso programa “Hello world”.

#!/usr/bin/env python

 

import sys

from qt import *

 

a = QApplication(sys.argv)

 

hello = QPushButton(“Hello world!”,None)

hello.resize(100,30)

 

a.setMainWidget(hello)

hello.show()

a.exec_loop()

Quem conhece programação Qt vai, certamente, reconhecer este trecho, já que é muito semelhante à programação tradicional em C++. Este texto já pode dar uma boa idéia do quanto é parecida a programação Qt em Python e C++.

Sinais e Slots

O uso de sinais e slots em PyQT é uma tarefa bastante simples. É possível conectar sinais tanto para slots Qt quanto para métodos em uma classe Python.

Os sinais são identificados como sendo Qt ou Python usando-se SIGNAL() ou PYSIGNAL() respectivamente. Da mesma forma, os slots podem ser funções Python normais ou slots Qt (SLOT()). Veja algumas maneiras de se conectar um sinal a um slot:

QObject.connect(a,SIGNAL(“QtSig()”),funcaoPython)

QObject.connect(a,SIGNAL(“QtSig()”),classePython.metodoPython)

QObject.connect(a,SIGNAL(“QtSig()”),PYSIGNAL(“SinalPython”))

QObject.connect(a,SIGNAL(“QtSig()”),SLOT(“SlotQt()”))

QObject.connect(a,PYSIGNAL(“SinalPython”),funcaoPython)

QObject.connect(a,PYSIGNAL(“SinalPython”),classePython.metodoPython)

QObject.connect(a,PYSIGNAL(“SinalPython”),SIGNAL(“SinalQt()”))

QObject.connect(a,PYSIGNAL(“SinalPython”),SLOT(“SlotQt()”))

Sabendo isso, pode-se conectar um sinal e um slot para fazer o botão “Hello World” fechar o programinha anterior:

#!/usr/bin/env python

 

import sys

from qt import *

 

a = QApplication(sys.argv)

 

hello = QPushButton(“Hello world!”,None)

hello.resize(100,30)

 

hello.connect(hello,SIGNAL(“clicked()”),a,SLOT(“quit()”))

 

a.setMainWidget(hello)

hello.show()

a.exec_loop()

Assim, quando o botão hello for pressionado (sinal clicked ()), o slot quit() da aplicação será chamado.

Widgets personalizados

Tentando um exemplo ligeiramente mais complexo, podemos ver como criar um widget personalizado. O exemplo ainda ajuda a visualizar como as classes Qt são utilizadas exatamente como se fossem classes Python normais:

#!/usr/bin/env python

 

import sys

from qt import *

 

class WidgRevista(QVBox):

    def __init__(self,parent=None,name=None):

        QVBox.__init__(self,parent,name)

 

        lcd = QLCDNumber(2,self,”lcd”)

 

slider = QSlider(Qt.Horizontal,self,”slider”)

        slider.setRange(0,99)

        slider.setValue(0)

     self.connect(slider,SIGNAL(“valueChanged(int)”),lcd,SLOT(“display(int)”))

 

        sair = QPushButton(“Sair”,self,”sair”)

 

        self.connect(sair,SIGNAL(“clicked()”),qApp,SLOT(“quit()”))

 

 

a = QApplication(sys.argv)

 

w = WidgRevista()

a.setMainWidget(w)

w.show()

a.exec_loop()

QT Designer

Para quem está habituado a utilizar o fantástico Qt Designer para criar interfaces para Qt não tem com que se preocupar. O PyQT vem com um utilitário chamado pyuic, que faz as vezes do uic da Trolltech, só que gerando, claro, código Python.

Para gerar uma interface com o pyuic, salve a interface no QT Designer e use o compilador para gerar o arquivo Python:

pyuic rev4.ui > rev4.py

Onde rev4.ui é o arquivo do QT Designer e rev4.py, o arquivo onde o código Python será gerado. O código gerado contém uma classe representando o diálogo ou janela criada já com os métodos e conexões feitas no QT Designer prontas para serem utilizadas. A figura 2 mostra um diálogo feito em QT Designer sendo executado já como programa Python.

Módulos

Até agora usamos apenas o módulo “principal” (qt) do PyQT, que é o que mais será usado pelo programador, mas a implementação do Python QT é dividida em vários módulos:

• qt: módulo principal contendo os widgets e as classes “core”;

• qtcanvas: implementação das classes do módulo Canvas da Qt;

• qtgl: classes de OpenGL da Qt;

• qtnetwork: classes de acesso a rede;

• qtpe: classes usadas em palmtops com a Qt Embedded;

• qtsql: classes de acesso a bancos de dados;

• qttable: classes do módulo Table da Qt;

• qtxml: classes de tratamento de XML.

Para Saber Mais:

Documentação do Python - www.python.org/doc
Documentação da Qt - doc.trolltech.com
Download do PyQT - www.riverbankcomputing.co.uk/pyqt/download.php
Página do PyQT - www.riverbankcomputing.co.uk/pyqt/index.php


Roberto Teixeira - maragato@kde.org


A Revista do Linux é editada pela Conectiva S/A
Todos os Direitos Reservados.

Política de Privacidade
Anuncie na Revista do Linux