Pyqt4 – Algumas Surpresas

Avançando no desenvolvimento com PyQT4 fiquei supreso com algumas diferenças que encontrei entre o QT e outros frameworks de interface gráfica. Acho que elas existem pelo fato do Qt ter optado em se basear fortemente em orientação a objetos.

O QT possui um mecanismo de sinais e slots que permitem a comunicação entre as widgets gráficas, às vezes até sem programação. Quem já programou em Visual Basic e WxPython tende a olhar para os sinais como os eventos nessas outras tecnologias, o que por um lado é até verdade, funcionam de forma muito parecida.

Porém, quem começa a desenvolver em PyQT com essa idéia, vai se assustar ao ver que apenas poucos sinais estão disponíveis para cada widget. Como fazer, por exemplo, para detectar quando o cursor do mouse está sobre um label, se não existe um sinal específico para isso nessa widget?

Olhando a  documentação, vi que a classe QLabel possui o método (herdado da classe QWidget) chamado enterEvent. Pelo que vi até agora, é preciso sobreescrever o método em uma nova classe derivada para poder usar esse evento:

class Label(QtGui.QLabel):

def __init__(self, parent=None):

super(QtGui.QLabel, self).__init__(parent)

def enterEvent(self, ev):

print ‘entrou na widget! ”, ev.Type()

Essa solução é o suficiente quando precisamos resolver algumas coisas dentro da própria widget, como mudar a cor de fundo, por exemplo. Mas na maioria das vezes precisamos de alterações que reflitam em outras partes do programa, que não estão visíveis dentro desse método enterEvent que criamos. Nesse caso, basta usar o método para emitir um sinal:

self.emit(QtCore.SIGNAL(“myCustomizedSignal()”))

Dessa forma, a nova classe de label pode ser usada como se fosse uma widget normal, com o sinal desejado.

Achei um pouco complicado descobrir essas coisas e achei que isso torna o desenvolvimento um pouco burocrático. Mas nada tão complicado ou dramático assim, pelo menos em Python. Se estivesse programando em C++ talvez minha opinião fosse diferente, o que pode justificar as críticas que encontrei ao QT. Entre elas, essa necessidade de derivar classes foi motivo para taxar o framework de ser de “baixo nível”.

Deixe uma resposta

Faça o login usando um destes métodos para comentar:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s