Python Progressivo em PDF: Apostila de Pyhon
Label como saída de dados dinâmica
Porém, não é isso que ocorre na prática, não fica sempre pipocando janelinhas, até porque isso é chato. É normal que, você insira um dado, aperte um botão ou não, e automaticamente já apareça uma informação na janela mesmo, sem nenhuma nova janela surgindo.
É como se fosse uma espécie de label dinâmica. Inicialmente ela mostra:
Seu IMC é:
Então você informa seu peso e altura, e esse label se transforma;
Seu IMC é: 26, você está com sobrepeso
Essa mudança deve ocorrer simplesmente clicando em algum botão.
Vamos aprender como fazer isso?
Como usar StringVar
Vamos criar o seguinte programa:Digitamos nosso nome, clicamos em Exibe e aparece o label embaixo: "Seu nome é: ..."
Esse programa é composto por três frames:
- Frame de cima: tem o label "Digite seu nome" e o campo de entrada
- Frame do meio: tem o label "Seu nome é:" e o label dinâmico (StringVar), que exibe o nome que o usuário digitou no campo de entrada
- Frame de baixo: dois botões, o Exibe e o Sair
Vamos focar no frame do meio, que tem a label dinâmica.
O segredo aqui é criar um objeto do tipo StringVar(), vamos chamar de label_dinamica.
Ela que vai ficar 'pegando' o que é digitado no campo de entrada. Mas ela pega e passa pra outra label, a label3.
A label3 recebe um parâmetro chamado textvariable, que como o nome diz, vai receber um texto variável. Como argumento, passamos o nome do label dinâmica, que no nosso caso é label_dinamica.
O código fica assim:
self.label3 = Label(self.frame_meio, textvariable=self.label_dinamica)
Ou seja, essa linha de código quer dizer: crie uma label de nome label3, que vai ficar no frame_meio e o valor que ela vai exibir é um texto variável, que a label_dinamica vai ficar pegando).
Essa label dinâmica vai pegar o valor escrito na entrada, quando clicamos no botão Exibe.
Quando isso ocorre, esse botão chama o método exibe()
Dentro desse método, pegamos o valor que foi digitado e armazenamos na variável nome da seguinte maneira:
nome = self.entrada.get()
Agora, vamos passar essa variável para a label dinâmica, através do método set() que ela tem, que recebe uma string:
self.label_dinamica.set(nome)
Veja como fica nosso código Python:
from tkinter import * class MinhaGUI: def __init__(self): # Cria janela principal self.janela_principal = Tk() # Cria três frames self.frame_cima = Frame(self.janela_principal) self.frame_meio = Frame(self.janela_principal) self.frame_baixo = Frame(self.janela_principal) # No frame de cima, um label e uma entry self.label1 = Label(self.frame_cima, text='Digite seu nome: ') self.entrada = Entry(self.frame_cima, width = 30) # Empacotando o label e entrada no primeiro frame self.label1.pack(side='left') self.entrada.pack(side='left') # Labels do frame do meio self.label2 = Label(self.frame_meio, text='Seu nome é: ') self.label_dinamica = StringVar() self.label3 = Label(self.frame_meio, textvariable=self.label_dinamica) # Empacotando as labels do meio self.label2.pack(side='left') self.label3.pack(side='left') # Criando os botões self.botao = Button(self.frame_baixo, text='Exibe', command=self.exibe) self.botao_sair = Button(self.frame_baixo, text='Sair', command=self.janela_principal.quit) # Empacotando botões e label self.botao.pack(side='left') self.botao_sair.pack(side='left') # Empacotando os frames na janela principal self.frame_cima.pack() self.frame_meio.pack() self.frame_baixo.pack() # Rodando mainloop() def exibe(self): nome = self.entrada.get() self.label_dinamica.set(nome) gui = MinhaGUI()
Rode ele! Leia linha por linha e tente entender tudo que está se passando aí.
gui = MinhaGUI ??????
ResponderExcluir# Classe
Excluirgui = MinhaGUI ?????
ResponderExcluirMas, ao invés de definir uma label, eu gostaria acessar um atributo dela.
ResponderExcluirComo faço isso?
tem como esplicar esse codigo melhor?
ResponderExcluir