Skip to content

Latest commit

 

History

History
72 lines (50 loc) · 2.03 KB

input_janela.md

File metadata and controls

72 lines (50 loc) · 2.03 KB

Uma janela de diálogo com um campo de texto como input

Contexto histórico

Em quase todas as implementações de Python existe uma função chamada input() que 'pergunta' a quem estiver executando o programa um valor por meio da digitação no console, o texto digitado é devolvido então para o programa como string.

while True:
    nome = input('Qual o seu nome?\n')
    if nome.strip():
        print(f'Olá, {nome}!\n')
    else:
        print('Olá, você deixou a resposta vazia, vou encerrar!')
        exit()  # Melhor exit_sketch() se estiver usando o py5

Resultados possíveis no console

Qual o seu nome?   
Alexandre
Olá, Alexandre!

Qual o seu nome?   
Olá, você deixou a resposta vazia, vou encerrar!

O Processing modo Python não tinha essa função, e a solução a seguir era um contorno possível. Com py5 agora é possível usar input() e interagir no console, mas ainda pode ser legal disparar uma janela de diálogo, com um campo de texto. Especialmente se você estiver usando a tela toda (fullscreen) e não for muito prático ver o console.

showInputDialog do Java swing

def gui_input(question='', suggestion=''):
    from javax.swing import JOptionPane
    return JOptionPane.showInputDialog(None, question, suggestion)

Vejamos então um exemplo de uso, em que um clique do mouse dispara a janela para o input textual.

texto = "clique na janela para mudar o texto"


def setup():
    size(400, 400)
    text_align(CENTER, CENTER)


def draw():
    background(0, 0, 200)
    text(texto, width / 2, height / 2)


def mouse_pressed():
    global texto
    resposta = gui_input('escreva um novo texto')
    if resposta:
        texto = resposta
    elif resposta == "":
        print("[resposta vazia]")
    else:
        print(resposta)  # se cancelada a janela exibe `None` no console


def gui_input(question='', suggestion=''):
    from javax.swing import JOptionPane
    return JOptionPane.showInputDialog(None, question, suggestion)