-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgui.py
139 lines (106 loc) · 4.2 KB
/
gui.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
"""
A program that stores the following workout information:
Type, Intensity, Duration, Description
User can:
View all
Search by Type, Intensity, Duration
Add entry
Update entry
Delete
Close
"""
#TODO restrict to only low, med, high intensities
#TODO restrict only to bike, swim, run
#TODO better user interface (scroll both ways, larger listbox)
from tkinter import *
from backend import Database
from logger import Logger
database=Database("workouts.db")
logger=Logger("log.txt")
def get_selected_row(event): # since we binded this to the <<ListboxSelect>> widget event
# When user selects a row in the listbox, grab the id and put the data in the textboxes, use the bind method
global selected_row # Need to perform action on in delete_command()
index=list1.curselection()[0]
selected_row = list1.get(index)# get's a tuple of values
e1.delete(0, END)
e1.insert(END, selected_row[1])
e2.delete(0, END)
e2.insert(END, selected_row[2])
e3.delete(0, END)
e3.insert(END, selected_row[3])
e4.delete(0, END)
e4.insert(END, selected_row[4])
e5.delete(0, END)
e5.insert(END, selected_row[5])
def view_command():
list1.delete(0, END) # deletes from 0 to END of listbox
for row in database.view():
list1.insert(END, row) # insert(index, what) method is specific to tkinter list objects
def search_command():
list1.delete(0, END)
for row in database.search(type_text.get(), duration_text.get(), intensity_text.get(), description_text.get(), tag_text.get()): # StringVar is not a direct string
list1.insert(END, row)
def add_command():
database.insert(type_text.get(), duration_text.get(), intensity_text.get(), description_text.get(), tag_text.get())
list1.delete(0, END)
list1.insert(END, [type_text.get(), duration_text.get(), intensity_text.get(), description_text.get(), tag_text.get()] )
view_command()
def delete_command():
database.delete(selected_row[0])
view_command()
# delete selected row, need to add data in text fields when selected in listbox
def update_command():
database.update(selected_row[0], type_text.get(), duration_text.get(), intensity_text.get(), description_text.get(), tag_text.get())
view_command()
def log_command():
logger.log(selected_row[0], type_text.get(), duration_text.get(), intensity_text.get(), description_text.get(), tag_text.get())
logger.commit()
window=Tk()
window.wm_title("WorkoutDB")
l1=Label(window, text="Type")
l1.grid(row=0, column=0)
l2=Label(window, text="Intensity")
l2.grid(row=1, column=0)
l3=Label(window, text="Duration")
l3.grid(row=2, column=0)
l4=Label(window, text="Description")
l4.grid(row=3, column=0)
l5=Label(window, text="Tags")
l5.grid(row=4, column=0)
type_text=StringVar()
e1=Entry(window, textvariable=type_text)
e1.grid(row=0, column=1)
intensity_text=StringVar()
e2=Entry(window, textvariable=intensity_text)
e2.grid(row=1, column=1)
duration_text=StringVar()
e3=Entry(window, textvariable=duration_text)
e3.grid(row=2, column=1)
description_text=StringVar()
e4=Entry(window, textvariable=description_text)
e4.grid(row=3, column=1)
tag_text=StringVar()
e5=Entry(window, textvariable=tag_text)
e5.grid(row=4, column=1)
list1=Listbox(window, height=6, width=25)
list1.grid(row=0, column=2, rowspan=6, columnspan=2)
sb1=Scrollbar(window)
sb1.grid(row=0, column=4, rowspan=6)
list1.configure(yscrollcommand=sb1.set) # connecting the list and scroll bar
sb1.configure(command=list1.yview)
list1.bind('<<ListboxSelect>>', get_selected_row) # Binds the get_selected_row function to the <<ListboxSelect>> widget event
b1=Button(window, text="Search", width=12, command=search_command)
b1.grid(row=7, column=0)
b2=Button(window, text="Add", width=12, command=add_command)
b2.grid(row=5, column=0)
b3=Button(window, text="Update", width=12, command=update_command)
b3.grid(row=6, column=0)
b4=Button(window, text="View All", width=12, command=view_command)
b4.grid(row=7, column=1)
b5=Button(window, text="Delete", width=12, command=delete_command)
b5.grid(row=5, column=1)
b6=Button(window, text="Close", width=12, command=window.destroy)
b6.grid(row=6, column=1)
b7=Button(window, text="Log", width=12, command=log_command)
b7.grid(row=8, column=0)
window.mainloop()