Take a Tkinter entry and save to a variable

Asked

Viewed 3,404 times

0

I made this initial window where I took the data, and when the client used it, after providing the data and confirming it, it closed and kept the data saved in a variable that was not tied to an DEF nesting, that is, that I could use at any time in the future, even though I was outside Tkinter’s window. When I create a variable inside DEF to get the information, I can’t use outside of it. But when I create outside of DEF, it does not receive the information from Entry(Tkinter Option). I am using Python 3.6.

from tkinter import *

janela = Tk()

def __init__():
    pass
def ok():
    nick = str(CaixaDeEntrada1.get())
    patente = str(CaixaDeEntrada2.get())
    pagpromocao = str(CaixaDeEntrada3.get())
    CaixaDeEntrada3['bg'] = 'white'
    if nick in ' ':
        CaixaDeEntrada1['bg'] = 'pink'
        erro['text'] = 'Preencha todos os campos!'
    else:
        CaixaDeEntrada1['bg'] = 'white'
    if patente in ' ':
        CaixaDeEntrada2['bg'] = 'pink'
        erro['text'] = 'Preencha todos os campos!'
    else:
        CaixaDeEntrada2['bg'] = 'white'
    if pagpromocao in ' ':
        CaixaDeEntrada3['bg'] = 'pink'
        erro['text'] = 'Preencha todos os campos!'
    else:
        CaixaDeEntrada3['bg'] = 'white'
    if nick != '' and patente != '' and pagpromocao != '':
        janela.destroy()


#==========================================Janela Inicial:

titulo1 = Label(bg='#191970', font=('Arial', '14', 'bold'), fg='white', text='BEM VINDO ao RELATÓRIOS DIC')
titulo1.place(x='13', y='10')

CaixaDeEntrada1 = Entry(width=25, bg='white', font=('Comic Sans MS', '10'))
CaixaDeEntrada1.place(x=130, y=50)
Info1 = Label(font=('Arial', '11', 'bold'), fg='white', bg='#191970', text='Nick:')
Info1.place(x=10, y=50)

CaixaDeEntrada2 = Entry(width=25, bg='white', font=('Comic Sans MS', '10'))
CaixaDeEntrada2.place(x=130, y=75)
Info2 = Label(font=('Arial', '11', 'bold'), fg='white', bg='#191970', text='Patente:')
Info2.place(x=10, y=75)

CaixaDeEntrada3 = Entry(width=25, bg='white', font=('Comic Sans MS', '10'))
CaixaDeEntrada3.place(x=130, y=100)
Info3 = Label(font=('Arial', '11', 'bold'), fg='white', bg='#191970', text='Pág. Promoção:')
Info3.place(x=10, y=100)

erro = Label(bg='#191970', fg='red', font=('Arial', '11'), text='')
erro.place(x=135, y=125)

proximo = Button(width='39', text='Próximo', font=('Arial','10'), command=ok)
proximo.place(x=15, y=150)

#=======================================FimDaJanelaInicial

#Propriedades da janela:
janela.resizable(width=False, height=False)
janela.configure(bg='#191970')
janela.wm_iconbitmap('ICO.ico')
janela.title('Relatórios DIC - Por WellersonOP')
janela.geometry('350x190+450+300')
janela.mainloop()
Linha_Entry_1 = 'Salve a primeira entry nessa variavel'
Linha_Entry_2 = 'Salve a segunda entry nessa variavel'
Linha_Entry_3 = 'Salve a terceira entry nessa variavel'
#Resolvendo esse meu problema poderei terminar o programa

2 answers

0

So an alternative is to use a global variable. You can capture the input data and save it to a global variable, and then use it anywhere in the code. See this example I did:

try:
    from tkinter import *
except:
    from Tkinter import *

tela = Tk()

# Definição que vai "pegar" o texto da lbl e salvar em uma variável global
def salvar_dados():
   # Vamos criar uma variável global
   global armazenar_nome

   # Vamos dizer que ela recebe o texto do widget Entry
   armazenar_nome = nome_do_cliente.get()

# Texto Nome:
texto = Label(tela, text="Nome: ")
# Widget de Entrada
nome_do_cliente = Entry(tela)
# Botão de confirmação 
btn_enviar = Button(tela, text="Enviar",command=salvar_dados)

# Definindo a geometria de tela, eu não sei trabalhar bem com .pack()
texto.grid(row=1,column=1)
nome_do_cliente.grid(row=1,column=2)
btn_enviar.grid(row=2,column=1,columnspan=2)


'''A partir daqui só tem código referente a recuperação da variável com o nome do cliente'''


def recuperar():
    # Vamos tornar a variável disponível nessa definição
    global armazenar_nome

    # Vamos fazer o lbl_salvo receber o nome do cliente, armazenado na variável global
    lbl_salvo["text"] = armazenar_nome

# Label que vai receber o conteúdo da variável global
lbl_salvo = Label(tela, text="Aqui vai aparecer o nome do cliente")

# Botão que vai acionar o evento recuperar
btn_recuperar = Button(tela, text="Qual é o nome do cliente?",command=recuperar)

# Definindo a geometria de tela, eu não sei trabalhar bem com .pack()
lbl_salvo.grid(row=3,column=1,columnspan=2)
btn_recuperar.grid(row=4, column=1, columnspan=2)

tela.mainloop()

0

def It’s function, and everything you program in a function is only valid for it. Therefore, I arranged your code as follows, where you can see the storage of the data of the Entries mentioned in the desired variables, through the prints inserted in the code:

# -*- coding: cp1252 -*-

from Tkinter import *

janela = Tk()

def __init__():
    pass
def ok():
    nick = str(CaixaDeEntrada1.get())
    patente = str(CaixaDeEntrada2.get())
    pagpromocao = str(CaixaDeEntrada3.get())
    Linha_Entry_1 = nick
    Linha_Entry_2 = patente
    Linha_Entry_3 = pagpromocao
    print Linha_Entry_1
    print Linha_Entry_2
    print Linha_Entry_3
    CaixaDeEntrada3['bg'] = 'white'
    if nick in ' ':
        CaixaDeEntrada1['bg'] = 'pink'
        erro['text'] = 'Preencha todos os campos!'
    else:
        CaixaDeEntrada1['bg'] = 'white'
    if patente in ' ':
        CaixaDeEntrada2['bg'] = 'pink'
        erro['text'] = 'Preencha todos os campos!'
    else:
        CaixaDeEntrada2['bg'] = 'white'
    if pagpromocao in ' ':
        CaixaDeEntrada3['bg'] = 'pink'
        erro['text'] = 'Preencha todos os campos!'
    else:
        CaixaDeEntrada3['bg'] = 'white'
    if nick != '' and patente != '' and pagpromocao != '':
        janela.destroy()


#==========================================Janela Inicial:

titulo1 = Label(bg='#191970', font=('Arial', '14', 'bold'), fg='white', text='BEM VINDO ao RELATÓRIOS DIC')
titulo1.place(x='13', y='10')

CaixaDeEntrada1 = Entry(width=25, bg='white', font=('Comic Sans MS', '10'))
CaixaDeEntrada1.place(x=130, y=50)
Info1 = Label(font=('Arial', '11', 'bold'), fg='white', bg='#191970', text='Nick:')
Info1.place(x=10, y=50)

CaixaDeEntrada2 = Entry(width=25, bg='white', font=('Comic Sans MS', '10'))
CaixaDeEntrada2.place(x=130, y=75)
Info2 = Label(font=('Arial', '11', 'bold'), fg='white', bg='#191970', text='Patente:')
Info2.place(x=10, y=75)

CaixaDeEntrada3 = Entry(width=25, bg='white', font=('Comic Sans MS', '10'))
CaixaDeEntrada3.place(x=130, y=100)
Info3 = Label(font=('Arial', '11', 'bold'), fg='white', bg='#191970', text='Pág. Promoção:')
Info3.place(x=10, y=100)

erro = Label(bg='#191970', fg='red', font=('Arial', '11'), text='')
erro.place(x=135, y=125)

proximo = Button(width='39', text='Próximo', font=('Arial','10'), command=ok)
proximo.place(x=15, y=150)


#=======================================FimDaJanelaInicial

#Propriedades da janela:
janela.resizable(width=False, height=False)
janela.configure(bg='#191970')
#janela.wm_iconbitmap('ICO.ico')
janela.title('Relatórios DIC - Por WellersonOP')
janela.geometry('350x190+450+300')
janela.mainloop()

Browser other questions tagged

You are not signed in. Login or sign up in order to post.