- 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
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:
| Tipo | Ícone | Descrição |
|---|---|---|
| question | para questionamentos, geralmente acompanhado de botões “Yes” e “No”, ou outras combinações como “Ok” e “Cancel”, … | |
| information | usado para apresentar simples caixas de diálogo, geralmente, com apenas o botão “Ok” | |
| warning | usado para levar mensagens de alerta ao usuário | |
| critical | usado para comunicar ações críticas do aplicativo |
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:
| Constante | Valor | Descrição |
|---|---|---|
| QMessageBox.Ok | 0×00000400 | Botão “OK” definido com o AcceptRole |
| QMessageBox.Open | 0×00002000 | Botão “Open” definido com o AcceptRole |
| QMessageBox.Save | 0×00000800 | Botão “Save” definido com o AcceptRole |
| QMessageBox.Cancel | 0×00400000 | Botão “Cancel” definido com o AcceptRole |
| QMessageBox.Close | 0×00200000 | Botão “Close” definido com o RejectRole |
| QMessageBox.Discard | 0×00800000 | Botão “Discard” ou “Don’t Save”, dependendo da plataforma, definido com o DestructiveRole |
| QMessageBox.Apply | 0×02000000 | Botão “Apply” definido com o ApplyRole |
| QMessageBox.Reset | 0×04000000 | Botão “Reset” definodo com o ResetRole |
| QMessageBox.RestoreDefaults | 0×08000000 | Botão “Restore Defaults” definodo com o ResetRole |
| QMessageBox.Help | 0×01000000 | Botão “Help” definido com o HelpRole |
| QMessageBox.SaveAll | 0×00001000 | Botão “Save All” definido com o AcceptRole |
| QMessageBox.Yes | 0×00004000 | Botão “Yes” definido com o YesRole. |
| QMessageBox.YesToAll | 0×00008000 | Botão “Yes to All” definido com o YesRole |
| QMessageBox.No | 0×00010000 | Botão “No” definido com o NoRole |
| QMessageBox.NoToAll | 0×00020000 | Botão “No to All” definido com o NoRole |
| QMessageBox.Abort | 0×00040000 | Botão “Abort” definido com o RejectRole |
| QMessageBox.Retry | 0×00080000 | Botão “Retry” definido com o AcceptRole |
| QMessageBox.Ignore | 0×00100000 | Botão “Ignore” definido com o AcceptRole |
| QMessageBox.NoButton | 0×00000000 | Botão inválido |
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:
| Constante | Valor | Descrição |
|---|---|---|
| QMessageBox.Ok | 0×00000400 | Botão “OK” definido com o AcceptRole |
| QMessageBox.Open | 0×00002000 | Botão “Open” definido com o AcceptRole |
| QMessageBox.Save | 0×00000800 | Botão “Save” definido com o AcceptRole |
| QMessageBox.Cancel | 0×00400000 | Botão “Cancel” definido com o AcceptRole |
| QMessageBox.Close | 0×00200000 | Botão “Close” definido com o RejectRole |
| QMessageBox.Discard | 0×00800000 | Botão “Discard” ou “Don’t Save”, dependendo da plataforma, definido com o DestructiveRole |
| QMessageBox.Apply | 0×02000000 | Botão “Apply” definido com o ApplyRole |
| QMessageBox.Reset | 0×04000000 | Botão “Reset” definodo com o ResetRole |
| QMessageBox.RestoreDefaults | 0×08000000 | Botão “Restore Defaults” definodo com o ResetRole |
| QMessageBox.Help | 0×01000000 | Botão “Help” definido com o HelpRole |
| QMessageBox.SaveAll | 0×00001000 | Botão “Save All” definido com o AcceptRole |
| QMessageBox.Yes | 0×00004000 | Botão “Yes” definido com o YesRole. |
| QMessageBox.YesToAll | 0×00008000 | Botão “Yes to All” definido com o YesRole |
| QMessageBox.No | 0×00010000 | Botão “No” definido com o NoRole |
| QMessageBox.NoToAll | 0×00020000 | Botão “No to All” definido com o NoRole |
| QMessageBox.Abort | 0×00040000 | Botão “Abort” definido com o RejectRole |
| QMessageBox.Retry | 0×00080000 | Botão “Retry” definido com o AcceptRole |
| QMessageBox.Ignore | 0×00100000 | Botão “Ignore” definido com o AcceptRole |
| QMessageBox.NoButton | 0×00000000 | Botão inválido |
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.
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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | #!/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.

<< Python: Pegando o endereço IP PyQt 04 – Diálogos com QInputDialog >>
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.
2 Trackbacks/Pings
-
PyQt: 02 – Criando uma caixa de mensagem » a bit of… Out 03 2009 at 10am:
[...] Próximo > PyQt: 03 – Diálogos com QMessageBox [...]
-
PyQt: 04 – Diálogos com QInputDialog » a bit of… Out 03 2009 at 10am:
[...] Anterior >PyQt: 03 – Diálogos com QMessageBox [...]
4 comments so far
Jonnathan
rudsonalves
Rodrigo Haas
Rodrigo Haas