- 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
- PyQt 14 – QNetwork, baixando arquivos
Índice
O PyQt possui várias classes especiais para gerar caixas de diálogos simples e versáteis. Neste texto vou aborda uma destas classes: a QMessageBox.
1. A classe QMessageBox
A classe QMessageBox produz um diálogo bastante flexível, que lhe permite apresentar uma informação, fazer uma pergunta, alertar e recolher respostas para questões relevantes em seu programa.
Para um teste rápido desta classe, abra o interpretador Python, carregue o módulo PyQt4.QtGui, como de praxe, e em seguida instancie um aplicativo, passando como argumento uma lista vazia, como mostra os comandos abaixo:
>>> from PyQt4.QtGui import *
>>> app = QApplication([])
1.1. Sintaxe do QMessageBox
Isto já é suficiente para executar uma caixa de mensagem. Mas antes de abrir a primeira caixa de mensagem, vamos dar uma olhada na sintaxe do QMessageBox a seguir:
msg = QMessageBox.tipo(parent, title, text,
button0, button1, button2, ...)
O tipo pode ser:
[TABLE=5]
Essencialmente, o tipo apenas adiciona o ícone relativo ao diálogo. Parent é o widget pai, que na definição de uma classe, referencia ela própria (self), em linha de comando não é filha de ninguém, None. O title deve conter a string que aparecerá como título da janela e text, o texto com a questão a ser respondida pelo usuário. Os botões button0, button1, … podem ser separados por vírgula, como na linha acima ou separados pelo operador ou “|”, como abaixo:
msg = QMessageBox.tipo(parent, title, text,
button0|button1|button2|...)
esta última sintaxe é a mais usada pelos programadores PyQt. Os botões são constantes numéricas, definidas em PyQt4.QtGui, com os valores apresentados na tabela a seguir:
[TABLE=6]
1.2. Alguns Exemplos
O diálogo padrão criado pelo QMessageBox, possui apenas o botão “OK”, independente do tipo especificado, como pode ser visto na linha a seguir:
>>> dlg = QMessageBox(None)
>>> dlg.setWindowTitle("Message Box")
>>> dlg.setIcon(QMessageBox.Question)
>>> dlg.setText("Este é o dialogo padrão do QMessageBox, com apenas um botão OK")
>>> dlg.exec_()
O primeiro comando instancia o diálogo dlg, o segundo, configura o título do diálogo, em seguida define a mensagem a ser apresentada e por fim apresenta o diálogo. Isto irá gerar um diálogo como o da figura abaixo:
O mesmo pode ser feito em uma única linha de comando, como mostra a linha abaixo:
>>> QMessageBox.question(None, "MessageBox", \
"Este é o dialogo padrão do QMessageBox, com apenas um botão OK")
com uma pequena diferença, no primeiro diálogo, dlg é uma instância do objeto QMessageBox. Em ambos os comandos, o retorno é o código do botão pressionando, 1024.
1.3. Adicionando botões
Os botões padrões são apresentados na tabela a seguir:
[TABLE=6]
Os exemplos a seguir adicionam os botões “Yes”, “No” e “Cancel” ao diálogo:
>>> dlg = QMessageBox(None)
>>> dlg.setWindowTitle("Message Box")
>>> dlg.setIcon(QMessageBox.Critical)
>>> dlg.setText("Isto é uma mensagem crítica. Deseja continuar?")
>>> dlg.setStandardButtons(QMessageBox.Yes|QMessageBox.No|QMessageBox.Cancel)
>>> resp = dlg.exec_()
aqui em uma linha:
>>> resp = QMessageBox.critical(None, "Message Box", \
"Isto é uma mensagem crítica. Deseja continuar?", \
QMessageBox.Yes|QMessageBox.No|QMessageBox.Cancel)
O diálogo gerado é apresentado na figura a seguir.
1.4. Usando o QMessageBox
O programa a seguir cria um diálogo para apresentar as quatro caixas de diálogo.
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
#
# Simples Hello World em Python+Qt4
#
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class Form(QDialog):
def __init__(self, parent=None):
super(Form, self).__init__(parent)
# criar um label
label = QLabel("Selecione um dos botões abaixo\npara abrir o diálogo desejado")
# cria os botões
question_button = QPushButton("&Question")
information_button = QPushButton("&Information")
warning_button = QPushButton("&Warning")
critical_button = QPushButton("C&ritical")
close_button = QPushButton("&Close")
# criar uma caixa de layout vertical, para
# organizar os elementos
vbox = QVBoxLayout()
# adicionar os elementos a vbox
vbox.addWidget(label)
vbox.addWidget(question_button)
vbox.addWidget(information_button)
vbox.addWidget(warning_button)
vbox.addWidget(critical_button)
vbox.addWidget(close_button)
# adicionar a vbox ao diálogo
self.setLayout(vbox)
# conecta o evento click do botão close ao
# slot reject(), saída do aplicativo
self.connect(close_button, SIGNAL("clicked()"),
self, SLOT("reject()"))
# conecta os botões às devidas funções
self.connect(question_button, SIGNAL("clicked()"),
self.question_button_clicked)
self.connect(information_button, SIGNAL("clicked()"),
self.information_button_clicked)
self.connect(warning_button, SIGNAL("clicked()"),
self.warning_button_clicked)
self.connect(critical_button, SIGNAL("clicked()"),
self.critical_button_clicked)
# muda o título da janela
self.setWindowTitle("Dialog - 01")
def question_button_clicked(self):
print "Question pressed..."
msg = QMessageBox.question(self, "QMessageBox",
"Isto é uma questão...", QMessageBox.Yes|QMessageBox.No)
def information_button_clicked(self):
print "Information pressed..."
msg = QMessageBox.information(self, "QMessageBox",
"Isto é uma informação...", QMessageBox.Close)
def warning_button_clicked(self):
print "Warning pressed..."
msg = QMessageBox.warning(self, "QMessageBox",
"Isto é um warning...", QMessageBox.Close)
def critical_button_clicked(self):
print "Critical pressed..."
msg = QMessageBox.critical(self, "QMessageBox", \
"Isto é um critical...", \
QMessageBox.Apply|QMessageBox.Reset|QMessageBox.Close)
if __name__ == "__main__":
# cria o objeto aplicativo
app = QApplication(sys.argv)
# cria o dialogo
dlg = Form()
# executa o dialogo
dlg.exec_()
A figura a seguir mostra o aplicativo em ação.
Gostaria de saber como faço para colocar acentuação. ele não esta reconhecendo!!
O problema deve estar no seu encode. Experimente colocar
# -*- coding: iso-8859-1 -*-
no início do seu código, se tiver usado o encode iso-8859-1. O comando pyuic4 geralmente coloca o encode iso-utf-8, nos códigos gerados. Se tiver usado o iso-8859-1, deverá substituí-lo antes de executar o código. A linha a segui faz o trabalho para você:
sed -i ‘s/utf\-8/iso\-8859\-1/’ Ui_nome-do-seu-gui.py
Se estiver usando Unicode (utf-8), ponha um ‘u’ antes da string, assim ela será interpretada como unicode.
ex: u”alguma string”
Texto muito bom, deixou claro e tirou todas as minhas dúvidas, mesmo sendo um texto de 2010, valeu muito