Este artigo é a parte 4 de 14 na série PyQt

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)

dialog-06

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)

dialog-04

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,

dialog-07

>>> 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)

dialog-08

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.