So I am creating a small data handler program that essentially allows the user to turn in a form that takes in values such as your address, city, name, email, etc. Pressing "View Personnel Data" opens up another Tkinter window which displays all the data that users have previously entered in (data which is stored in a text file and then read from to display the data). I have organized the data in columns in a secondary Tkinter window based on what the data is (e.g. address, city, etc). Of course, eventually, there won't be enough room in the windows to display all entries, and as such the user would want to be able to scroll through them. As a newbie to Tkinter and python in general, I am not sure as to how I would go about doing this. Below I have attached pictures of the windows that are displayed in my program and my code.
My code:
import tkinter as t
root = t.Tk()
root.title("Data Handler")
root.geometry('250x250')
#class viewPersons():
#def open(self):
def addPerson():
data = open('data.txt', 'a')
name = name_var.get()
email = email_var.get()
age = age_var.get()
state = state_var.get()
city = city_var.get()
address = address_var.get()
print(name+','+email+','+age+','+state+','+city+','+address)
data.write(name+','+email+','+age+','+state+','+city+','+address+'\n')
data.close()
viewopen=False
def viewWindow():
global viewopen
def on_close():
global viewopen
viewopen = False
view.destroy()
def onFrameConfigure(primarycanvas):
primarycanvas.configure(scrollregion=primarycanvas.bbox("all"))
if viewopen is False:
viewopen=True
view = t.Tk()
view.geometry('800x300')
primarycanvas = t.Canvas(view, borderwidth=0, background='#ffffff')
frame = t.Frame(primarycanvas, background='#ffffff')
vsb = t.Scrollbar(view, orient='vertical', command=primarycanvas.yview)
primarycanvas.configure(yscrollcommand=vsb.set)
vsb.pack(side="right", fill="y")
primarycanvas.pack(side="left", fill="both", expand=True)
primarycanvas.create_window((4, 4), window=frame, anchor="nw")
frame.bind("<Configure>", lambda event, primarycanvas=primarycanvas: onFrameConfigure(primarycanvas))
t.Label(frame,text='N͟a͟m͟e͟',borderwidth=2,relief='groove',font=(20)).grid(row=0,column=0)
t.Label(frame, text='E͟m͟a͟i͟l͟',borderwidth=2,relief='groove',font=(20)).grid(row=0, column=1)
t.Label(frame, text='A͟g͟e͟',borderwidth=2,relief='groove',font=(20)).grid(row=0, column=2)
t.Label(frame, text='S͟t͟a͟t͟e͟',borderwidth=2,relief='groove',font=(20)).grid(row=0, column=3)
t.Label(frame, text='C͟i͟t͟y͟',borderwidth=2,relief='groove',font=(20)).grid(row=0, column=4)
t.Label(frame, text='A͟d͟d͟r͟e͟s͟s͟',borderwidth=2,relief='groove',font=(20)).grid(row=0, column=5)
class Person():
def __init__(self, name, email, age, state, city, address, rowcounter):
self.name = name
self.email = email
self.age = age
self.state = state
self.city = city
self.address = address
self.rowcounter = rowcounter
def display(self):
t.Label(frame, text=self.name,font=(20)).grid(row=self.rowcounter,column=0)
t.Label(frame,text=self.email,font=(20)).grid(row=self.rowcounter,column=1)
t.Label(frame, text=self.age,font=(20)).grid(row=self.rowcounter, column=2)
t.Label(frame, text=self.state,font=(20)).grid(row=self.rowcounter, column=3)
t.Label(frame, text=self.city,font=(20)).grid(row=self.rowcounter, column=4)
t.Label(frame, text=self.address,font=(20)).grid(row=self.rowcounter, column=5)
data = open('data.txt', 'r+')
rowcounter=1
info = data.readlines()
persons = {}
person_id = 0
for x in info:
split = x.strip().split(',')
print(split)
person_id += 1
persons[person_id] = Person(split[0],split[1],split[2],split[3],split[4],split[5], rowcounter)
persons[person_id].display()
rowcounter += 1
print(persons)
data.close()
view.protocol('WM_DELETE_WINDOW', on_close)
view.mainloop()
name_var = t.StringVar()
email_var = t.StringVar()
age_var = t.StringVar()
state_var = t.StringVar()
city_var = t.StringVar()
address_var = t.StringVar()
t.Label(root, text='Name:').grid(row=0,padx=4)
name_ent = t.Entry(root, textvariable=name_var).grid(row=0,column=1,pady=4)
t.Label(root, text='Email:').grid(row=1,padx=4)
email_ent = t.Entry(root, textvariable=email_var).grid(row=1,column=1,pady=4)
t.Label(root, text='Age:').grid(row=2, padx=4)
age_ent = t.Entry(root, textvariable=age_var).grid(row=2,column=1,pady=4)
t.Label(root, text='State:').grid(row=3, padx=4)
state_ent = t.Entry(root, textvariable=state_var).grid(row=3,column=1,pady=4)
t.Label(root, text='City:').grid(row=4,padx=4)
city_ent = t.Entry(root, textvariable=city_var).grid(row=4,column=1,pady=4)
t.Label(root, text='Address:').grid(row=5,padx=4)
address_ent = t.Entry(root, textvariable=address_var).grid(row=5,column=1,pady=4)
t.Button(root, text='Submit',width=15,command=addPerson).grid(row=6,columnspan=2,ipadx=10)
t.Button(root,text='View Personnel Data',width=15,command=viewWindow).grid(row=7,columnspan=2,ipadx=10)
root.mainloop()