Skip to content

Instantly share code, notes, and snippets.

@skeltonmod
Last active April 22, 2021 14:34
Show Gist options
  • Save skeltonmod/61301da80f575fd2fd8a79438b491ef3 to your computer and use it in GitHub Desktop.
Save skeltonmod/61301da80f575fd2fd8a79438b491ef3 to your computer and use it in GitHub Desktop.
import tkinter as tk
from tkinter import ttk
from tkinter import DISABLED, NORMAL
from tkinter import messagebox
from PIL import ImageTk, Image
counter = 1
class Application(tk.Frame):
def __init__(self, master, **kw):
super().__init__(master, **kw)
self.ingredient = []
self.master = master
self.main_label = ttk.Label(self.master, text='Add Ingredients')
self.recipe_label = ttk.Label(self.master, text='Recipe Name: ')
self.recipe_entry = ttk.Entry(self.master, width=21)
self.ingredient_label = ttk.Label(self.master, text='Enter Ingredients: ')
self.ingredient_entry = ttk.Entry(self.master, width=21)
self.ingredient_list = tk.Listbox(self.master, height=11, selectmode='SINGLE')
self.add = ttk.Button(self.master, text='Add Ingredient', width=20, command=self.addIngredient)
self.delete = ttk.Button(self.master, text='Delete', width=20, command=self.delOne)
self.deleteAll = ttk.Button(self.master, text='Delete all', width=20, command=self.deleteAll)
self.exit = ttk.Button(self.master, text='Exit', width=20, command=self.bye)
self.pack()
self.create_widgets()
def create_widgets(self):
self.ingredient_label.place(x=50, y=50)
self.ingredient_entry.place(x=50, y=80)
self.add.place(x=50, y=110)
self.delete.place(x=50, y=140)
self.deleteAll.place(x=50, y=170)
self.exit.place(x=50, y=200)
self.ingredient_list.place(x=220, y=10)
self.recipe_label.place(x=-1, y=10)
self.recipe_entry.place(x=80, y=10)
def addIngredient(self):
global counter
word = self.ingredient_entry.get()
if len(word) == 0:
messagebox.showinfo('Empty Entry', 'Enter Ingredient name')
else:
self.ingredient.append(f"{counter}. {word}")
self.listUpdate()
counter += 1
self.ingredient_entry.delete(0, 'end')
self.recipe_entry.config(state=DISABLED)
def listUpdate(self):
self.clearList()
for i in self.ingredient:
self.ingredient_list.insert('end', i)
def delOne(self):
global counter
try:
counter -= 1
val = self.ingredient_list.get(self.ingredient_list.curselection())
if counter == 1:
self.recipe_entry.config(state=NORMAL)
if val in self.ingredient:
self.ingredient.remove(val)
self.listUpdate()
except:
messagebox.showinfo('Cannot Delete', 'No Ingredient Selected')
def deleteAll(self):
global counter
mb = messagebox.askyesno('Delete All', 'Are you sure?')
if mb:
while len(self.ingredient) != 0:
self.ingredient.pop()
self.listUpdate()
counter = 1
self.recipe_entry.config(state=NORMAL)
def clearList(self):
self.ingredient_list.delete(0, 'end')
def bye(self):
print(self.ingredient)
self.master.destroy()
if __name__ == "__main__":
root = tk.Tk()
root.title("Recipe Maker")
root.geometry("400x250+500+300")
icon = ImageTk.PhotoImage(Image.open("favicon.ico"))
root.iconphoto(False, icon)
app = Application(root)
app.mainloop()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment