Ella
Ella

Reputation: 13

How to store users input in a list in tkinter?

In my program I want the user to insert the amount of sold adult, senior, and child tickets for every cinema in a database. Since I don't want the code to be too repetitive I thought making a for loop or likewise would be the best alternative.

I need access to every element later and therefore I want to store them in a list. However, when I try to store the users input in a list and then print it, it's either blank or filled with just the most recent input. How do I solve this?

def help():

vuxenlista = []
vuxen = StringVar()

pensionärlista = []
pensionär = StringVar()

barnlista = []
barn = StringVar()

Label(fönster4, text="Vuxenbiljett").pack()
sålda_vuxen = Entry(fönster4, textvariable=vuxen)
sålda_vuxen.pack()

Label(fönster4, text="Pensionärsbiljett").pack()
sålda_pensionär = Entry(fönster4, textvariable=pensionär)
sålda_pensionär.pack()

Label(fönster4, text="Barnbiljett").pack()
sålda_barn = Entry(fönster4, textvariable=barn)
sålda_barn.pack()

vuxenlista.append(sålda_vuxen.get())
pensionärlista.append(sålda_pensionär.get())
barnlista.append(sålda_barn.get())



Button(fönster4, text="fortsätt2", command=lambda: info()).pack()

'''if elements == BIOGRAFVAL[0]:
            Label(fönster4, text="Vuxenbiljett").pack()
            sålda_vuxen1 = Entry(fönster4, textvariable=vuxen)
            sålda_vuxen1.pack()

            Label(fönster4, text="Pensionärsbiljett").pack()
            sålda_pensionär1 = Entry(fönster4, textvariable=pensionär)
            sålda_pensionär1.pack()
        
            Label(fönster4, text="Barnbiljett").pack()
            sålda_barn1 = Entry(fönster4, textvariable=barn)
            sålda_barn1.pack()

              
        if elements == BIOGRAFVAL[1]:
            Label(fönster4, text="Vuxenbiljett").pack()
            sålda_vuxen2 = Entry(fönster4, textvariable=vuxen)
            sålda_vuxen2.pack()

            Label(fönster4, text="Pensionärsbiljett").pack()
            sålda_pensionär2 = Entry(fönster4, textvariable=pensionär)
            sålda_pensionär2.pack()
        
            Label(fönster4, text="Barnbiljett").pack()
            sålda_barn2 = Entry(fönster4, textvariable=barn)
            sålda_barn2.pack()
            
        if elements == BIOGRAFVAL[2]:
            Label(fönster4, text="Vuxenbiljett").pack()
            sålda_vuxen3 = Entry(fönster4, textvariable=vuxen)
            sålda_vuxen3.pack()

            Label(fönster4, text="Pensionärsbiljett").pack()
            sålda_pensionär3 = Entry(fönster4, textvariable=pensionär)
            sålda_pensionär3.pack()
        
            Label(fönster4, text="Barnbiljett").pack()
            sålda_barn3 = Entry(fönster4, textvariable=barn)
            sålda_barn3.pack()  '''

Upvotes: 0

Views: 1048

Answers (1)

Delrius Euphoria
Delrius Euphoria

Reputation: 15098

You should understand that the code till mainloop() just run once. So if you to add extras to the existing code, it has to be triggered through an event. It is not hard to do this. As you havent provided an example that can be run. Below is an example that takes in user input and appends to the list.

from tkinter import *

root = Tk()

def run():
    lst1.append(e1.get()) 
    lst2.append(e2.get())

    print(lst1,lst2)
lst1 = [] #this is very important
lst2 = [] 
e1 = Entry(root)
e1.pack(padx=30,pady=10)

e2 = Entry(root)
e2.pack(padx=10,pady=10)

Button(root,text='Append all the text',command=run).pack(pady=10)

root.mainloop()

In this example the user input is directly appended to the list. It is very important to initialize the empty lists outside of all functions, otherwise it will rewrite the current list with the empty list each time the function is run. I think this is the mistake you were making in your code. Just declare the lists outside help(), like:

vuxenlista = []
pensionärlista = []
barnlista = []
def help():
    #same bunch of codes....

Upvotes: 1

Related Questions