PyQt - Widget QPushButton
Em qualquer design de GUI, o botão de comando é o controle mais importante e usado com mais frequência. Os botões com Salvar, Abrir, OK, Sim, Não e Cancelar, etc., como legenda, são familiares para qualquer usuário de computador. Na API PyQt, oQPushButton O objeto de classe apresenta um botão que, quando clicado, pode ser programado para chamar uma determinada função.
A classe QPushButton herda sua funcionalidade principal de QAbstractButtonclasse. Tem forma retangular e uma legenda de texto ou ícone pode ser exibido em sua face.
A seguir estão alguns dos métodos mais comumente usados da classe QPushButton -
Sr. Não. | Métodos e Descrição |
---|---|
1 |
setCheckable() Reconhece os estados do botão pressionado e solto se definido como verdadeiro |
2 |
toggle() Alterna entre estados verificáveis |
3 |
setIcon() Mostra um ícone formado a partir do pixmap de um arquivo de imagem |
4 |
setEnabled() Quando definido como falso, o botão fica desativado, portanto, clicar nele não emite um sinal |
5 |
isChecked() Retorna o estado booleano do botão |
6 |
setDefault() Define o botão como padrão |
7 |
setText() Define programaticamente a legenda dos botões |
8 |
text() Recupera a legenda dos botões |
Exemplo
Quatro objetos QPushButton são definidos com alguns dos atributos acima. O exemplo é escrito na forma orientada a objetos, porque a origem do evento deve ser passada como um argumento para a função slot.
Quatro objetos QPushButton são definidos como variáveis de instância na classe. Primeiro botãob1 é convertido em botão de alternância pelas declarações -
self.b1.setCheckable(True)
self.b1.toggle()
O sinal clicado deste botão é conectado a um método membro btnstate () que identifica se o botão é pressionado ou liberado verificando a propriedade isChecked ().
def btnstate(self):
if self.b1.isChecked():
print "button pressed"
else:
print "button released"
Segundo botão b2exibe um ícone no rosto. O método setIcon () pega um objeto pixmap de qualquer arquivo de imagem como argumento.
b2.setIcon(QIcon(QPixmap("python.gif")))
Botão b3 está definido para ser desativado usando o método setEnabled () -
b3.setEnabled(False)
Botão de apertar b4é definido como botão padrão pelo método setDefault (). O atalho para sua legenda é criado prefixando & à legenda (& Padrão). Como resultado, usando a combinação de teclado Alt + D, o método de slot conectado será chamado.
Os botões b1 e b4 são conectados ao método de slot whichbtn (). Uma vez que a função se destina a recuperar a legenda do botão clicado, o objeto de botão deve ser passado como um argumento. Isso é obtido pelo uso da função lambda.
Por exemplo,
b4.clicked.connect(lambda:self.whichbtn(self.b4))
O código completo é fornecido abaixo -
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class Form(QDialog):
def __init__(self, parent=None):
super(Form, self).__init__(parent)
layout = QVBoxLayout()
self.b1 = QPushButton("Button1")
self.b1.setCheckable(True)
self.b1.toggle()
self.b1.clicked.connect(lambda:self.whichbtn(self.b1))
self.b1.clicked.connect(self.btnstate)
layout.addWidget(self.b1)
self.b2 = QPushButton()
self.b2.setIcon(QIcon(QPixmap("python.gif")))
self.b2.clicked.connect(lambda:self.whichbtn(self.b2))
layout.addWidget(self.b2)
self.setLayout(layout)
self.b3 = QPushButton("Disabled")
self.b3.setEnabled(False)
layout.addWidget(self.b3)
self.b4 = QPushButton("&Default")
self.b4.setDefault(True)
self.b4.clicked.connect(lambda:self.whichbtn(self.b4))
layout.addWidget(self.b4)
self.setWindowTitle("Button demo")
def btnstate(self):
if self.b1.isChecked():
print "button pressed"
else:
print "button released"
def whichbtn(self,b):
print "clicked button is "+b.text()
def main():
app = QApplication(sys.argv)
ex = Form()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
O código acima produz a seguinte saída.
clicked button is Button1
button released
clicked button is Button1
button pressed
clicked button is &Default