Buenas galera hoje vou apresentar o modulo python dialog, com ele fica simples criarmos aplicacoes gráficas em modo texto, tvs quem programe em shell já conheça o dialog, mas no python as coisas alem de serem mais simples são tbm mais transparentes,
querem ver?
bom em primeiro lugar vamos precisar desse modulo:
sudo apt-get install python-dialog
Um viva ao apt!!!
vamos criar um “ola mundo” com o dialog, com o seguinte comando:
#! /usr/bin/python # -*- coding: iso-8859-1 -*- from dialog import Dialog d = Dialog() d.msgbox("Olá mundo!!!", height=10, width=45)
seu uso é simples assim:
após importarmos o modulo e instanciarmos o mesmo usamos msgbox para criarmos uma simples caixa de texto, que alem do texto passamos altura e largura da mesma…
na imagem abaixo podemos ver como ficou 😉
ok vamos melhorar um pouco esse exemplo, vamos pedir para o usuário digitar seu nome…
e depois vamos mostrar o nome digitado em um caixa de dialogo:
#! /usr/bin/python # -*- coding: iso-8859-1 -*- from dialog import Dialog d = Dialog() code, nome = d.inputbox("Qual seu nome?", height=10, width=45)
Quase tão simples quanto o exemplo anterior a maior diferença aqui é que redirecionamos a saída pra duas variaveis
o retorno do inputbox é uma tupla com code e string, sendo que code é o retorno de saída do inputbox e string é o que foi digitado na caixa de texto…
abaixo temos a figura da entrada de texto.
segue o codigo mostrando o nome numa simples caixa de dialgo:
#! /usr/bin/python # -*- coding: iso-8859-1 -*- from dialog import Dialog d = Dialog() d.infobox("Seu nome é: %s" % nome, height=10, width=45)
Bom uma imagem aqui vale mais que mil palavras né…
então segue a imagem:
Bom outro cara interessante é o passwordbox que se comporta exatamente igual ao inputbox mas não conseguimos ver o que está sendo digitado, sendo perfeito pra usar em campos de senha como nome já diz 😉
segue um pequeno exemplo do mesmo…
Nesse exemplo vou mostrar a senha digitada com um msgbox ao invés do infobox, o infobox mostra o texto e já sai, enquanto o msgbox fica a espera da confirmação para sair
#! /usr/bin/python # -*- coding: iso-8859-1 -*- # # Criado em: "16/11/2009" # Autor: MRSantos mr.karu@gmail.com # # A espera não é uma esperaça vazia, # possui a certeza interior de alcançar seu objetivo... import sys try: import dialog except: print "Oh magnata, nao tem o modulo do dialog, instala ele..." print "apt-get install python-dialog" sys.exit(0) d = dialog.Dialog() code, senha = d.passwordbox("Entre com a sua senha", height=10, width=45) d.msgbox("A senha digitada foi\n%s" % senha)
pede a senha:
mostra senha:
Um outro carinha que gostária de mostrar aqui é o yesno com ele podemos fazer perguntas ao nosso usuário e pegarmos as resposta dessas perguntas…
o retorno do yesno é um inteiro
0 = yes
1 = no
bom vamos a mais um exemplo
#! /usr/bin/python # -*- coding: iso-8859-1 -*- # Criado em: "16/11/2009" # Autor: MRSantos mr.karu@gmail.com # # A espera não é uma esperaça vazia, # possui a certeza interior de alcançar seu objetivo... import sys try: import dialog except: print "Oh magnata, nao tem o modulo do dialog, instala ele..." print "apt-get install python-dialog" sys.exit(0) d = dialog.Dialog() rs = d.yesno("Vc programa em python?", height=10, width=30) if rs: d.msgbox("nao gosta? :(", height=10, width=30) else: d.msgbox("Seja bem vindo ao time :)", height=10, width=30)
imagem da pergunta:
imagem da resposta de sim
e aqui a tela com a respota do não
e agora vamos ver o radiolist, com ele temos uma lista de opções e dentre elas podemos escolher apenas uma
o radiolist como resultado tambem nos retorna uma tupla e o value que é a escolha do usuário o code sempre vai nos retornar um a não ser que seja precionado cancelar no radiolist.
os paramentros que precisamos passar para cria-lo é texto, altura, largura, numero de opções que teremos na listagem e a listagem propriamente dita, passamos ela em forma de tulpa com os seguintes valores (tag, item, status)
o status deve ser 1 pra habilitado e 0 para desabilitado lembrand que nele podemos ter apenas uma opção habilitada por vez
vamos a mais um exemplo:
#! /usr/bin/python # -*- coding: iso-8859-1 -*- # Criado em: "16/11/2009" # Autor: MRSantos mr.karu@gmail.com # # # A espera não é uma esperaça vazia, # possui a certeza interior de alcançar seu objetivo... import sys try: import dialog except: print "Oh magnata, nao tem o modulo do dialog, instala ele..." print "apt-get install python-dialog" sys.exit(0) d = dialog.Dialog() code, value =d.radiolist('Qual sua experiência com Python?', width=40, height=10, list_height=3, choices=[\ ('iniciante', 'menos e um ano', 1),\ ('experiente', 'Mais de um ano', 0),\ ('master', 'Mais de 3 anos', 0)]) if code: d.msgbox("Vc sai com ESC, nao respondeu minha pergunta!!!", height=10, width=45) else: if value == 'iniciante': d.msgbox("Vc ainda é iniciante mas chega lá...", height=10, width=45) if value == 'experiente': d.msgbox("Vc é um cara experiente então...", height=10, width=45) if value == 'master': d.msgbox("Compartilhe seu conhecimento comigo...", height=10, width=45)
Segue abaixo as imagens:
e agora vamos ver o checklist, tudo que falei a respeito do radiolist se aplica a ele tbm mas com uma difereça nele é permitido selecionar mais de uma opção
#! /usr/bin/python # -*- coding: iso-8859-1 -*- # Criado em: "16/11/2009" # Autor: MRSantos mr.karu@gmail.com # # A espera não é uma esperaça vazia, # possui a certeza interior de alcançar seu objetivo... import sys try: import dialog except: print "Oh magnata, nao tem o modulo do dialog, instala ele..." print "apt-get install python-dialog" sys.exit(0) d = dialog.Dialog() code, value =d.checklist('Qual sua linguagem favorita', width=40, height=12, choices=[\ ('python', 'Pai: Guido van Rossum', 1),\ ('php', 'Pai: Rasmus Lerdorf', 0),\ ('perl', 'Pai: Larry Wall', 0),\ ('java', 'Pai: James Gosling', 0)]) if code: d.msgbox("Vc sai com ESC, nao respondeu minha pergunta!!!", height=10, width=45) else: d.msgbox("Suas escolhas: => %s" % str(value), height=10, width=55)
e como nos anteriores seguem as imagens
resultado:
Bom vamos ao fselect agora, com ele temos como explorar os arquivos e diretórios de nossa maquina
seu uso é simples, setinhas e tabs para movimentação, com um arquivo ou diretorio selecionado basta dar um espaço para copiar o mesmo pra nossa caixa de texto, atentem que um diretório só vai mostrar seu conteudo se o mesmo terminar com / no final.
como enstrada passamos um caminho inicial, que pode ser em branco, altura e largura e nos retorna o code de saída e value que vai ctonter o arquivo ou diretório passado, bom vamo a mais um exemplo:
#! /usr/bin/python # -*- coding: iso-8859-1 -*- # Criado em: "16/11/2009" # Autor: MRSantos mr.karu@gmail.com # # A espera não é uma esperaça vazia, # possui a certeza interior de alcançar seu objetivo... import sys try: import dialog except: print "Oh magnata, nao tem o modulo do dialog, instala ele..." print "apt-get install python-dialog" sys.exit(0) d = dialog.Dialog() code, value =d.fselect('/home/mrsantos/projetos/', width=50, height=12) if code: d.msgbox("Vc sai com ESC", height=10, width=45) else: d.msgbox("Arquivo ou diretório escolhido: %s" % value, height=10, width=55)
e como de costume segue as imagens
Caixa inicial:
resultado:
Textbox com ele conseguimos visualizar um arquivo texto dentro de uma caixa de texto, para nos movimentarmos pelo texto podemos usar as setas para baixo, cima, lado, esquerda, diretia, pageUp etc…
para usa-lo basta passarmos o caminho para o texto, largura e altura, como retorno temos code de saída do mesmo…
exemplo:
#! /usr/bin/python # -*- coding: iso-8859-1 -*- # Criado em: "16/11/2009" # Autor: MRSantos mr.karu@gmail.com # # A espera não é uma esperaça vazia, # possui a certeza interior de alcançar seu objetivo... import sys try: import dialog except: print "Oh magnata, nao tem o modulo do dialog, instala ele..." print "apt-get install python-dialog" sys.exit(0) d = dialog.Dialog() code =d.textbox('/home/mrsantos/letrasMusicas/alguemAssim', width=60, height=20)
e a imagem:
scrollbox – semelhante ao textbox sua principal diferença é que o textbox precisamos obrigatóriamente um arquivo de texto, já o scrollbox podemos passar uma váriavel contendo o texto a ser exbido, no mais o funcionamento, entradas e retornos são os mesmo.
exemplo
#! /usr/bin/python # -*- coding: iso-8859-1 -*- # Criado em: "16/11/2009" # Autor: MRSantos mr.karu@gmail.com # # A espera não é uma esperaça vazia, # possui a certeza interior de alcançar seu objetivo... import sys try: import dialog except: print "Oh magnata, nao tem o modulo do dialog, instala ele..." print "apt-get install python-dialog" sys.exit(0) d = dialog.Dialog() text = '' for i in range(1, 500): text += "%i Cheila Cristina Bertuol\n" % i code = d.scrollbox(text, width=60, height=20)
Calendar: com ele temos uma maneira simples de mostra dia, mes, ano e dando a possibilidade do usuário navegar entre esses valores, deslocando os mesmo para o passado ou futuro usando para isso setas para cima e para baixo
para ele passamos um texto que irá aparecer na caixa do calendário, tamanho que se for passado zerado ele assume um tamanho padrão, alem disso passamos, valores iniciais para dia, mes e ano, se forem zerados é pego dia, mes e ano do sistema…
seu retorno é uma tupla com o codigo de saída e uma lista com os valores escolhidos
vamos ao exemplo:
#! /usr/bin/python # -*- coding: iso-8859-1 -*- # Criado em: "16/11/2009" # Autor: MRSantos mr.karu@gmail.com # # A espera não é uma esperaça vazia, # possui a certeza interior de alcançar seu objetivo... import sys try: import dialog except: print "Oh magnata, nao tem o modulo do dialog, instala ele..." print "apt-get install python-dialog" sys.exit(0) d = dialog.Dialog() code, value = d.calendar("Calendario", height=0, width=0, day=0, month=0, year=0) dia, mes, ano = value text = "Meu aniversário: %s/%s/%s" % (dia, mes, ano) code = d.msgbox(text, height=10, width=45)
as imagens:
timebox – tudo que foi dito a respeito do calendar vale pro timebox, na verdade os dois tem o mesmo raciocinio no que diz respeito as entradas e saídas, mas com uma diferença importante aqui pra pegar os hora do sistema temos que passar -1 e não zero como valores defaults, segue um exemplo
#! /usr/bin/python # -*- coding: iso-8859-1 -*- # Criado em: "16/11/2009" # Autor: MRSantos mr.karu@gmail.com # # A espera não é uma esperaça vazia, # possui a certeza interior de alcançar seu objetivo... import sys try: import dialog except: print "Oh magnata, nao tem o modulo do dialog, instala ele..." print "apt-get install python-dialog" sys.exit(0) d = dialog.Dialog() code, value = d.timebox("Hora", height=3, width=30, hour=-1, minute=-1, second=-1) hora, minuto, segundo = value text = "Hora: %s:%s:%s" % (hora, minuto, segundo) code = d.msgbox(text, height=10, width=45)
As imagens:
menu – Nome sugestivo né, pois bem ele nos oferece uma caixa de dialogo onde o usuário pode escolher uma das opções apresentadas, cada item é composto por uma tag que será o identificador do menu e uma label que podemos imaginar como uma breve descrição de cada item do menu as entradas pra ele são um texto pra caixa do menu, largura, altura, numero de itens do menu e uma tupla com os itens, como saida temos o exit code do menu e a opção escolhida pelo usuário
ex:
#! /usr/bin/python # -*- coding: iso-8859-1 -*- # Criado em: "16/11/2009" # Autor: MRSantos mr.karu@gmail.com # # A espera não é uma esperaça vazia, # possui a certeza interior de alcançar seu objetivo... import sys try: import dialog except: print "Oh magnata, nao tem o modulo do dialog, instala ele..." print "apt-get install python-dialog" sys.exit(0) d = dialog.Dialog() text = 'Menu' code, string = d.menu(text, height=15, width=54, menu_height=3, choices=[ ('insert', 'Cadastrar cliente'), ('delete', 'Excluir cliente'), ('update', 'Atualizar cliente') ]) d.msgbox('--> %s' % string, height=10, width=20)
Olá Marcio,
parabéns pelo post, interessante a classe Dialog =)
Abraços o/
Obrigado Francisco, tbm gostei dela, simples e faz exatamente o que precisava 🙂
abraços
Marcio
Muito legal! Parabens!
Curioso eh que a gente geralmente associa esse tipo de dialogos com shell script. Nao sabia que dava para usa-los com Python.
Obrigado por compartilhar!
Parabéns!!!
Fez um excelente trabalho
Abraços
Obrigado pelo comentári Herman!
abraços
Marcio
Parabéns. vou testar 😀
Parabéns pela iniciativa Marcio.
Concordo com os amigos muito interessante a classe Dialog em python. 🙂
Continue assim.
Abraços,
Erick.
Obrigado pelo comentário Erick
abraços
Marcio
Muito bom !
Vou começar a fazer umas dialogs em python agora …
Obrigado
Abraço!
Muito bom. Já havia visto o Dialogs para shell, mas saber que existe um módulo para python é muito bom. Parabéns.
Mas tenho duas questões:
– É multiplataforma? Ou é dependentde do Dialogs do Linux?
– É possível posicionar a caixa (diálogo) na tela?
Abraço.