- 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
Este texto é mais uma abordagem de diálogos rápido, agora com o QInputDialog, uma classe que possui quatro funções estáticas bastante versáteis.
1. A classe QInputDialog
A classe QInputDialog permite gerar um diálogo simples para coletar valores do tipo string ou inteiro, que podem ser digitados ou selecionados por meio de uma lista.
Dependendo do tipo de entrada que se deseja capturar, pode ser acolhido um dos tipos de diálogo, fornecidos pelas funções abaixo:
[TABLE=7]
A sintaxe muda de acordo com o tipo de diálogo desejado.
Atenção: Este texto foi feito em cima do PyQt versão 4.4. Na versão 4.5 o nome da função getInteger() muda para getInt(). Referências: 4.4 e 4.5.
1.1. Entradas numérias
As entradas numéricas podem ser inteiro ou ponto flutuante. Ambas são feitas através de um diálogo com um QSpinBox, ou um QDoubleSbinBox.
Suas sintaxes são apresentadas na linha a seguir:
QInputDialog.getInteger (parent, title, label, value, min, max, step)
e
QInputDialog.getDouble (parent, title, label, value, min, max, decimals)
Parent e title tem o mesmo papel que em QMessageBox e label o de text em QMessageBox. Value contém o valor inicial do Spinbox. Os argumentos min e max deve conter os valores mínimo e máximo que o SpinBox pode assumir, respectivamente. Em setInteger(), o sétimo argumento contém o step, incremento, do SpinBox e no setDouble(), o número de dígitos após a vírgula.
Os valores padrões para os parâmetros value, min, max e step, são apresentados na tabela abaixo:
[TABLE=8]
Veja alguns exemplos de uso destes diálogos a seguir:
>>> dl = QInputDialog.getInteger(None, 'QinputDialog getInteger',
... 'Entre com o número de produtos:', 1, 0, 150, 5)
>>> print dl
(16, True)
O valor retornado em dl é uma tupla, com o valor selecionado no diálogo, no elemento 0, e o status (True para ok e False para Cancel) do botão selecionado, no elemento 1.
A próxima linha de código, faz um diálogo semelhante, mas agora com a função getDouble().
>>> dl = QInputDialog.getDouble(None, 'QinputDialog getDouble', \
... 'Entre com o custo do produto:', 5.58, 5.0, 15.0, 2)
>>> print dl
(12.0, True)
O retorno em dl difere apenas no tipo do elemento 0 da tupla, que agora é um número em ponto flutuante.
1.2. Entrada de texto
As próxima função estática gera um diálogo simples com uma entrada de texto. Sua sintaxe é apresentada abaixo:
QInputDialog.getText (parent, title, label, mode, text)
onde:
- parent, title e label – são os mesmos descritos na seção anterior;
- mode – é um dos modos apresentados na tabela a seguir;
- text – contém o texto padrão da caixa de diálogo.
[TABLE=9]
As linhas abaixo apresentam o funcionamento desta função estática.
>>> dl = QInputDialog.getText(None,'getText - Normal',
... "Entre com o seu nome completo", QLineEdit.Normal,
... "Nome completo")
no modo Normal,
>>> dl = QInputDialog.getText(None,'getText - NoEcho',
... "Entre com sua senha", QLineEdit.NoEcho,
... "123456")
No modo NoEcho, nada aparece ao ser digitado a senha.
>>> dl = QInputDialog.getText(None,'getText - Password',
... "Entre com sua senha", QLineEdit.Password,
... "123456")
No modo Password, asteriscos serão apresentados a cada tecla pressionada.
>>> dl = QInputDialog.getText(None,'getText - PasswordEchoOnEdit',
... "Entre com a sua senha", QLineEdit.PasswordEchoOnEdit,
... "123456")
No modo PasswordEchoOnEdit a string “123456” irá aparecer como 6 asteriscos. Ao se pressionar alguma tecla os asteriscos desaparecem e as teclas pressionadas serão apresentadas.
1.2. Seleção em uma lista
A última função estática permite a entrada por escolha de uma string em uma lista, uma comboBox. Sua sintaxe é apresentada abaixo:
QInputDialog.getItem (parent, title, label, list, current = 0, editable = True)
Os argumentos parent, title e label são os mesmos do diálogo anterior. Os demais argumentos são:
- list – pode ser uma lista, ou uma tupla, com os elementos do comboBox;
- current – o elemento padrão selecionado da lista e;
- editable – um booleando com True para habilitar as entradas à lista.
As linhas abaixo criam os diálogos da próxima figura.
>>> dl = QInputDialog.getItem(None,'getItem', "Selecione um item",
... ['diodo', 'capacitor', 'resistor', 'transformador'])
>>> dl = QInputDialog.getItem(None,'getItem', "Selecione um item",
... ('diodo', 'capacitor', 'resistor', 'transformador'), 2, False)
2. Observações finais
Os diálogos gerados pela classe QInputDialog ainda possuem um último argumento (Qt.WindowFlags f = 0), no entanto, não consegui utilizá-lo para colocar alguns comentários de relevância aqui. Se alguém tiver alguma ideia de como se fazer isto, não deixe de comentar.
very nice great article thanks
Me ajudou muito. parabens.
Estes tutoriais sobre PyQt4 são excelentes. Deve ter ajudado muita gente (inclusive eu).
Muito obrigado!
Cara,
to na quarta aula isso já ta salvando minha vida! ehehe
Parabéns e Muito Obrigado!
Como vai amigo, preciso tirar duas dúvidas:
1 – No Qt tenho um DoubleSpinBox,mas preciso tranformar ele em uma variável para que eu possa fazer calculos com ela, como devo fazer isso, já tentei usar Valuechange(double d) por exemplo, mas não funcionou.
2 – Depois que conseguir essa variável quero usá-la em uma outra classe.
Por exemplo: a variável foi obtida no Mainwindow.cpp e quero realizar os calculos em calculo.cpp
Não sei se entendi o que você está querendo, mas em princípio você pode cria uma variável geral e instanciá-la com o seu objeto DoubleSpinBox. Assim basta acessar o método value() para resgatar o seu valor.
valueChanged é um sinal gerado por QDoubleSpinBox. Dê uma olhada no texto 13 desta série: http://localhost/MyWorks/?p=2635
Muito boas.
Não sei alguém ainda acessa, mas caso sim, alguem pode me dizer pq o diálogo gerado pelo getDouble nao aceita a entrada de mais de um algorismo antes da virgula?
Ex:
Mesmo eu colocando essa linha de código
dl = QInputDialog.getDouble(None, ‘QinputDialog getDouble’, ‘Entre com o custo do produto:’, 5.58, 5.0, 15.0, 2)
no diálogo não é possível digitar 10,88, somente é possível um casa antes da virgula, nesse caso, só ate 9
Grato
Não entendi Adriel. Aqui funcionou muito bem:
>>> from PyQt4.QtGui import *
>>> app = QApplication([])
>>> dl = QInputDialog.getDouble(None, ‘QinputDialog getDouble’, ‘Entre com o custo do produto:’, 5.58, 5.0, 15.0, 2)
>>> dl
(10.880000000000001, True)
Cara muito bom os tutoriais, deu uma luz pra mim.
te agradeço demais
como debe iniciar el codigo, estoy tratqando de hacerlo por spyder y no me bota nada
O que você quer está no texto anterior: http://localhost/MyWorks/2009/07/17/python-pyqt-03-usando-qmessagebox/ .
Basta aplicar os comandos diretamente no python:
>>> from PyQt4.QtGui import *
>>> app = QApplication([])
Em seguida pode executar os códigos acima. Isto é uma série Nicolas e muito do que é usado num texto, sem explicações, é porque foi apresentado em textos anteriores. Ao menos é isto o esperado.