Março 13, 2010 at 5:32 pm
PyQt 09 – QPushButton, apertando os botões
- PyQt 01 – O Primeiro Programa
- PyQt 02 – Criando uma caixa de mensagem
- PyQt 03 – Diálogos com QMessageBox
- PyQt 04 – Diálogos com QInputDialog
- PyQt 05 – Diálogo QFileDialog
- PyQt 06 – Mais diálogos
- PyQt 07 – QLabel e Qt Designer
- PyQt 08 – QLineEdit e mais Qt Designer
- PyQt 09 – QPushButton, apertando os botões
- PyQt 10 – QCheckBox e QRadioButton: checando as opções
- PyQt 11 – QButtonGroup e QGroupBox: mais opções
- PyQt 12 – QComboBox
- PyQt 13 – QSpinBox, QProgressBar e + sinais
A próxima widget a ser apresentada é a QPushButton, os tradicionais botões nos aplicativos gráficos e um dos mais usados widgets em aplicativos gráficos. Seguindo o mesmo estilo dos textos anteriores vou apresentar alguns aplicativos simples, onde os sinais e slots desta widget poderão ser explorados.
Sinais herdados…
Diferente dos widgets apresentados aqui, o QPushButtion não possui nenhum sinal específico, herdando todos os sinais da classe QAbstractButton. Esta classe é uma abstração para widgets com sinais semelhantes como QCheckBox, QRadioButton, QToolButton, além da QPushButton. A herança da widget QPushButton é apresentada a seguir:
QPushButton -> QAbstractButton -> QWidget -> QObject e QPaintDevice
Num outro momento vou explorar os sinais das heranças mais internas, mas no momento vou me preocupar com as heranças mais fundamentais, diretamente relevantes para a widget em questão.
Tab 01: Sinais do QAbstractButton
| Sinal | Descrição |
|---|---|
| clicked(bool) | este sinal é emitido quando o botão é ativado, quando sua shortcut é pressionada ou quando os slots click() ou animateClick() são chamados |
| pressed() | este sinal é emitido quando o botão é pressionado |
| released() | este sianl é emitido quando o botão é liberado |
| toggled(bool) | este sinal é emitido sempre que um botão checkable muda o seu estado, retornando um booleano para o seu estado |
Testando os sinais
Para testar este sinais proponho um diálogo bem simples, com quatro botões, nomeados clicked_pushButton, pressed_pushButton, released_pushButton e toggled_pushButton, cada qual respondendo a um sinal diferente. O diálogo fica com a forma apresentada na figura abaixo:
Os textos dos botões foram alterados para indicarem seu nome e no último botão, toggled_pushButton, o atributo checkable foi alterado para True, para mudar o seu comportamento. A interface do diálogo (GUI) foi criada com o QT Designer, como pretendo fazer em todas os próximos exemplos apresentar. O código e o ui para este exemplo podem ser baixados do link pyqt-09.
O código para este diálogo é apresentado a seguir:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #!/bin/env python #-*- coding: iso-8859-1 -*- # # Diálogo demonstrativo dos sinais dos botões # por Rudson R. Alves # 13 de março 2010 # import sys from PyQt4.QtCore import * from PyQt4.QtGui import * from buttons import * class buttons_Dialog(QDialog, Ui_buttonsDialog): def __init__(self, parent = None): super(buttons_Dialog, self).__init__(parent) self.setupUi(self) @pyqtSignature("bool") def on_clicked_pushButton_clicked(self, status): print "O botão clicked_pushButton foi pressionado (%s)" % str(status) @pyqtSignature("") def on_pressed_pushButton_pressed(self): print "O botão pressed_pushButton foi pressionado..." @pyqtSignature("") def on_released_pushButton_released(self): print "O botão released_pushButton foi liberado..." @pyqtSignature("bool") def on_toggled_pushButton_toggled(self, status): print "O botão toggled_pushButton foi pressionado. Seu status é %s" % \ str(status) app = QApplication(sys.argv) dlg = buttons_Dialog() dlg.exec_() |
O código apenas coleta diferentes sinais e imprime uma mensagem correspondente. Algumas fatos interessantes podem ser observados na resposta deste aplicativo. A primeira delas é que os sinais clicked, released e toggled, são emitidos somente quando o botão é liberado. Portando, apenas o sinal pressed, linha 24, responde no momento em que o botão é pressionando, como pode ser observado ao se pressionar o botão pressed_pushButton.
Da forma que foi implementado, a variável status, retornado pelo sinal clicked do botão clicked_pushButton, linha 20, apresenta sempre o mesmo valor, False. Isto acontece porque o atributo checkable está desabilitado. Adicione a linha 35, conforme mostra o trecho de código abaixo:
31 32 33 34 35 | @pyqtSignature("bool") def on_toggled_pushButton_toggled(self, status): print "O botão toggled_pushButton foi pressionado. Seu status é %s" % \ str(status) self.clicked_pushButton.setCheckable(status) |
Execute novamente o diálogo e observe que o status em on_clicked_pushButton_clicked muda de valor a cada click no botão clicked_pushButton, sempre que o botão toggled_pushButton estiver no estado down (baixado). Isto acontece pois o status do botão toggled_pushButton é usado para mudar status da propriedade checkable do botão clicked_pushButton na nova linha 35.
<< PyQt 08 – QLineEdit e mais Qt Designer Calculadora PyQt para cálculo com incertezas >>
You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
One Trackback/Ping
-
PyQt 10 – QCheckBox e QRadioButton: checando as opções » a bit of… Mai 29 2010 at 5pm:
[...] de herdar os sinais da classe QAbstractButton (vaja a descrição dos sinais no artigo anterior: PyQt 09 – QPushButton, apertando os botões, o QCheckBox possui ainda o sinal [...]
