Arquivo da categoria ‘Python’

A linguagem Python possui vários módulos adicionais e você pode usar o módulo cx_Oracle que é importado para fornecer a API para acessar o banco de dados Oracle.

Download: http://cx-oracle.sourceforge.net/

Oracle API para Python

1 –  Após efetuar o download para seu sistema operacional no link acima abra o instalador:

Local

Local

2 – Aguarde o andamento da instalação:

Andamento

Andamento

3 – Clique em finalizar para terminar a instalação:

Concluir

Concluir

4 – Abra sua IDE preferida e utilize o código abaixo:

Programa

Programa

Exemplo:

Neste exemplo criamos uma conexão com o Oracle Database XE utilizando a API Oracle para Python.

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# ConexaoOracle.py

# importa modulos
from Tkinter import *
import tkMessageBox
import cx_Oracle

# Cria formulario
formulario = Tk(className='Oracle XE - 11g')
formulario.geometry("300x200+300+300")

# Cria janela para menssagem
janela = Tk()
janela.wm_withdraw()

# Evento para o botão
def conectar():
    # Cria string de conexão
    sconexao = eusuario.get()+ "/" + esenha.get() + "@localhost/" + esid.get()
    try:
        con = cx_Oracle.connect(sconexao)
        tkMessageBox.showinfo(title="Menssagem", message="Conectado com Sucesso!", parent=janela)
    except ValueError:
        tkMessageBox.showinfo(title="Menssagem", message="Erro de Conexão", parent=janela)

# Cria componentes
titulo = Label(formulario, text="Oracle XE - Python")

lusuario = Label(formulario, text="Digite seu usuário:")
lsenha = Label(formulario, text="Digite sua senha:")
lsid = Label(formulario, text="Digite o Oracle SID:")

eusuario = Entry(formulario)
esenha = Entry(formulario, show="*")
esid = Entry(formulario)

botao = Button(formulario, text="Conectar", command=conectar)

# Cria layout de tela
titulo.grid(row=0, sticky=W+E+N+S, pady=10)
lusuario.grid(row=1, sticky=W, padx=20)
eusuario.grid(row=1, column=1, pady=5)
lsenha.grid(row=2,sticky=W, padx=20)
esenha.grid(row=2, column=1, pady=5)
lsid.grid(row=3, sticky=W, padx=20)
esid.grid(row=3, column=1, pady=5)
botao.grid(row=5, sticky=W, pady=20, padx=20)

# Loop do tcl
mainloop()

 

Em interface gráfica do usuário (GUI), uma interface de documentos múltiplos, ou MDI, acrônimo para Multiple Document Interface é um método de organização de aplicações gráficas em janelas que residem em uma única janela, a janela principal da aplicação. A única exceção são possíveis janelas modais da aplicação.

Com múltiplas interfaces de documentos, uma única barra de menu e / ou barra de ferramentas é compartilhado entre todas as janelas filho, reduzindo a desordem e uma utilização mais eficiente do espaço na tela. As janelas filho de um aplicativo pode ser ocultada / mostrada / minimizada / maximizada como um todo. Os autores de aplicações multi-plataforma podem fornecer a seus usuários um comportamento consistente da aplicação entre plataformas.

MDI - WxPython - Windows

MDI – WxPython – Windows

WxPython

É um kit de ferramentas GUI para a linguagem de programação Python. Ele permite que os programadores Python desenvolvam programas com uma interface gráfica do usuário altamente funcional e robusta, simples e fácil. Ele é implementado como um módulo de extensão Python (código nativo) que envolve a biblioteca wxWidgets de plataforma cruzada, e é escrito em C++.

Download: http://www.wxpython.org/index.php

WxPython – Linux Ubuntu Bug (WxWidgets apps don’t have menus)

O código Python é multi-plataforma, porem a coleção de Widgets WxPython possui um erro identificado na plataforma Linux Ubuntu e não exibe os menus, até a data deste post a instalação da versão mais recente do WxPython não corrigiu o problema, portanto escrevemos e testamos este código na plataforma Windows.

Informações sobre o erro: https://bugs.launchpad.net/ubuntu/+source/wxwidgets2.8/+bug/662077

Exemplo:

Neste exemplo criamos um formulário MDI básico e um menu.

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# MdiForms.py
 
# importa modulos
import wx

# Declara Classe
class MDIFormulario(wx.MDIParentFrame):

    # Declara Contrutor
    def __init__(self):

        # Cria Formulario Pai
        wx.MDIParentFrame.__init__(self, None, -1, "Python - Formulario - MDI ",size=(wx.GetDisplaySize()))

        # Cria Menu
        menu = wx.Menu()
        menu.Append(5000, "&Novo")
        menu.Append(5001, "&Sair")

        # Cria Barra de menus
        menubarra = wx.MenuBar()
        menubarra.Append(menu, "&Formulario")
        self.SetMenuBar(menubarra)

        # Declara Eventos dos menus
        self.Bind(wx.EVT_MENU, self.OnNovoFormulario, id=5000)
        self.Bind(wx.EVT_MENU, self.OnSair, id=5001)

    # Cria evento de saida
    def OnSair(self, evt):
        self.Close(True)

     # Cria Janela
    def OnNovoFormulario(self, evt):
        # Cria Formulario Filho
        FormularioFilho = wx.MDIChildFrame(self, -1, "Formulario Filho", size=(400, 200))
        
        # Cria componentes do formulario
        self.texto = wx.StaticText(FormularioFilho, label="Digite seu nome: ", pos=(20, 30))
        self.campo = wx.TextCtrl(FormularioFilho, size=(300, -1), pos=(20, 60))
        self.botao = wx.Button(FormularioFilho, label="Ok", pos=(20, 90))
        
        # Exibe formulario
        FormularioFilho.Show(True)

# Cria aplicação Wx
app = wx.PySimpleApp()

# Cria formulario
formulario = MDIFormulario()
formulario.Show()

# Loop do tcl
app.MainLoop()

Tooltip é um elemento comum de interface gráfica GUI, também conhecida como dica de contexto é aquela moldura pop up que abre quando você passa o mouse sobre um elemento da interface (normalmente uma palavra em um texto) e que contém uma explicação adicional sobre aquele elemento que recebeu o ponteiro do mouse sobre ele. É utilizado em conjunto com um cursor, normalmente um ponteiro do mouse. O usuário paira o cursor sobre um item, sem clicar nele, e uma pequena “caixa” irá aparece com informações complementares relativas a este item.

ToolTip - Tkinter

ToolTip – Tkinter

ToolTip

A classe ToolTip fornece um widget de dica flexível para Tkinter.

Download

http://tkinter.unpythonic.net/wiki/ToolTip

Exemplo:

Neste exemplo utilizaremos uma classe de fonte aberto para criar um Widget ToolTip, salve a classe no diretório de sua aplicação ou nos diretórios do Python.

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# ToolTip.py

# importa modulos
import Tkinter
from ToolTip import ToolTip

# Cria formulario
formulario = Tkinter.Tk(className='Tk - ToolTip')

# Cria componentes
rotulo = Tkinter.Label(formulario, text="Pare o cursor em cima do Button por alguns segundos")

botao = Tkinter.Button(formulario, text='Aperte Aqui !!!', command=formulario.quit)

# Cria Dica (Tooltip)
dica = ToolTip(botao, follow_mouse=1, text="Desenvolvimento Aberto, Clique para sair do programa.")

# Posiciona componentes
rotulo.pack(padx=20, pady=10)
botao.pack(pady=10)

# Loop do Tcl
formulario.mainloop()

Painel deslizante é um componente da interface gráfica que permite que o usuário redimensione componentes contidos normalmente dentro de dois painéis que podem ser posicionados na horizontal ou na vertical.

PanedWindow

O PanedWindow  é um widget gerenciador de geometria, que pode conter um ou mais widgets filhos (“painéis”). Os widgets filhos pode ser redimensionados pelo usuário, ao mover linhas de separação (“sashes“) usando o mouse.

PanedWindow

PanedWindow

Exemplo:

Neste exemplo criamos um painel de rolagem divido na horizontal que contem dois componentes que podem ser redimensionados pelo usuário, respeitando o tamanho mínimo de cada componente.

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# Panewindow.py

# importa modulos
from Tkinter import *
from PIL import Image, ImageTk
from ScrolledText import ScrolledText
import urllib2 as urllib
import cStringIO

# Cria formulario
formulario = Tk()
formulario.title = "Desenvolvimento Aberto"

# Declara variavel
txt = "O balonismo e um esporte aeronautico praticado com um balao de ar quente.\n" + \
      "Possui adeptos em todo o mundo. No Brasil, o esporte comecou a se popularizar\n" + \
      "a partir dos anos 90.\n" + \
      "O balão é considerado uma aeronave assim como aviao, helicopteros e outros.\n" + \
      "Por esta razao o balao deve ter uma matricula (prefixo) registrado junto\n" + \
      "a ANAC, seu piloto deve possuir uma licenca (breve) especifico para a pratica\n" + \
      "do balonismo tambem emitido pela ANAC.";
 
# Cria Url
url = urllib.urlopen("https://desenvolvimentoaberto.org/wp-content/uploads/2014/04/balonismo.jpg")

# Lê imagem da url
figura = cStringIO.StringIO(url.read())

# carrega a imagem
imagem = Image.open(figura)

# joga a imagem para o componente
foto = ImageTk.PhotoImage(imagem)

painel = PanedWindow(orient=HORIZONTAL)
painel.pack(fill=BOTH, expand=10)

# Exibi a imagem
pic = Label(painel, image = foto)

# Cria caixa de texto
texto = ScrolledText(painel, height =10, width = 40)
texto.insert(END, txt)

# Adiciona componentes no painel
painel.add(pic)
painel.add(texto)

# Loop do tcl
mainloop()

Visual – TkFileDialog – Python – Linux

Publicado: 24 de abril de 2014 em Python

Em computação caixas de diálogo reutilizáveis ​​que são comuns a todas as aplicações, incluindo caixas de diálogo para abrir arquivos, salvar arquivos e impressão. Uma vez que estas caixas de diálogo são implementadas pelo sistema operacional, ou classes no caso de linguagens multi plataforma,  podem ser compartilhadas entre todos os aplicativos que são executados no sistema operacional, o que ajuda o usuário a experiência de consistência; quando os usuários estão familiarizados com o uso de uma caixa de diálogo de funcionamento fornecido pelo sistema em um aplicativo, eles não precisam aprender a usar essa caixa de diálogo em outras aplicações. Como essas caixas de diálogo estão disponíveis para todas as aplicações e porque ajudam a proporcionar uma experiência de usuário consistente.

TkFileDialog

Se você deseja abrir ou salvar um arquivo ou para escolher um diretório usando um diálogo de arquivos. O tkFileDialog é  o módulo para você. Na maioria dos casos as sete funções de conveniência fornecidos pelo módulo vai atender suas necessidades.

TkFileDialog

TkFileDialog

Exemplo:

Neste exemplo usamos a classe CFileDialog para usar os diálogos comuns e retornar o caminho do arquivo selecionado.

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# Dialog.py

# importa modulos
from Tkinter import *
from ScrolledText import ScrolledText
import tkFileDialog

# Cria formulario
formulario = Tk()
formulario.title = "Desenvolvimento Aberto"

# Eventos dos botões
def clique1():
    arquivo = tkFileDialog.askopenfile()
    if arquivo:
        texto.insert(END, arquivo.read())  

def clique2():
    arquivo = tkFileDialog.asksaveasfile()
    if arquivo:
        arquivo.write(texto.get(1.0,END))

# Cria componentes
rotulo = Label(formulario, text="Digite um texto na caixa abaixo:")

texto = ScrolledText(formulario, height =10, width = 40)

botao1 = Button(formulario, text="Abrir",  width=7, command=clique1)
botao2 = Button(formulario, text="Salvar", width=7, command=clique2)

# Posiciona componentes
rotulo.pack(padx=10, pady=10)
texto.pack(padx=10, fill=BOTH)
botao1.pack(padx=10, side=LEFT)
botao2.pack(padx=2,pady=10, side=LEFT)

# Loop do tcl
mainloop()

A Barra de ferramentas é um componente utilizado pelos softwares com interface gráfica (GUI) com a finalidade de permitir uma ação rápida por parte do usuário, facilitando o acesso a funções do programa. Uma das suas características é possuir ícones para as operações mais corriqueiras e representar através de imagens operações que poderiam demandar uma grande quantidade de informações para chegar ao mesmo objetivo.

Toolbar

O Python  Tkinter não possui um widget padrão para o componente barra de ferramentas, então é necessário criar uma manualmente, usando outros componentes Tkinter.

Toolbar - Tkinter

Toolbar – Tkinter

Exemplo:

Neste exemplo criamos uma barra de ferramentas usando o widget do Tkinter chamado Frame,  utilizando botões e seus eventos de clique. Para testar este exemplo você precisa de imagens de ícones do formato PNG, as imagens podem ser baixadas neste link: http://www.iconesbr.net/icone/Linux

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# Toolbar.py

# importa modulos
from Tkinter import Tk, Frame
from Tkinter import Label, Button, LEFT, TOP, X, FLAT, RAISED, SUNKEN
from PIL import Image, ImageTk

# Cria formulario
formulario = Tk()
formulario.title = "Desenvolvimento Aberto"
formulario.geometry("450x200+300+300")

# Eventos dos botões
def clique1():
    rotulo["text"] = "Clique do botao 1"

def clique2():
    rotulo["text"] = "Clique do botao 2"

def clique3():
    rotulo["text"] = "Clique do botao 3"
    
# Cria componentes    
ferramenta = Frame(height=130, bd=1, relief=RAISED)

separador = Frame(height=2, bd=1, relief=SUNKEN)

rotulo = Label(formulario, text="Eventos")

# Carrega Ícones    
icone1 = Image.open("9449_128x128.png")
icone2 = Image.open("9450_128x128.png")
icone3 = Image.open("9451_128x128.png")

# Cria Imagens
imagem1 = ImageTk.PhotoImage(icone1)
imagem2 = ImageTk.PhotoImage(icone2)
imagem3 = ImageTk.PhotoImage(icone3)

# Cria botões
botao1 = Button(ferramenta, image=imagem1,relief=FLAT, command=clique1)
botao2 = Button(ferramenta, image=imagem2,relief=FLAT, command=clique2)
botao3 = Button(ferramenta, image=imagem3,relief=FLAT, command=clique3)

# Posiciona componentes
botao1.pack(side=LEFT, padx=2,pady=2)
botao2.pack(side=LEFT, padx=2,pady=2)
botao3.pack(side=LEFT, padx=2,pady=2)
ferramenta.pack(side=TOP, fill=X)
separador.pack(fill=X, padx=5, pady=5)
rotulo.pack(padx=20, pady=10)

# Loop do tcl
formulario.mainloop()

Visual – Treeview – ttk – Python – Linux

Publicado: 16 de abril de 2014 em Python

Em computação, um tree view (literalmente do inglês vista de árvore) é um elemento de interface gráfica (isto é um componente widget) que permite ao usuário mostrar dados hierárquicos em forma de árvore, expandir ou recolher os ramos e nós. Dependendo do wiget toolkit ou aplicação em uso, existem muitos estilos de apresentação gráfica de tree views.

TreeView

O Widget ttk.Treeview exibe uma coleção hierárquica de itens. Cada item tem um rótulo de texto, uma imagem opcional, e uma lista opcional de valores de dados. Os valores dados são exibidas em colunas sucessivas após o rótulo árvore.

Treeview

Treeview

Exemplo:

Neste exemplo usamos uma visão de arvore para exibir uma discografia musical, você pode abrir e fechar os nós do modelo de dados em visão de  árvore, um duplo clique do mouse em cada nó dispara um evento para que exibe a descrição do nó corrente em um rodapé.

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# Treeview.py

# importa modulo 

from Tkinter import *
from ttk import *

# Cria formulario
formulario = Tk()
formulario.title = "Desenvolvimento Aberto"

# declara variaveis e arrays
albumB = "Please, Please Me";
 
MusicaB = [  "I Saw Her Standing There",  "Misery",  "Anna (Go to Him)",
             "Chains" ,  "Boys" , "Ask Me Why",  "Please Please Me",  "Love Me Do" ,
             "P.S. I Love You",  "Baby It's You",  "Do You Want To Know A Secret?",
             "A Taste of Honey",  "There's A Place",  "Twist and Shout" ]
 
albumR = "The Rolling Stones";
 
MusicaR =[ "Route 66", "I Just Want to Make Love to You", "Honest I Do",
           "Mona (I Need You Baby)",  "You Can Make It If You Try", "Little by Little",
           "I\'m a King Bee", "Carol", "Tell Me (You \'re Coming Back)", "Can I Get a Witness",
           "Tell Me (You\'re Coming Back)",  "Walking the Dog" ]   
           
# Evento duplo clique do treeview
def duplo_clique(*args):
    item = disco.selection()[0]
    rodape["text"] = disco.item(item,"text")
                 
# Cria componentes
rotulo = Label(formulario, text="Duplo clique em um node da arvore:")
rodape = Label(formulario, text="Evento do mouse")
disco = Treeview(formulario) 

# Define tamanho da coluna
disco.column("#0",minwidth=0,width=250)
      
# Cria barra de rolagem      
barra = Scrollbar(formulario, orient='vertical', command=disco.yview)

# Adiciona barra de rolagem
disco.configure(yscroll=barra.set)
barra.pack( side = RIGHT, fill=Y )

# Cria cabeçario do treeview
disco.heading('#0', text='Primeiro Album', anchor='w')

# Insere Node principal
titulo = disco.insert('', 'end', text="Discografia", open=False)

# Insere nodes filhos
bandaB = disco.insert(titulo, 'end', text="Beatles")
bandaR = disco.insert(titulo, 'end', text="Rolling Stones")

# Insere variaveis
album1 = disco.insert(bandaB, 'end', text=albumB)
album2 = disco.insert(bandaR, 'end', text=albumR)

# Insere Arrays
b=0
r=0

for b in MusicaB:
    disco.insert(album1, 'end', text=b)
    
for r in MusicaR:
    disco.insert(album2, 'end', text=r)    
    
# Cria evento duplo clique
disco.bind("<Double-Button-1>", duplo_clique)    

# Posiciona componentes no formulario
rotulo.pack(padx=20, pady=5)
disco.pack(padx=20, pady=10)
rodape.pack(padx=20, pady=5)

# loop do tcl
mainloop()

PhotoImage

Você pode usar a classe PhotoImage sempre que você precisar exibir um ícone ou uma imagem em um aplicativo Tkinter. A classe PhotoImage é usada para exibir imagens (ou em tons de cinza ou imagens de cor real) em etiquetas, botões, telas e widgets de texto. Se você precisa trabalhar com outros formatos de arquivo, o Python Imaging Library (PIL) contém classes que permite carregar imagens em mais de 30 formatos e convertê-los em objetos de imagem compatíveis com Tkinter.

O PhotoImage  também pode ler arquivos GIF base64-codificado em Strings. Você pode usar isso para incorporar imagens no código fonte Python.

pil

PhotoImage – PIL

 

Como Instalar o PIL – Ubuntu 64

Para Instalar o Python Imaging Library (PIL) digite os seguintes comandos no terminal do Linux:


sudo apt-get build-dep python-imaging
sudo apt-get install libjpeg62 libjpeg62-dev

sudo ln -s /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/libz.so
sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/libjpeg.so
sudo ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so /usr/lib/libfreetype.so

sudo apt-get install python-pip

sudo pip install PIL

sudo apt-get install python-imaging-tk

Exemplo:

Neste exemplo carregamos uma imagem cujo sua fonte é uma Url da internet e  a exibimos em um componente de imagem.

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# PhotoImage.py

# importa modulo

from Tkinter import *
from PIL import Image, ImageTk

# importa url e IO
import urllib2 as urllib
import cStringIO

# Cria formulario
formulario = Tk()
formulario.title = "Desenvolvimento Aberto"

# Cria componentes
rotulo = Label(formulario, text = "Imagem - Python Imaging Library")

# Cria Url
url = urllib.urlopen("https://desenvolvimentoaberto.org/wp-content/uploads/2014/04/images.jpg")

# Lê imagem da url
figura = cStringIO.StringIO(url.read())

# carrega a imagem
imagem = Image.open(figura)

# joga a imagem para o componente
foto = ImageTk.PhotoImage(imagem)

# Exibi a imagem
pic = Label(formulario, image = foto)

# Posiciona componentes
rotulo.pack(padx=20)
pic.pack(padx=20, pady=10)

# Loop do tcl
mainloop()

Uma barra de progresso é um componente de uma interface gráfica de usuário usado para visualizar a progressão de uma operação de computador estendida, como um download, transferência de arquivos, ou de instalação. Às vezes, o gráfico é acompanhada por uma representação textual do progresso em um formato por cento.

ttk.Progressbar

Representa um controle de barra de progresso. O objetivo desta ferramenta é para tranquilizar o usuário que algo está acontecendo.

progressbar-py

Progress Bar – ttk

 

Exemplo:

Neste exemplo usamos um contador e um temporizador para simular uma tarefa e usamos a classe BackgroundWorker para processar o andamento da tarefa.

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# ProgressBar.py

# importa modulo 

from Tkinter import *
from ttk import *

# Cria formulario
formulario = Tk()
formulario.title = "Desenvolvimento Aberto"

# Evento do botão
def clique():
    progresso.step(1)
    progresso.start()
          
# Cria componentes
rotulo = Label(formulario, text="Barra de Progresso")

progresso = Progressbar(formulario,length=200)

botao = Button(formulario, text="Ok", command=clique)

# Posiciona componentes
rotulo.pack(padx=20, pady=10)
progresso.pack(padx=20)
botao.pack(padx=20, pady=10)

# looping do tcl
mainloop()

Em interfaces gráficas de usuário (GUI), uma interface tabulada  ou um Tab Control  é um widget que permite a interação de vários documentos ou painéis para ser contido dentro de uma única janela, usando guias como um widget de navegação para alternar entre conjuntos de painéis.

ttk,Notebook

Widget Notebook gerencia uma coleção de janelas e exibe uma única janela de cada vez. Cada janela filho é associado a um guia.

NotebookTabChanged

Evento que é disparado a cada mudança de guia do componente NoteBook.

notebook-py

ttk – NoteBook

 

Exemplo:

Neste exemplo criamos um painel tabulado com 3 guias onde na primeira e na segunda guia o usuário entrará com um numero inteiro e na terceira guia sobre o evento NotebookTabChanged efetuaremos a soma dos números escolhidos.

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# ScrolledText.py

# importa modulo 

from Tkinter import *
from ttk import *

# Cria formulario
formulario = Tk()
formulario.title = "Desenvolvimento Aberto"

# Cria Notebook
abas = Notebook(formulario)

# Cria paineis
painel1 = Frame(abas)
painel2 = Frame(abas)
painel3 = Frame(abas)

# Metodo do evento TabChange
def mudaEstado(*args):
    if (abas.index("current") == 2):
        soma = int(numero1.get()) + int(numero2.get())
        total["text"] = str(soma)    

#Declara componentes e insere a cada painel
Label(painel1, text = "Escolha o primero numero inteiro:" ).pack(padx=20, pady=10)
numero1 = Entry(painel1)

Label(painel2, text = "Escolha o segundo numero inteiro:" ).pack(padx=20, pady=10)
numero2 = Entry(painel2)

Label(painel3, text = "Total da soma:" ).pack(padx=20, pady=10)
total = Label(painel3, text = "0")

# Cria abas
abas.add(painel1, text="Numero 1")
abas.add(painel2, text="Numero 2")
abas.add(painel3, text="Total")

# Cria evento TabChange
abas.bind("<<NotebookTabChanged>> ", mudaEstado)

# Posiciona componentes aos paineis
abas.pack(padx=20, pady=20);
numero1.pack(padx=20, pady=5)
numero2.pack(padx=20, pady=5)
total.pack(padx=20, pady=5)

# loop do tcl
mainloop()