sexta-feira, 28 de agosto de 2009

TK e Python

Uma das grandes vantagens do Python é ser multiplataforma. Desta forma, tudo que você escreve em Python é multiplataforma também, sem nenhuma alteração no código.
Isso torna o Python uma excelente linguagem para controlar coisas do dia-a-dia, substituindo o bash (linux), vbscript (windows), bat (dos) entre outros.

Mas sempre falta alguma coisa: a interface gráfica.

Imagine se você tivesse a força do bash e a facilidade de trabalhar com o sistema do vbscript? Bom, python tem.

A tk é um dos vários frameworks gráficos do python. É provavelmente o mais simples e o que vem instalado por padrão em todas instalações de python. Alguns exemplos de tarefas simples com a TK:

Insira este pedaço para poder usar a Tk. Este código inicializa uma janela principal da TK mas a recolhe. Fiz isso para que o nosso script não tenha uma janela constante e sim pergunte ao usuário as informações quando precisar, usando as caixas de seleção da TK:
import Tkinter
root = Tkinter.Tk()
root.withdraw()


Pedindo ao o usuário abrir um arquivo. Note que os formatos são configurados por pares de strings.
import tkFileDialog
myFormats = [('JPEG / JFIF','*.jpg')]
filename = tkFileDialog.askopenfilename(parent=root,title='Escolha um arquivo',filetypes=myFormats)
if len(filename) >0:
print "Abrindo arquivo ",filename


Pedindo ao usuário para escolher uma pasta. Aqui usamos os.getcwd() para começar na pasta onde o programa estiver rodando.
import tkFileDialog, os
dirname = tkFileDialog.askdirectory(parent=root,initialdir=os.getcwd(),title='Escolha um diretorio')
if len(dirname ) > 0:
print "Abrindo diretorio ", dirname 


Exibindo uma mensagem para o usuário:
import tkMessageBox
tkMessageBox.showinfo(parent=root,title="Meu Programa" ,message="Pressione Enter para continuar.")


Finalizando, faremos um exemplo simples de um programa que pede um arquivo, lê ele, troca a palavra "blz" por "beleza" e salva onde você escolher. (exemplo inútil, mas já fiz isso pra consertar tabelas em HTML.
import os, sys, Tkinter, tkMessageBox, tkFileDialog #importa todos os modulos necessarios

#solicitando o arquivo de entrada:
myFormats = [('Text files','*.txt')] #define os tipos de arquivos 
filename = tkFileDialog.askopenfilename(parent=root,title='Escolha um arquivo de texto',filetypes=myFormats)
if len(filename) >0:
print "Abrindo arquivo ",filename
else: sys.exit(0) #Termina o programa

#solicitando o arquivo de saida:
outfilename = tkFileDialog.asksaveasfilename(parent=root,filetypes=myFormats ,title="Guardar alteracoes em...")
if len(outfilename ) > 0:
print "Guardando alteracoes em ", outfilename
else: sys.exit(0)

#executando as trocas
f=open(filename) #abrindo o arquivo
lines=f.readlines() #lendo todas as linhas
f.close() #fechando o arquivo pois jah armazenei as linhas
outf=open(outfilename,'w') #abre o arquivo de saida para escrita
for line in lines: #para cada linha lida
line=line.replace("blz","beleza") #troca naquela linha as palavras que eu quero trocar
outf.write(line)
outf.close()

tkMessageBox.showinfo(parent=root,title="Trocador de Linhas" ,message="Trocas efetuadas.")


Com isto podemos observar a Tk funcionando. Como escondemos o "root" (que era a janela principal), nosso programa será puramente linha de comando com algumas solicitações visuais. Para fazer um programa inteiro em Tk recomenda-se utilizar melhor o "root".

Bom, até a próxima.

Um comentário:

  1. Acabei de chegar ao seu site pois procurando um navegador de arquivos.
    Bom post muito util.
    Só uma discordancia do seu post o tk não vem por padrão não tive que instalar na minha máquina para utilização, o restante foi exatamente como você mostrou... obrigado pelas dicas.

    ResponderExcluir