mirror of
https://github.com/Sosokker/Packaged-Food-Explorer.git
synced 2025-12-19 05:04:06 +01:00
Change overall Layout
This commit is contained in:
parent
1c11514439
commit
adb74b2136
111
app.py
111
app.py
@ -1,4 +1,3 @@
|
|||||||
import os
|
|
||||||
import sqlite3
|
import sqlite3
|
||||||
import tkinter as tk
|
import tkinter as tk
|
||||||
from tkinter import ttk
|
from tkinter import ttk
|
||||||
@ -12,8 +11,7 @@ import threading
|
|||||||
import sqlite3
|
import sqlite3
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
from Essential.plotter import plotter
|
from Essential.plotter import plotter
|
||||||
import tempfile
|
|
||||||
import webview
|
|
||||||
|
|
||||||
class App:
|
class App:
|
||||||
def __init__(self, master):
|
def __init__(self, master):
|
||||||
@ -21,7 +19,7 @@ class App:
|
|||||||
self.master.title('Package Food Database')
|
self.master.title('Package Food Database')
|
||||||
self.df = pd.read_sql_query("SELECT * FROM food_data", sqlite3.connect(r"Essential\data\food_data.db"))
|
self.df = pd.read_sql_query("SELECT * FROM food_data", sqlite3.connect(r"Essential\data\food_data.db"))
|
||||||
self.plotter = plotter()
|
self.plotter = plotter()
|
||||||
|
self.__curr_index = 0
|
||||||
# Search food from database -----------------
|
# Search food from database -----------------
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -51,59 +49,71 @@ class App:
|
|||||||
self.filter_frame = ttk.LabelFrame(self.master, text="Filter")
|
self.filter_frame = ttk.LabelFrame(self.master, text="Filter")
|
||||||
self.filter_frame.grid(row=0, column=1, padx=10, pady=10, sticky="nsew")
|
self.filter_frame.grid(row=0, column=1, padx=10, pady=10, sticky="nsew")
|
||||||
|
|
||||||
|
self.checkbox_frame = ttk.LabelFrame(self.filter_frame, text="Categories")
|
||||||
|
self.checkbox_frame.grid(row=1, column=0, sticky="nsew")
|
||||||
|
|
||||||
|
self.nutrient_comp_frame = ttk.LabelFrame(self.filter_frame, text="Nutrients Quantity")
|
||||||
|
self.nutrient_comp_frame.grid(row=2, column=0, sticky="nsew")
|
||||||
|
|
||||||
|
self.calories_comp =ttk.LabelFrame(self.nutrient_comp_frame, text="Calories")
|
||||||
|
self.calories_comp.grid(row=0, column=0, sticky="nsew")
|
||||||
|
|
||||||
|
self.protein_comp = ttk.LabelFrame(self.nutrient_comp_frame, text="Protein")
|
||||||
|
self.protein_comp.grid(row=0, column=1, sticky="nsew")
|
||||||
|
|
||||||
|
self.carbohydrate_comp = ttk.LabelFrame(self.nutrient_comp_frame, text="Carbohydrate")
|
||||||
|
self.carbohydrate_comp.grid(row=0, column=2, sticky="nsew")
|
||||||
|
|
||||||
|
self.fat_comp = ttk.LabelFrame(self.nutrient_comp_frame, text="Fat")
|
||||||
|
self.fat_comp.grid(row=1, column=0, sticky="nsew")
|
||||||
|
|
||||||
|
self.sugar_comp =ttk.LabelFrame(self.nutrient_comp_frame, text="Sugar")
|
||||||
|
self.sugar_comp.grid(row=1, column=1, sticky="nsew")
|
||||||
# Filter components -----------------
|
# Filter components -----------------
|
||||||
|
|
||||||
# Search
|
# * Filter Drop Down
|
||||||
self.search_entry = ttk.Entry(self.filter_frame, textvariable=self.search_var)
|
ttk.Label(self.filter_frame, text = "Select the Country :").grid(column = 0,
|
||||||
self.search_entry.grid(row=0, column=3, padx=10, pady=10, sticky="nsew")
|
row = 0, padx = 2)
|
||||||
|
|
||||||
self.search_button = ttk.Button(self.filter_frame, text="Search", command=self.start_search)
|
|
||||||
self.search_button.grid(row=0, column=4, padx=10, pady=10, sticky="nsew")
|
|
||||||
|
|
||||||
# Filter
|
|
||||||
self.country_var = tk.StringVar()
|
self.country_var = tk.StringVar()
|
||||||
self.country_dropdown = ttk.Combobox(self.filter_frame, textvariable=self.country_var, values=["Any" ,"Thai", "Japan", "US"])
|
self.country_dropdown = ttk.Combobox(self.filter_frame, textvariable=self.country_var, values=["Any" ,"Thai", "Japan", "US"])
|
||||||
self.country_dropdown.grid(row=0, column=0, padx=10, pady=5, sticky="nsew")
|
self.country_dropdown.configure()
|
||||||
|
self.country_dropdown.grid(row=0, column=1, padx=10, pady=5, sticky="nsew")
|
||||||
|
|
||||||
|
# * Filter CheckBox
|
||||||
self.organic_var = tk.IntVar()
|
self.organic_var = tk.IntVar()
|
||||||
self.organic_checkbox = ttk.Checkbutton(self.filter_frame, text="Organic", variable=self.organic_var)
|
self.organic_checkbox = ttk.Checkbutton(self.checkbox_frame, text="Organic", variable=self.organic_var)
|
||||||
self.organic_checkbox.grid(row=1, column=0, padx=10, pady=5, sticky="nsew")
|
self.organic_checkbox.grid(row=1, column=0, padx=10, pady=5, sticky="nsew")
|
||||||
|
|
||||||
self.plant_based_var = tk.IntVar()
|
self.plant_based_var = tk.IntVar()
|
||||||
self.plant_based_checkbox = ttk.Checkbutton(self.filter_frame, text="Plant-Based", variable=self.plant_based_var)
|
self.plant_based_checkbox = ttk.Checkbutton(self.checkbox_frame, text="Plant-Based", variable=self.plant_based_var)
|
||||||
self.plant_based_checkbox.grid(row=2, column=0, padx=10, pady=5, sticky="nsew")
|
self.plant_based_checkbox.grid(row=2, column=0, padx=10, pady=5, sticky="nsew")
|
||||||
|
|
||||||
self.beverages_var = tk.IntVar()
|
self.beverages_var = tk.IntVar()
|
||||||
self.beverages_checkbox = ttk.Checkbutton(self.filter_frame, text="Beverages", variable=self.beverages_var)
|
self.beverages_checkbox = ttk.Checkbutton(self.checkbox_frame, text="Beverages", variable=self.beverages_var)
|
||||||
self.beverages_checkbox.grid(row=3, column=0, padx=10, pady=5, sticky="nsew")
|
self.beverages_checkbox.grid(row=3, column=0, padx=10, pady=5, sticky="nsew")
|
||||||
|
|
||||||
self.snack_var = tk.IntVar()
|
self.snack_var = tk.IntVar()
|
||||||
self.snack_checkbox = ttk.Checkbutton(self.filter_frame, text="Snack", variable=self.snack_var)
|
self.snack_checkbox = ttk.Checkbutton(self.checkbox_frame, text="Snack", variable=self.snack_var)
|
||||||
self.snack_checkbox.grid(row=4, column=0, padx=10, pady=5, sticky="nsew")
|
self.snack_checkbox.grid(row=4, column=0, padx=10, pady=5, sticky="nsew")
|
||||||
|
|
||||||
|
# * Filter Value filter
|
||||||
self.calories_var = tk.StringVar()
|
self.calories_var = tk.StringVar()
|
||||||
self.calories_entry = ttk.Entry(self.filter_frame, textvariable=self.calories_var)
|
self.calories_entry = ttk.Entry(self.calories_comp, textvariable=self.calories_var)
|
||||||
self.calories_entry.grid(row=5, column=0, padx=10, pady=5, sticky="nsew")
|
self.calories_entry.grid(row=3, column=0, padx=10, pady=5, sticky="nsew")
|
||||||
|
|
||||||
self.nutrient_var = tk.StringVar()
|
self.calories_more_op = tk.IntVar()
|
||||||
self.nutrient_dropdown = ttk.Combobox(self.filter_frame, textvariable=self.nutrient_var, values=["Protein", "Carbohydrates", "Fat", ""])
|
self.calories_op = ttk.Checkbutton(self.calories_comp, text="More than", variable=self.calories_more_op)
|
||||||
self.nutrient_dropdown.grid(row=6, column=0, padx=10, pady=5, sticky="nsew")
|
self.calories_op.grid(row=0, column=0, padx=10, pady=5, sticky="nsew")
|
||||||
|
|
||||||
self.nutrient_value_var = tk.StringVar()
|
self.calories_less_val = tk.IntVar()
|
||||||
self.nutrient_value_entry = ttk.Entry(self.filter_frame, textvariable=self.nutrient_value_var)
|
self.calories_op = ttk.Checkbutton(self.calories_comp, text="Less than", variable=self.calories_less_val)
|
||||||
self.nutrient_value_entry.grid(row=7, column=0, padx=10, pady=5, sticky="nsew")
|
self.calories_op.grid(row=1, column=0, padx=10, pady=5, sticky="nsew")
|
||||||
|
|
||||||
# Filter components (continued) -----------------
|
|
||||||
|
|
||||||
self.nutrient_operator_var = tk.StringVar()
|
|
||||||
self.nutrient_operator_dropdown = ttk.Combobox(self.filter_frame, textvariable=self.nutrient_operator_var, values=["<", ">", "="])
|
|
||||||
self.nutrient_operator_dropdown.grid(row=8, column=0, padx=10, pady=5, sticky="nsew")
|
|
||||||
|
|
||||||
# Image of food -----------------
|
# Image of food -----------------
|
||||||
|
|
||||||
self.image_frame = ttk.Frame(self.master, borderwidth=2, relief=tk.SUNKEN)
|
self.image_frame = ttk.Frame(self.master, borderwidth=2, relief=tk.SUNKEN)
|
||||||
self.image_frame.grid(row=2, column=0, padx=10, pady=10, sticky="nsew", rowspan=2)
|
self.image_frame.grid(row=2, column=0, padx=10, pady=10, sticky="nsew", rowspan=2)
|
||||||
self.image_frame.grid_propagate(1)
|
|
||||||
self.image_label = ttk.Label(self.image_frame)
|
self.image_label = ttk.Label(self.image_frame)
|
||||||
self.image_label.pack(fill=tk.BOTH, expand=True)
|
self.image_label.pack(fill=tk.BOTH, expand=True)
|
||||||
# Progress bar -----------------
|
# Progress bar -----------------
|
||||||
@ -119,11 +129,11 @@ class App:
|
|||||||
|
|
||||||
# Default image (Not Found) -----------------
|
# Default image (Not Found) -----------------
|
||||||
|
|
||||||
self.default_image_path = 'resources/notfound.png' # Replace with the correct path to your default image
|
self.default_image_path = 'resources/notfound.png'
|
||||||
self.default_image = ImageTk.PhotoImage(Image.open(self.default_image_path))
|
self.default_image = ImageTk.PhotoImage(Image.open(self.default_image_path))
|
||||||
self.default_image_label = ttk.Label(self.image_frame, image=self.default_image)
|
self.default_image_label = ttk.Label(self.image_frame, image=self.default_image)
|
||||||
# self.default_image_label.grid(row=0, column=0, padx=10, pady=10, sticky="nsew")
|
# self.default_image_label.grid(row=0, column=0, padx=10, pady=10, sticky="nsew")
|
||||||
self.default_image_label.pack(anchor='w', fill=tk.NONE)
|
self.default_image_label.pack(anchor='w', fill=tk.BOTH)
|
||||||
|
|
||||||
# Nutrient Frame
|
# Nutrient Frame
|
||||||
self.nutrient_frame = ttk.LabelFrame(self.master, text="Nutrient")
|
self.nutrient_frame = ttk.LabelFrame(self.master, text="Nutrient")
|
||||||
@ -133,11 +143,24 @@ class App:
|
|||||||
|
|
||||||
# Others Frame (Graph/Analyze)
|
# Others Frame (Graph/Analyze)
|
||||||
|
|
||||||
self.graph_frame = ttk.LabelFrame(self.master, text="Bar Macronutrients Graph")
|
self.graph_frame = ttk.LabelFrame(self.master, text="Bar Macronutrients Graph", width=350, height=300)
|
||||||
self.graph_frame.grid(row=0, column=2, padx=10, pady=10, sticky="nsew")
|
self.graph_frame.grid(row=0, column=2, padx=10, pady=10, sticky="nsew")
|
||||||
|
self.graph_frame.grid_propagate(0)
|
||||||
|
|
||||||
|
#* Option + Search
|
||||||
self.fullview = ttk.LabelFrame(self.master, text="Options")
|
self.fullview = ttk.LabelFrame(self.master, text="Options")
|
||||||
self.fullview.grid(row=1, column=2, padx=10, pady=10, sticky="nsew")
|
self.fullview.grid(row=2, column=2, padx=10, pady=10, sticky="nsew")
|
||||||
|
|
||||||
|
self.popup_plot = ttk.Button(self.fullview, text="Full Plot", command=self.plot_popup)
|
||||||
|
self.popup_plot.grid(row=1, column=1, padx=10, pady=10)
|
||||||
|
self.popup_plot.configure(state=tk.DISABLED)
|
||||||
|
|
||||||
|
# Search
|
||||||
|
self.search_entry = ttk.Entry(self.fullview, textvariable=self.search_var)
|
||||||
|
self.search_entry.grid(row=0, column=0, padx=10, pady=10, sticky="nsew")
|
||||||
|
|
||||||
|
self.search_button = ttk.Button(self.fullview, text="Search", command=self.start_search)
|
||||||
|
self.search_button.grid(row=0, column=1, padx=10, pady=10, sticky="nsew")
|
||||||
|
|
||||||
# * Configure the window size and position
|
# * Configure the window size and position
|
||||||
# self.master.attributes('-fullscreen', True)
|
# self.master.attributes('-fullscreen', True)
|
||||||
@ -152,11 +175,13 @@ class App:
|
|||||||
selection = widget.curselection()
|
selection = widget.curselection()
|
||||||
if selection:
|
if selection:
|
||||||
index = selection[0]
|
index = selection[0]
|
||||||
|
self.__curr_index = selection[0]
|
||||||
value = widget.get(index)
|
value = widget.get(index)
|
||||||
self.selected_item = value
|
self.selected_item = value
|
||||||
self.show_image(self.selected_item)
|
self.show_image(self.selected_item)
|
||||||
self.nutrient_table.nutrient_labeler(self.food_search.nutrient_show(self.selected_item))
|
self.nutrient_table.nutrient_labeler(self.food_search.nutrient_show(self.selected_item))
|
||||||
self.plot_preview(self.graph_frame, self.df, row_index=selection[0], nutrient_indices=[25, 26, 35, 17], g_type='bar')
|
self.plot_preview(self.graph_frame, self.df, row_index=selection[0], nutrient_indices=[25, 26, 35, 17], g_type='bar')
|
||||||
|
self.popup_plot.configure(state=tk.NORMAL)
|
||||||
|
|
||||||
# SEARCH FUNC
|
# SEARCH FUNC
|
||||||
|
|
||||||
@ -240,9 +265,19 @@ class App:
|
|||||||
self.p = plotter()
|
self.p = plotter()
|
||||||
self.p.nutrient_plotter(df, row_index, nutrient_indices, g_type, popup=False, frame=frame)
|
self.p.nutrient_plotter(df, row_index, nutrient_indices, g_type, popup=False, frame=frame)
|
||||||
|
|
||||||
def plot_popup(self, df, row_index: int, nutrient_indices: list, g_type: str):
|
def plot_popup(self):
|
||||||
self.p = plotter()
|
self.p = plotter()
|
||||||
self.p.nutrient_plotter(df, row_index, nutrient_indices, g_type, popup=True)
|
self.p.nutrient_plotter(self.df, self.__curr_index, [17,25, 32, 26, 18, 19, 38, 36, 23, 24], 'barpie')
|
||||||
|
|
||||||
|
# --------------------- Properties
|
||||||
|
|
||||||
|
@property
|
||||||
|
def getCurrIndex(self):
|
||||||
|
return self.__curr_index
|
||||||
|
|
||||||
|
@getCurrIndex.setter
|
||||||
|
def setCurrIndex(self, val):
|
||||||
|
self.__curr_index = val
|
||||||
|
|
||||||
class NutrientTableHolder:
|
class NutrientTableHolder:
|
||||||
def __init__(self, root):
|
def __init__(self, root):
|
||||||
@ -291,6 +326,7 @@ class NutrientTableHolder:
|
|||||||
'sugars_100g',
|
'sugars_100g',
|
||||||
'saturated-fat_100g',
|
'saturated-fat_100g',
|
||||||
'unsaturated-fat_100g',
|
'unsaturated-fat_100g',
|
||||||
|
'salt_100g',
|
||||||
'sodium_100g',
|
'sodium_100g',
|
||||||
'vitamin-a_100g',
|
'vitamin-a_100g',
|
||||||
'vitamin-c_100g',
|
'vitamin-c_100g',
|
||||||
@ -320,6 +356,7 @@ class NutrientTableHolder:
|
|||||||
treeview.pack(fill='both', expand=True)
|
treeview.pack(fill='both', expand=True)
|
||||||
|
|
||||||
root = tk.Tk()
|
root = tk.Tk()
|
||||||
|
root.deiconify()
|
||||||
app = App(root)
|
app = App(root)
|
||||||
app.results_listbox.bind('<<ListboxSelect>>', app.on_item_selected)
|
app.results_listbox.bind('<<ListboxSelect>>', app.on_item_selected)
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user