I uploaded the window_2 part of the code, without the background image because that is where the Listbox is used.
Here is the full code.
window_2 starts at line 54. The Listbox code is at line 332.
import os
##import tkinter
import sqlite3
##import win32print
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
#===================================== MAIN ====================================
def main():
#============================= CONNECT TO DATABASE =============================
conn = sqlite3.connect('Recipe.db')
c = conn.cursor()
#========================= CREATE DATABASE WITH TABLES =========================
c.execute('''CREATE TABLE IF NOT EXISTS Recipes(
Dish_Type CHAR(50),
Recipe CHAR(50),
Cook_Time CHAR(15),
Serves CHAR(8),
Ingredients CHAR(10000) ,
Instructions CHAR(10000));''')
conn.commit()
c.execute('''CREATE TABLE IF NOT EXISTS Version(
Welcome Decimal(10));''')
conn.commit()
c.execute('''CREATE TABLE IF NOT EXISTS Welcome(
Welcome TEXT(2500));''')
conn.commit()
#================================= MAIN WINDOW =================================
root = tkinter.Tk()
root.title('Recipes')
image1 =tkinter.PhotoImage(file='Menu.gif')
w = 1024
h = 612
ws = root.winfo_screenwidth()
hs = root.winfo_screenheight()
x = (ws/2) - (w/2)
y = (hs/2) - (h/2)
root.geometry('%dx%d+%d+%d' % (w, h, x, y))
panel1 =tkinter.Label(root, image=image1)
panel1.pack(side='top', fill='both', expand='yes')
panel1.image = image1
root.wm_iconbitmap('recipe.ico')
class OpenButton(Widget):
'''Button widget.'''
def __init__(self, master=None, cnf={}, **kw):
start_button = tkinter.Button(root, text='Open',
font='Times 12 bold italic', border = 2, bd=5, bg = '#F9F8D6',
fg = '#9A0615', width = 10, height = 2, overrelief='raised',
command = window_2)
start_button.place(x=448, y=461)
#================================== WINDOW 2 ===================================
def window_2():
root.destroy()
window_2 = tkinter.Tk()
image2 = 'window2.gif'
bg_image2 = tkinter.PhotoImage(file=image2)
w = 1024
h = 612
ws = window_2.winfo_screenwidth()
hs = window_2.winfo_screenheight()
x = (ws/2) - (w/2)
y = (hs/2) - (h/2)
window_2.geometry('%dx%d+%d+%d' % (w, h, x, y))
panel2 =tkinter.Label(window_2, image=bg_image2)
panel2.pack(side='top', fill='both', expand='yes')
panel2.image = bg_image2
window_2.title('Recipes')
window_2.resizable(0,0)
window_2.wm_iconbitmap('recipe.ico')
#============================== GET RECIPE QUERY ===============================
def getRecipe(event):
Dish_Type = StringVar()
Recipe = StringVar()
Cook_Time = StringVar()
Serves = StringVar()
#================================== WINDOW 3 ===================================
def back_page():
window_2.deiconify()
window_3.destroy()
window_3 = tkinter.Toplevel()
window_3.title('Recipes')
window_3.resizable(0,0)
window_3.wm_iconbitmap('recipe.ico')
w = 1024
h = 612
ws = window_3.winfo_screenwidth()
hs = window_3.winfo_screenheight()
x = (ws/2) - (w/2)
y = (hs/2) - (h/2)
window_3.geometry('%dx%d+%d+%d' % (w, h, x, y))
image3 = 'window3.gif'
bg_image3 = tkinter.PhotoImage(file=image3)
panel3 = Label(window_3, image=bg_image3)
panel3.pack(side='top', fill='both', expand='yes')
panel3.image = bg_image3
window_3.title('Recipes')
window_3.wm_iconbitmap('recipe.ico')
window_3.protocol('WM_DELETE_WINDOW', window_3)
#================================= SAVE RECIPE =================================
def Save():
window_2.iconify()
try:
saveInput = Recipe.get()
c.execute('SELECT Recipe FROM Recipes WHERE Recipe = :saveInput',
{'saveInput': saveInput})
conn.commit()
saveResult = c.fetchone()
if saveResult == None:
c.execute('''INSERT INTO Recipes VALUES (?,?,?,?,?,?)''',
(Dish_Type.get(), (Recipe.get()),
(Cook_Time.get()), (Serves.get()), (ingred.get(1.0, END)),
(instruct.get(1.0, END))))
conn.commit()
messagebox.showinfo('Recipes','Recipe saved successfully.')
dish_type_entry.delete(0, END)
recipe_entry.delete(0,END)
cook_time_entry.delete(0,END)
serves_entry.delete(0,END)
ingred.delete(1.0,END)
instruct.delete(1.0,END)
else:
messagebox.showinfo('Recipes',
'That recipe name already exists in the database.')
except:
messagebox.showerror('Recipes','Database Error.')
#================================ CLOSE PROGRAM ================================
def exit():
window_2.destroy()
#================================ DELETE RECIPE ================================
def delete():
try:
checkInput = Recipe.get()
c.execute('SELECT Recipe FROM Recipes WHERE Recipe = :checkInput',
{'checkInput': checkInput})
conn.commit()
theResult = c.fetchone()
if theResult == None:
messagebox.showinfo('Recipes',
'That recipe name does not exist in the database.')
recipe_entry.delete(0,END)
else:
MsgBox = messagebox.askyesno('Recipes',
'Are you sure you want to delete this recipe?',
icon = 'warning')
if MsgBox == True:
messagebox.showinfo('Recipes',
'The recipe will now be delete.')
c.execute('DELETE FROM Recipes WHERE Recipe =:checkInput',
{'checkInput': checkInput})
conn.commit()
messagebox.showinfo('Recipes',
'The recipe has been deleted successfully.')
recipe_entry.delete(0,END)
else:
messagebox.showinfo('Recipes',
'Delete has been cancelled.')
recipe_entry.delete(0,END)
except:
messagebox.showerror('Recipes','Database Error.')
#================================ TAB KEY FOCUS ================================
def focus_next_window(event):
event.widget.tk_focusNext().focus()
return("break")
#=============================== FRAME 3 WIDGETS ===============================
window_2.iconify()
dish_type = tkinter.Label(window_3, font=('Times 9 bold'),
text='Category:', bg = '#FFD599', fg = '#9A0615')
dish_type.place(x=210, y=125)
dish_type_entry = tkinter.Entry(window_3, textvariable=Dish_Type,
width = 30, bg = '#FFD599', fg = '#9A0615', justify=CENTER)
dish_type_entry.place(x=275, y=126)
dish_type_entry.focus()
recipe = tkinter.Label(window_3, font=('Times 9 bold'),
text='Recipe:', bg = '#FFD599', fg = '#9A0615')
recipe.place(x=210, y=145)
recipe_entry = tkinter.Entry(window_3, textvariable=Recipe,
width = 30, bg = '#FFD599', fg = '#9A0615', justify=CENTER)
recipe_entry.place(x=275, y=146)
serves = tkinter.Label(window_3, font=('Times 9 bold'),
text='Serves:', bg = '#FFD599', fg = '#9A0615')
serves.place(x=547, y=125)
serves_entry = tkinter.Entry(window_3, textvariable=Serves,
width = 8, bg = '#FFD599', fg = '#9A0615', justify=CENTER)
serves_entry.place(x=623, y=126)
cook_time = tkinter.Label(window_3, font=('Times 9 bold'),
text='Cook Time:', bg = '#FFD599', fg = '#9A0615')
cook_time.place(x=547, y=145)
cook_time_entry = tkinter.Entry(window_3, textvariable=Cook_Time,
width = 12, bg = '#FFD599', fg = '#9A0615', justify=CENTER)
cook_time_entry.place(x=623, y=146)
ingred = tkinter.Text(window_3, font=('Times 10'), height = 20,
width=40, bd=1, bg = '#FFD599', fg = '#9A0615',padx=5, pady=5)
ingred.place(x=210, y=195)
ingred.bind("<Tab>", focus_next_window)
yscroll3 = tkinter.Scrollbar(window_3, command=ingred.yview,
orient=tkinter.VERTICAL)
yscroll3.place(x=461, y=195)
ingred.configure(yscrollcommand=yscroll3.set)
instruct = tkinter.Text(window_3, font=('Times 10'), height = 20,
width=40, bd=1, bg = '#FFD599', fg = '#9A0615',padx=5, pady=5)
instruct.place(x=547, y=195)
yscroll4 = tkinter.Scrollbar(window_3, command=instruct.yview,
orient=tkinter.VERTICAL)
yscroll4.place(x=798, y=195)
instruct.configure(yscrollcommand=yscroll4.set)
saveButton = tkinter.Button(window_3, text='Save a Recipe',
font='Times 9 bold italic', border = 1, height = 1, width = 11,
bd=4, bg = '#F9F8D6', fg = '#9A0615', command = Save)
saveButton.place(x=215, y=514)
deleteButton = tkinter.Button(window_3, text='Delete a Recipe',
font='Times 9 bold italic', border = 1, height = 1, width = 11,
bd=4, bg = '#F9F8D6', fg = '#9A0615', command = delete)
deleteButton.place(x=337, y=514)
printButton = tkinter.Button(window_3, text='Print Recipe',
font='Times 9 bold italic', border = 1, height = 1, width = 11,
bd=4, bg = '#F9F8D6', fg = '#9A0615', command = printer)
printButton.place(x=459, y=514)
backButton = tkinter.Button(window_3, text='Back a Page',
font='Times 9 bold italic', border = 1, height = 1, width = 11,
bd=4, bg = '#F9F8D6', fg = '#9A0615', command = back_page)
backButton.place(x=581, y=514)
exitButton = tkinter.Button(window_3, text='Exit Program',
font='Times 9 bold italic', border = 1, height = 1, width = 11,
bd=4, bg = '#F9F8D6', fg = '#9A0615', command = exit)
exitButton.place(x=703, y=514)
try:
dish_type_entry.delete(0,END)
index = output.curselection()
selected = output.get(index)
c.execute('SELECT Dish_Type FROM Recipes WHERE Recipe = :selected',
{'selected': selected})
dish_type_result = c.fetchone()
dish_type_entry.insert(0,dish_type_result[0])
recipe_entry.delete(0,END)
index = output.curselection()
selected = output.get(index)
c.execute('SELECT Recipe FROM Recipes WHERE Recipe = :selected',
{'selected': selected})
recipe_result = c.fetchone()
recipe_entry.insert(0,recipe_result[0])
serves_entry.delete(0,END)
index = output.curselection()
selected = output.get(index)
c.execute('SELECT Serves FROM Recipes WHERE Recipe = :selected',
{'selected': selected})
serves_result = c.fetchone()
serves_entry.insert(0,serves_result[0])
cook_time_entry.delete(0,END)
index = output.curselection()
selected = output.get(index)
c.execute('SELECT Cook_Time FROM Recipes WHERE Recipe = :selected',
{'selected': selected})
cook_time_result = c.fetchone()
cook_time_entry.insert(0,cook_time_result[0])
index = output.curselection()
selected = output.get(index)
c.execute('SELECT Ingredients FROM Recipes WHERE Recipe = :selected',
{'selected': selected})
ingredients_result = c.fetchone()
ingred.insert(1.0,ingredients_result[0])
ingred.config(wrap=WORD)
index = output.curselection()
selected = output.get(index)
c.execute('SELECT Instructions FROM Recipes WHERE Recipe = :selected',
{'selected': selected})
instructions_result = c.fetchone()
instruct.insert(1.0, instructions_result[0])
instruct.config(wrap=WORD)
except:
pass
## messagebox.showerror('DataBase Error', 'Failed to load category')
#=========================== MODULE 2 CLEAR INPUT ==============================
def clear1():
output.delete(0,END)
#================================ SELECT QUERY =================================
def select():
try:
output.delete(0, END)
selection = var.get()
c.execute('SELECT Recipe FROM Recipes WHERE Dish_Type = :selection',
{'selection': selection})
results = c.fetchall()
for recipe, in results:
output.insert(0,recipe)
except:
messagebox.showerror('Recipes', 'Failed to load category')
#================================ OPTION MENU ==================================
var = tkinter.StringVar(window_2)
var.set('Category')
choices = [
'Appetizers',
'Beef',
'Beverages',
'Bakery',
'Desserts',
'Eggs',
'Lamb',
'Pasta',
'Pork',
'Potato',
'Poultry',
'Rice',
'Salads',
'Sandwiches',
'Sauces/Dips',
'Sea Food',
'Slow Cooker',
'Soups/Chili',
'Stews',
'Sushi',
'Vegetables',
'Vegetarian',
'Wild Game']
option = tkinter.OptionMenu(window_2, var, *choices)
option.config(font=('Times 9 bold'), bg = '#F9F8D6', fg = '#9A0615')
option.place(x=210, y=136)
option['menu'].config(bg = '#F9F8D6', fg = '#9A0615')
backer = tkinter.Label(window_2, font=('Times 16 bold'),
text=' ')
backer.place(x=360, y=137)
button = tkinter.Button(window_2, text='Load Category',
font=('Times 9 bold'), bg = '#F9F8D6', fg = '#9A0615', command=select)
button.place(x=362, y=139)
#=================================== WINDGETS ==================================
output = tkinter.Listbox(window_2, font=('Times 10'), height = 20,
width=42, bd=1, bg = '#FFD599', fg = '#9A0615', selectmode=SINGLE)
output.place(x=210, y=195)
yscroll1 = tkinter.Scrollbar(command=output.yview,
orient=tkinter.VERTICAL)
yscroll1.place(x=463, y=196)
output.configure(yscrollcommand=yscroll1.set)
output.bind('<ButtonRelease-1>', getRecipe)
instructions = tkinter.Text(window_2, font=('Times 10'), height = 21,
width=42, bd=1, bg = '#FFD599', fg = '#9A0615',padx=5, pady=5)
instructions.place(x=547, y=195)
yscroll2 = tkinter.Scrollbar(command=instructions.yview,
orient=tkinter.VERTICAL)
yscroll2.place(x=810, y=196)
instructions.configure(yscrollcommand=yscroll2.set)
enterButton = tkinter.Button(window_2, text='Enter a Recipe',
font='Times 9 bold italic', border = 1, height = 1, width = 12, bd=3,
bg = '#F9F8D6', fg = '#9A0615')
enterButton.place(x=293, y=525)
enterButton.bind('<Button-1>', getRecipe)
clear1Button = tkinter.Button(window_2, text='Clear Page',
font='Times 9 bold italic', border = 1, height = 1, width = 12, bd=3,
bg = '#F9F8D6', fg = '#9A0615', command = clear1)
clear1Button.place(x=630, y=525)
#================================ WELCOME PANE =================================
c.execute('SELECT * FROM Welcome WHERE welcome = Welcome')
welcome_result2 = c.fetchall()
for welcome_result in welcome_result2:
instructions.insert(1.0,welcome_result[0])
instructions.config(wrap=WORD, state=DISABLED)
OpenButton()
root.mainloop()
if __name__ == '__main__':
main()
"Often stumped... But never defeated."