sábado, 29 de junho de 2013

Criando Uma Aplicação De Lista Simples Com PyQt

Uma das vantagens do PyQt é a alta produtividade para aplicações gráficas com a  ajuda dos recursos herdados do Qt.
Neste artigo, vou mostrar como tirar vantagem disso para fazer uma lista de itens funcional em pouco tempo e com apenas algumas linhas de código.
Vamos começar desenhando a tela da aplicação com o Qt Designer.
O objetivo é criar algo semelhante a imagem abaixo:

Como podemos ver, utilizei um QLabel para o título, um QListWidget para listar os itens, um QLineEdit como campo de texto para novos itens e três QPushButtons para as ações da aplicação.
Através do Qt Designer também podemos definir eventos (ou sinais). Vamos utilizar este recurso para criar a funcionalidade do botão Limpar. A função deste botão é limpar o conteúdo do campo de texto.
Para definir o evento, devemos selecionar o modo de edição de Signals e Slots do Qt Designer, como na imagem:

Depois basta clicar no botão que vai disparar o signal e arrastar até o componente que receberá o slot.

Uma janela se abrirá para que sejam selecionados o signal e o slot que serão conectados (neste caso, clicked() e clear()).


Também renomeei os componentes e a janela principal para deixar o código mais claro.
Depois que a tela estiver pronta, basta salvar e utilizar o pyuic para converter tudo em código Python (o comando abaixo é apenas demonstrativo e pode variar de acordo com o ambiente utilizado):
python3 /usr/lib64/python3.3/site-packages/PyQt4/uic/pyuic.py minhalista.ui -o minhalista.py
O código completo da tela gerada pelo comando acima pode ser visto abaixo:


Conforme já havia mostrado em um artigo anterior, o melhor é criar uma subclasse da classe gerada pelo pyuic em outro módulo. Assim, temos acesso a todos os componentes da tela sem precisar alterar o conteúdo do arquivo que é gerado automaticamente a cada alteração visual.
Abaixo está o código que irá executar nossa aplicação:


O método __init__() da classe MinhaListaAdmin define mais dois eventos, conectando os botões Inserir e Apagar com métodos da própria classe. Estes métodos agora serão chamados sempre que os botões forem clicados.
O método inserir() pega o texto do QLineEdit e insere no QListWidget.
O método apagar() é um pouco mais complexo, uma vez que o componente de lista não define uma forma direta de remover um item específico. Por isso, pegamos o item selecionado com o método takeItem() e definimos ele como None.
Antes disso, exibimos uma QMessageBox que pergunta ao usuário se ele realmente quer apagar o item selecionado.
A partir de agora, é fácil extender as funcionalidades da aplicação para persistir os dados.

2 comentários:

  1. Meu amigo, muito obrigado, seu artigo é muito rico e tem me ajudado bastante

    ResponderExcluir
  2. Jonathan, meus parabéns pelo artigo. É bastante simples, claro e completo. Muito obrigado!

    ResponderExcluir