Apresentando Python com Dialog

18 11 2009

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 😉
ola mundo com dialog

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.

Qual seu nome?

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:

mostra nome

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:

pede senha

mostra 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:

Pergunta
imagem da resposta de sim

resposta sim

e aqui a tela com a respota do não

resposta 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:

radiolist

resposta

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

checklist

resultado:

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:

fselect

resultado:

resultado_fselect

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:

musica_vicca

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)

scrollbox
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:

calendario

resposta_calendario

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:

time

resposta_time

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)

menu

delete


Ações

Information

10 responses

18 11 2009
Francisco Souza

Olá Marcio,
parabéns pelo post, interessante a classe Dialog =)

Abraços o/

18 11 2009
mrsantos76

Obrigado Francisco, tbm gostei dela, simples e faz exatamente o que precisava 🙂
abraços

Marcio

18 11 2009
Marcelo Andrade

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!

21 11 2009
Herman Caldara

Parabéns!!!

Fez um excelente trabalho

Abraços

22 11 2009
mrsantos76

Obrigado pelo comentári Herman!
abraços

Marcio

22 11 2009
jonny172

Parabéns. vou testar 😀

27 11 2009
erickgallani

Parabéns pela iniciativa Marcio.
Concordo com os amigos muito interessante a classe Dialog em python. 🙂
Continue assim.

Abraços,
Erick.

27 11 2009
mrsantos76

Obrigado pelo comentário Erick
abraços

Marcio

28 01 2010
Guilherme Cunha

Muito bom !

Vou começar a fazer umas dialogs em python agora …

Obrigado
Abraço!

3 01 2011
Ricardo

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.

Deixe um comentário