I have managed to program a simple python weather forecast that returns the weather results of the city which you entered. I followed a tutorial on Youtube.
I need your help to create a selecting menu for countries and cities that open weather supports. My instructor demanded me to make a choice menu instead of simple search bar.
I intended to approach the problem by creating json files that contain cities and their longitude, latitude. Each countries will have their own files. I can call the data from json files but I'm stumped on how to make the menu because I just started on IT and this is my first big project so I'd be delighted if you could help me solve it.
from string import capwords
import json
import PIL
import requests
from tkinter import *
import tkinter as tk
from tkinter import ttk, messagebox
from PIL import ImageTk
from PIL import Image
from geopy.geocoders import Nominatim
from datetime import *
import pytz
from timezonefinder import TimezoneFinder
root = Tk()
root.title("MerryWeather")
root.geometry("1000x500+300+300")
root.configure(bg = "#57adff")
root.resizable(False, False)
#Get weather information
def getWeather():
##Get timezone
city = searchText.get()
##Get city's coordinate
complete_api_link = "https://api.openweathermap.org/data/2.5/weather?q="+city+"&appid=####"
api_link = requests.get(complete_api_link)
api_data = api_link.json()
lonposition = api_data['coord']['lon']
latposition = api_data['coord']['lat']
long_lat.config(text = f"{round(latposition,4)}°N, {round(lonposition,4)}°E")
##Get current local time
obj = TimezoneFinder()
result = obj.timezone_at(lng = lonposition, lat = latposition)
timeZone.config(text = result)
local_time = pytz.timezone(result)
localTime = datetime.now(local_time)
currentTime = localTime.strftime("%I:%M %p")
clock.config(text = currentTime)
##Get weather information
apiURL = "https://api.openweathermap.org/data/2.5/onecall?lat="+str(latposition)+"&lon="+str(lonposition)+"&appid=####"
json_data = requests.get(apiURL).json()
temp = json_data['current']['temp'] - 273.15
humidity = json_data['current']['humidity']
pressure = json_data['current']['pressure']
wind_spd = json_data['current']['wind_speed']
weather_desc = json_data['current']['weather'][0]['description']
t.config(text = ("{:.2f}°C".format(temp)))
h.config(text = (humidity, "%"))
p.config(text = (pressure, "hPa"))
w.config(text = (wind_spd, "m/s"))
d.config(text = capwords(weather_desc))
##Show weekdays
###Day 1 info
first = datetime.now()
day1.config(text = first.strftime("%A"))
firsticon = json_data['daily'][0]['weather'][0]['icon']
icon1 = Image.open(f"images/{firsticon}.png")
resized1 = icon1.resize((130,130))
icon1r = ImageTk.PhotoImage(resized1)
day1icon.config(image = icon1r)
day1icon.image = icon1r
tempday1 = json_data['daily'][0]['temp']['day'] - 273.15
tempnight1 = json_data['daily'][0]['temp']['night'] - 273.15
day1temp.config(text = ("Day: {:.2f}°C\n".format(tempday1) + "Night: {:.2f}°C".format(tempnight1)))
###Day 2 info
second = first + timedelta(days = 1)
day2.config(text = second.strftime("%A"))
secondicon = json_data['daily'][1]['weather'][0]['icon']
icon2 = Image.open(f"images/{secondicon}.png")
resized2 = icon2.resize((80,80))
icon2r = ImageTk.PhotoImage(resized2)
day2icon.config(image = icon2r)
day2icon.image = icon2r
tempday2 = json_data['daily'][1]['temp']['day'] - 273.15
tempnight2 = json_data['daily'][1]['temp']['night'] - 273.15
day2temp.config(text = ("Day: {:.2f}°C\n".format(tempday2) + "Night: {:.2f}°C".format(tempnight2)))
###Day 3 info
third = first + timedelta(days = 2)
day3.config(text = third.strftime("%A"))
thirdicon = json_data['daily'][2]['weather'][0]['icon']
icon3 = Image.open(f"images/{thirdicon}.png")
resized3 = icon3.resize((80,80))
icon3r = ImageTk.PhotoImage(resized3)
day3icon.config(image = icon3r)
day3icon.image = icon3r
tempday3 = json_data['daily'][2]['temp']['day'] - 273.15
tempnight3 = json_data['daily'][2]['temp']['night'] - 273.15
day3temp.config(text = ("Day: {:.2f}°C\n".format(tempday3) + "Night: {:.2f}°C".format(tempnight3)))
###Day 4 info
fourth = first + timedelta(days = 3)
day4.config(text = fourth.strftime("%A"))
fourthicon = json_data['daily'][3]['weather'][0]['icon']
icon4 = Image.open(f"images/{fourthicon}.png")
resized4 = icon4.resize((80,80))
icon4r = ImageTk.PhotoImage(resized4)
day4icon.config(image = icon4r)
day4icon.image = icon4r
tempday4 = json_data['daily'][3]['temp']['day'] - 273.15
tempnight4 = json_data['daily'][3]['temp']['night'] - 273.15
day4temp.config(text = ("Day: {:.2f}°C\n".format(tempday4) + "Night: {:.2f}°C".format(tempnight4)))
###Day 5 info
fifth = first + timedelta(days = 4)
day5.config(text = fifth.strftime("%A"))
fifthicon = json_data['daily'][4]['weather'][0]['icon']
icon5 = Image.open(f"images/{fifthicon}.png")
resized5 = icon5.resize((80,80))
icon5r = ImageTk.PhotoImage(resized5)
day5icon.config(image = icon5r)
day5icon.image = icon5r
tempday5 = json_data['daily'][4]['temp']['day'] - 273.15
tempnight5 = json_data['daily'][4]['temp']['night'] - 273.15
day5temp.config(text = ("Day: {:.2f}°C\n".format(tempday5) + "Night: {:.2f}°C".format(tempnight5)))
###Day 6 info
sixth = first + timedelta(days = 5)
day6.config(text = sixth.strftime("%A"))
sixthicon = json_data['daily'][5]['weather'][0]['icon']
icon6 = Image.open(f"images/{sixthicon}.png")
resized6 = icon6.resize((80,80))
icon6r = ImageTk.PhotoImage(resized6)
day6icon.config(image = icon6r)
day6icon.image = icon6r
tempday6 = json_data['daily'][5]['temp']['day'] - 273.15
tempnight6 = json_data['daily'][5]['temp']['night'] - 273.15
day6temp.config(text = ("Day: {:.2f}°C\n".format(tempday6) + "Night: {:.2f}°C".format(tempnight6)))
###Day 7 info
seventh = first + timedelta(days = 6)
day7.config(text = seventh.strftime("%A"))
seventhicon = json_data['daily'][6]['weather'][0]['icon']
icon7 = Image.open(f"images/{seventhicon}.png")
resized7 = icon7.resize((80,80))
icon7r = ImageTk.PhotoImage(resized7)
day7icon.config(image = icon7r)
day7icon.image = icon7r
tempday7 = json_data['daily'][6]['temp']['day'] - 273.15
tempnight7 = json_data['daily'][6]['temp']['night'] - 273.15
day7temp.config(text = ("Day: {:.2f}°C\n".format(tempday7) + "Night: {:.2f}°C".format(tempnight7)))
#Interface
##Icon
image_icon = PhotoImage(file="images/01d.png")
root.iconphoto(False, image_icon)
##Current weather stats
Round_box1 = PhotoImage(file="images/rounded_bg1.png")
Label(root, image = Round_box1, bg = "#57adff").place(x = 30, y = 110)
temp = Label(root, text = "Temperature:", font = ('Helvetica', 11), fg = "white", bg = "#002167").place(x = 40, y = 115)
t = Label(root, font = ('Helvetica', 11), fg = "white", bg = "#002167")
t.place(x = 131, y = 115)
humid = Label(root, text = "Humidity :", font = ('Helvetica', 11), fg = "white", bg = "#002167").place(x = 40, y = 135)
h = Label(root, font = ('Helvetica', 11), fg = "white", bg = "#002167")
h.place(x = 131, y = 135)
pressure = Label(root, text = "Pressure :", font = ('Helvetica', 11), fg = "white", bg = "#002167").place(x = 40, y = 155)
p = Label(root, font = ('Helvetica', 11), fg = "white", bg = "#002167")
p.place(x = 131, y = 155)
wind = Label(root, text = "Wind speed :", font = ('Helvetica', 11), fg = "white", bg = "#002167").place(x = 40, y = 175)
w = Label(root, font = ('Helvetica', 11), fg = "white", bg = "#002167")
w.place(x = 131, y = 175)
desc = Label(root, text = "Description :", font = ('Helvetica', 11), fg = "white", bg = "#002167").place(x = 40, y = 195)
d = Label(root, font = ('Helvetica', 11), fg = "white", bg = "#002167")
d.place(x = 131, y = 195)
##City search box
searchField = PhotoImage(file="images/rounded_bg2.png")
search_field = Label(root, image = searchField, bg = "#57adff").place(x = 287, y = 130)
searchText = tk.Entry(root, justify = 'center', width = 15, font = ('Helvetica', 25, 'bold'), bg = "#414141", border = 0, fg = 'white')
searchText.place(x = 497, y = 150)
searchText.focus()
weatIcon = PhotoImage(file="images/logo.png")
weat_icon = Label(root, image = weatIcon, bg = "#414141").place(x = 317, y = 135)
searchIcon = PhotoImage(file="images/search.png")
search_icon = Button(root, image = searchIcon, borderwidth = 0, cursor = "hand2", bg = "#414141", command = getWeather).place(x = 887, y = 137)
##Big forecast box
bottomFrame = Frame(root, width = 1000, height = 200, bg = "#57adff")
bottomFrame.pack(side = BOTTOM)
Round_box3 = PhotoImage(file="images/rounded_bg3.png")
Label(bottomFrame, image = Round_box3, bg = "#57adff").place(x = -2, y = -5)
##Today weather box
todayWeat = PhotoImage(file="images/weather_box1.png")
Label(bottomFrame, image = todayWeat, bg = "#002060").place(x = 30, y = 23)
##Weather forecast box
weatForeBox = PhotoImage(file="images/weather_box2.png")
for x in range(6):
Label(bottomFrame, image=weatForeBox, bg="#002060").place(x=300 + x*115, y=23)
##Cell
###1st cell
first_cell = Frame(root, width = 240, height = 140, bg = "#303030").place(x = 37, y = 330)
day1icon = Label(root, bg = "#303030")
day1icon.place(x = 40, y = 330)
day1 = Label(root, font = ("Helvetica", 15), fg = "white", bg = "#303030")
day1.place(x = 165, y = 333)
day1temp = Label(root, font = ("Helvetica", 13), fg = "white", bg = "#303030")
day1temp.place(x = 161, y = 380)
###2nd cell
second_cell = Frame(root, width = 90, height = 140, bg = "#303030").place(x = 307, y = 330)
day2icon = Label(root, bg = "#303030")
day2icon.place(x = 310, y = 350)
day2 = Label(root, font = ("Helvetica", 11), fg = "white", bg = "#303030")
day2.place(x = 310, y = 333)
day2temp = Label(root, font = ("Helvetica", 10), fg = "white", bg = "#303030")
day2temp.place(x = 307, y = 430)
###3rd cell
third_cell = Frame(root, width = 90, height = 140, bg = "#303030").place(x = 422, y = 330)
day3icon = Label(root, bg = "#303030")
day3icon.place(x = 425, y = 350)
day3 = Label(root, font = ("Helvetica", 11), fg = "white", bg = "#303030")
day3.place(x = 425, y = 333)
day3temp = Label(root, font = ("Helvetica", 10), fg = "white", bg = "#303030")
day3temp.place(x = 422, y = 430)
###4th cell
fourth_cell = Frame(root, width = 90, height = 140, bg = "#303030").place(x = 537, y = 330)
day4icon = Label(root, bg = "#303030")
day4icon.place(x = 540, y = 350)
day4 = Label(root, font = ("Helvetica", 11), fg = "white", bg = "#303030")
day4.place(x = 540, y = 333)
day4temp = Label(root, font = ("Helvetica", 10), fg = "white", bg = "#303030")
day4temp.place(x = 537, y = 430)
###5th cell
fifth_cell = Frame(root, width = 90, height = 140, bg = "#303030").place(x = 652, y = 330)
day5icon = Label(root, bg = "#303030")
day5icon.place(x = 655, y = 350)
day5 = Label(root, font = ("Helvetica", 11), fg = "white", bg = "#303030")
day5.place(x = 655, y = 333)
day5temp = Label(root, font = ("Helvetica", 10), fg = "white", bg = "#303030")
day5temp.place(x = 652, y = 430)
###6th cell
sixth_cell = Frame(root, width = 90, height = 140, bg = "#303030").place(x = 767, y = 330)
day6icon = Label(root, bg = "#303030")
day6icon.place(x = 770, y = 350)
day6 = Label(root, font = ("Helvetica", 11), fg = "white", bg = "#303030")
day6.place(x = 770, y = 333)
day6temp = Label(root, font = ("Helvetica", 10), fg = "white", bg = "#303030")
day6temp.place(x = 767, y = 430)
###7th cell
seventh_cell = Frame(root, width = 90, height = 140, bg = "#303030").place(x = 882, y = 330)
day7icon = Label(root, bg = "#303030")
day7icon.place(x = 885, y = 350)
day7 = Label(root, font = ("Helvetica", 11), fg = "white", bg = "#303030")
day7.place(x = 885, y = 333)
day7temp = Label(root, font = ("Helvetica", 10), fg = "white", bg = "#303030")
day7temp.place(x = 882, y = 430)
##Time
clock = Label(root, font = ("Helvetica", 30, 'bold'), fg = "white", bg = "#57adff")
clock.place(x = 40, y =20)
##Timezone
timeZone = Label(root, font = ("Helvetica", 20), fg = "white", bg = "#57adff")
timeZone.place(x = 700, y = 20)
long_lat = Label(root, font = ("Helvetica", 10), fg = "white", bg = "#57adff")
long_lat.place(x = 700, y = 50)
#Launch
root.mainloop()
I'm also aware that my coding is horrendously unoptimized but as I said, I'm a newborn in this major so I can't modify it much without breaking everything and have to play "wack-a-mole" with bugs so any suggestion on how to optimize the program is also welcomed
Related
from tkinter import *
import time
def checkTime():
if len(hourInput.get()) != 0 and len(minuteInput.get()) != 0 and len(secondInput.get()) != 0:
if hourInput.get() == time.strftime("%H"):
print("good")
window.after(500, checkTime)
def pressButton(button):
button.config(relief=SUNKEN)
if __name__=='__main__':
window = Tk()
window.geometry("1920x1080")
canvas = Canvas(window, width = 1980, height = 1020)
canvas.pack()
hourInput = StringVar()
minuteInput = StringVar()
secondInput = StringVar()
setHour = Entry(window, text = hourInput, font = (20))
setHour.place(x = 100, y = 20, width = 100, height = 40)
setMinute = Entry(window, text = minuteInput, font = (20))
setMinute.place(x = 300, y = 20, width = 100, height = 40)
setSecond = Entry(window, text = secondInput, font = (20))
setSecond.place(x = 500, y = 20, width = 100, height = 40)
canvas.create_text(60, 40, text = "Hour: ", font = (20))
canvas.create_text(260, 40, text = "Minute: ", font = (20))
canvas.create_text(460, 40, text = "Second: ", font = (20))
submit = Button(text = "Submit", height = 2, width = 10, font = (10))
submit.config(command = lambda submit=submit:pressButton(submit))
submit.place(x = 100, y = 100)
checkTime()
window.mainloop()
I want the function checkTime() to be called when my button is pressed. But how to get the status of my button and compare it ? I want to use the function only if the button is pressed as a test that the user agree with his inputs
You can modify the button declaration as follows so that the checkTime() will trigger when the button is pressed.
submit = Button(text = "Submit", height = 2, width = 10, font = (10), relief=SUNKEN)
submit['command'] = checkTime # no parentheses here
Also make sure that the checkTime() method call in the bottom is removed
I put the function checkTime() inside the pressButton() function, and now the program works fine.
from tkinter import *
import time
def checkTime():
if len(hourInput.get()) != 0 and len(minuteInput.get()) != 0 and len(secondInput.get()) != 0:
if hourInput.get() == time.strftime("%H"):
print("good")
window.after(500, checkTime)
def pressButton(button):
button.config(relief = SUNKEN)
checkTime()
if __name__== '__main__':
window = Tk()
window.geometry("1920x1080")
canvas = Canvas(window, width = 1980, height = 1020)
canvas.pack()
hourInput = StringVar()
minuteInput = StringVar()
secondInput = StringVar()
setHour = Entry(window, text = hourInput, font = (20))
setHour.place(x = 100, y = 20, width = 100, height = 40)
setMinute = Entry(window, text = minuteInput, font = (20))
setMinute.place(x = 300, y = 20, width = 100, height = 40)
setSecond = Entry(window, text = secondInput, font = (20))
setSecond.place(x = 500, y = 20, width = 100, height = 40)
canvas.create_text(60, 40, text = "Hour: ", font = (20))
canvas.create_text(260, 40, text = "Minute: ", font = (20))
canvas.create_text(460, 40, text = "Second: ", font = (20))
submit = Button(text = "Submit", height = 2, width = 10, font = (10))
submit.config(command = lambda submit=submit:pressButton(submit))
submit.place(x = 100, y = 100)
window.mainloop()
from tkinter import *
import time
check = False
window = Tk()
window.geometry("1920x1080")
def typeTime():
hour = int(time.strftime("%H"))
minute = int(time.strftime("%M"))
second = int(time.strftime("%S"))
hourInput2 = int(hourInput.get())
minuteInput2 = int(minuteInput.get())
secondInput2 = int(secondInput.get())
if(hour == hourInput2 and minute == minuteInput2 and second == secondInput2):
print("now")
global check
check = True
canvas = Canvas(window, width = 1980, height = 1020)
canvas.pack()
hourInput = StringVar()
minuteInput = StringVar()
secondInput = StringVar()
setHour = Entry(window, text = hourInput, font = (20)).place(x = 100, y = 20, width = 100, height = 40)
setMinute = Entry(window, text = minuteInput, font = (20)).place(x = 300, y = 20, width = 100, height = 40)
setSecond = Entry(window, text = secondInput, font = (20)).place(x = 500, y = 20, width = 100, height = 40)
canvas.create_text(60, 40, text = "Hour: ", font = (20))
canvas.create_text(260, 40, text = "Minute: ", font = (20))
canvas.create_text(460, 40, text = "Second: ", font = (20))
submit = Button(text = "Submit", height = 2, width = 10, font = (10), command = typeTime)
submit.place(x = 100, y = 100)
if check == True:
print("Pressed")
submit.config(relief = SUNKEN)
window.mainloop()
I'm trying to make a button to stay pressed, so I tried to make this happens with a global variable. The variable check is initially False, but when typeTime() is called via the submit object it should change its value in True and when check will be tested later to keep my button pressed using config method.
What am I doing wrong, as neither the button is still pressed nor the message "Pressed" is displayed in the console ?
The window.mainloop() is the internal loop inside object window, not in your script so that is why it didn't work. You need to add the action inside the function typeTime:
from tkinter import *
import time
if __name__=='__main__':
check = False
window = Tk()
window.geometry("1920x1080")
def typeTime(button):
hour = int(time.strftime("%H"))
minute = int(time.strftime("%M"))
second = int(time.strftime("%S"))
hourInput2 = int(hourInput.get())
minuteInput2 = int(minuteInput.get())
secondInput2 = int(secondInput.get())
if(hour == hourInput2 and minute == minuteInput2 and second == secondInput2):
print("now")
# global check
# check = True
print('Pressed')
button.config(relief=SUNKEN)
canvas = Canvas(window, width = 1980, height = 1020)
canvas.pack()
hourInput = StringVar()
minuteInput = StringVar()
secondInput = StringVar()
setHour = Entry(window, text = hourInput, font = (20)).place(x = 100, y = 20, width = 100, height = 40)
setMinute = Entry(window, text = minuteInput, font = (20)).place(x = 300, y = 20, width = 100, height = 40)
setSecond = Entry(window, text = secondInput, font = (20)).place(x = 500, y = 20, width = 100, height = 40)
canvas.create_text(60, 40, text = "Hour: ", font = (20))
canvas.create_text(260, 40, text = "Minute: ", font = (20))
canvas.create_text(460, 40, text = "Second: ", font = (20))
submit = Button(text = "Submit", height = 2, width = 10, font = (10))
submit.config(command = lambda submit=submit:typeTime(submit))
submit.place(x = 100, y = 100)
# if check == True:
# print("Pressed")
# submit.config(relief = SUNKEN)
window.mainloop()
The following code gets an error as it says name 'Combo_Box Value' is not defined.
from tkinter import *
from tkinter.ttk import Progressbar
from tkinter.ttk import Combobox
from tkinter.ttk import Notebook
import tkinter.font
class Pounds_Converter():
def __init__(self, parent):
self.gui(parent)
def gui(self, parent):
if parent == 0:
self.w1 = Tk()
self.w1.configure(bg = '#e4f3ff')
self.w1.geometry('370x350')
else:
self.w1 = Frame(parent)
self.w1.configure(bg = '#e4f3ff')
self.w1.place(x = 0, y = 0, width = 370, height = 350)
self.label3 = Label(self.w1, text = "Pounds Converter", bg = "#e4f3ff", fg = "#002d5e", font = tkinter.font.Font(family = "Myanmar Text", size = 24), cursor = "arrow", state = "normal")
self.label3.place(x = 55, y = 50, width = 260, height = 62)
self.label4 = Label(self.w1, text = "Pounds", bg = "#e4f3ff", fg = "#006fe8", font = tkinter.font.Font(family = "Myanmar Text", size = 12), cursor = "arrow", state = "normal")
self.label4.place(x = 60, y = 135, width = 60, height = 22)
self.combo1 = Combobox(self.w1, font = tkinter.font.Font(family = "Myanmar Text", size = 12), cursor = "arrow", state = "normal")
self.combo1.place(x = 250, y = 135, width = 76, height = 22)
self.combo1['values'] = ("Dollars", "Euros")
self.combo1.current(0)
self.combo1.bind("<<ComboboxSelected>>", self.Combo_Box)
self.ltext3 = Entry(self.w1, bg = "#efffff", font = tkinter.font.Font(family = "MS Shell Dlg 2", size = 8), cursor = "arrow", state = "normal")
self.ltext3.place(x = 20, y = 170, width = 140, height = 32)
self.ltext3.insert(INSERT, "0.00")
self.ltext4 = Entry(self.w1, bg = "#efffff", font = tkinter.font.Font(family = "MS Shell Dlg 2", size = 8), cursor = "arrow", state = "normal")
self.ltext4.place(x = 220, y = 170, width = 140, height = 32)
self.button2 = Button(self.w1, text = "Convert", bg = "#efffff", fg = "#006fe8", font = tkinter.font.Font(family = "MS Shell Dlg 2", size = 8), cursor = "arrow", state = "normal")
self.button2.place(x = 120, y = 270, width = 130, height = 30)
self.button2['command'] = self.Convert
self.button3 = Button(self.w1, text = "Home", bg = "#e4f3ff", fg = "#006fe8", font = tkinter.font.Font(family = "Myanmar Text", size = 8), cursor = "arrow", state = "normal")
self.button3.place(x = 20, y = 20, width = 40, height = 16)
def Combo_Box(self, e):
Combo_Box_Value=self.combo1.get()
return Combo_Box_Value
def Convert(self):
global Combo_Box_Value
Pounds=self.ltext3.get()
Pounds = float(Pounds)
if Combo_Box_Value== "Dollars":
Dollars=Pounds*1.38
self.ltext4.delete("0",END)
self.ltext4.insert(INSERT,Dollars)
a = Pounds_Converter(0)
a.w1.mainloop()
That is the full code for that GUI widget. I would like to get the value of the combo box once it is changed then I need to use it in another variable.
when I sign in everything is fine and it takes me to the home page, when I click on view menu and then click the back button it takes me back to the home page, everything is still fine and the way I want however when I click on order menu and then press the back button to go back to the home page, my home page messes up and I see parts of "function:" function, how can i fix this?
I'm sorry if the code is a bit long I already cut out most of the unnecessary code (or tried to). Thank you for your help
from tkinter import*
from PIL import Image, ImageTk
import tkinter as tk
root = Tk()
root.geometry('670x466')
accounts = []
food = ['Pizza','Burger','Nachos', 'French Toast']
foodprice=['20','9.50','7.50', '17']
drinks = ['Pepsi','Lemonade','Tea', 'Aperitivo Spritz']
drinksprice = ['3','4','3', '15.50']
class Goode_brothers:
def __init__(self, parent):
self.myFrame = Frame(parent)
self.myFrame.pack()
self.load = Image.open('new-dip-project\\food.jpg')
self.render = ImageTk.PhotoImage(self.load)
self.img = Label(parent, image = self.render)
self.img.place(x = -26, y =0)
self.img_login = PhotoImage(file = 'new-dip-project\\button (3).png')
self.b1 = Button(parent,image = self.img_login, command = self.read_info, bd = 0, bg = '#3b353b', activebackground = '#3b353b')
self.b1.place(x = 275, y = 340)
self.img_register = PhotoImage(file = 'new-dip-project\\register.png')
self.b2 = Button(parent,image = self.img_register, command = self.openNewWindow, bd = 0, bg = '#3b353b', activebackground = '#3b353b')
self.b2.place(x = 265, y = 400)
self.canvas = Canvas(parent, width = 400, height = 120)
self.canvas.pack()
self.img4 = ImageTk.PhotoImage(Image.open('new-dip-project\\goode.png'))
self.canvas.create_image(20, 20, anchor=NW, image=self.img4)
self.email = Entry(parent)
self.email.place(x = 340, y = 180)
self.password = Entry(parent)
self.password.place(x = 354, y = 250)
self.img_label = PhotoImage(file = 'new-dip-project\\label-image.png')
self.name = Label(parent, image = self.img_label, text = "Email:", bg = '#3c3a3b').place(x = 197,y = 178)
self.img_label_pass = PhotoImage(file = 'new-dip-project\\label_pass.png')
self.name = Label(parent, image = self.img_label_pass, text = "Password:", bg = '#3c3a3b').place(x = 177,y = 245)
def openMenu(self):
for wid in root.winfo_children():
wid.destroy()
self.myFrame.destroy()
self.myFrame2 = Frame(root, bg = '')
self.myFrame2.pack(fill = "both", expand = 1)
self.img77 = PhotoImage(file = 'new-dip-project\\goode.png')
self.name77 = Label(self.myFrame2, image = self.img77).pack()
self.img_menu = PhotoImage(file = 'new-dip-project\\menu_button.png')
self.b6 = Button(self.myFrame2,image = self.img_menu, command = self.view_menu, bd = 0)
self.b6.place(x = 246, y = 140)
self.img_order = PhotoImage(file = 'new-dip-project\\order_button.png')
self.b7 = Button(self.myFrame2,image = self.img_order, command = self.order_menu, bd = 0)
self.b7.place(x = 239, y = 228)
self.img_checkout = PhotoImage(file = 'new-dip-project\\checkout.png')
self.b8 = Button(self.myFrame2,image = self.img_checkout, bd = 0)
self.b8.place(x = 250, y = 316)
def view_menu(self):
self.myFrame2.destroy()
self.myFrame3 = LabelFrame(root, height = 700)
self.myFrame3.pack()
self.myFrame3.columnconfigure(0, weight=1)
self.myFrame3.columnconfigure(1, weight=2)
self.food_title = Label(self.myFrame3, font=("Impact", "23"), text = 'Food').grid(row = 0, column = 4)
self.food_space = Label(self.myFrame3, text = '').grid(row = 1, column = 4)
self.drinks_title = Label(self.myFrame3, font=("Impact", "23"), text = 'Drinks').grid(row = 8, column = 4)
self.price = Label(self.myFrame3, font=("Impact", "23"), text = 'Price($)').grid(row = 0, column = 8)
for x in range (len(food)):
self.foodop = Label(self.myFrame3, font=("Impact", "15"), text = food[x]).grid(row = 3+x, column = 4) #A created label defining where it is positioned
self.fprice = Label(self.myFrame3, font=("Impact", "15"), text = foodprice[x]).grid(row = 3+x, column = 8)
for x in range (len(drinks)):
self.drinksop = Label(self.myFrame3, font=("Impact", "15"), text = drinks[x]).grid(row = 5+(len(food))+x, column = 4)
self.drinksp = Label(self.myFrame3, font=("Impact", "15"), text = drinksprice[x]).grid(row = 5+(len(food))+x, column = 8)
self.img_back = PhotoImage(file = 'new-dip-project\\back_button.png')
self.b10 = Button(self.myFrame3,image = self.img_back, command = self.openMenu, bd = 0)
self.b10.grid(row = 38, column = 7)
def order_menu(self):
for wid2 in root.winfo_children():
wid2.destroy()
self.myFrame2.destroy()
self.myFrame4 = Frame(root)
self.myFrame4.pack(fill = "both", expand = 1)
self.tkvar = StringVar(self.myFrame4)
self.tkvar.set("Food")
self.tkvar2 = StringVar(self.myFrame4)
self.tkvar2.set("Drinks")
self.img_odmenu = PhotoImage(file = 'new-dip-project\\od_menu.png')
self.order_menu_message = Label(self.myFrame4, image = self.img_odmenu).place(x = 220)
self.foodMenu = OptionMenu(self.myFrame4, self.tkvar, *food)
self.foodMenu.place(x = 160, y = 110)
self.Foodlabel = Label(self.myFrame4, text="Choose Your Food", font=("Courier New","12"))
self.Foodlabel.place(x = 145, y = 83)
self.drinklabel = Label(self.myFrame4, text="Choose Your Drink", font=("Courier New","12"))
self.drinklabel.place(x = 370, y = 83)
self.drinkMenu = OptionMenu(self.myFrame4, self.tkvar2, *drinks)
self.drinkMenu.place(x = 385, y = 110)
self.pricelabel = Label(self.myFrame4, text = "Total price", font=("Courier New","12"))
self.pricelabel.place(x = 289, y = 208)
self.order_btn78 = PhotoImage(file = 'new-dip-project\\orderb.png')
self.order_btn = Button(self.myFrame4, image = self.order_btn78, bd = 0)
self.order_btn.place(x = 302, y = 160)
self.check_btn = PhotoImage(file = 'new-dip-project\\checkpay.png')
self.checkout_btn = Button(self.myFrame4, image = self.check_btn, bd = 0)
self.checkout_btn.place(x = 267, y = 410)
self.img_odmenu = PhotoImage(file = 'new-dip-project\\od_menu.png')
self.order_menu_message = Label(self.myFrame4, image = self.img_odmenu).place(x = 220)
self.foodMenu = OptionMenu(self.myFrame4, self.tkvar, *food)
self.foodMenu.place(x = 160, y = 110)
self.Foodlabel = Label(self.myFrame4, text="Choose Your Food", font=("Courier New","12"))
self.Foodlabel.place(x = 145, y = 83)
self.drinklabel = Label(self.myFrame4, text="Choose Your Drink", font=("Courier New","12"))
self.drinklabel.place(x = 370, y = 83)
self.drinkMenu = OptionMenu(self.myFrame4, self.tkvar2, *drinks)
self.drinkMenu.place(x = 385, y = 110)
self.pricelabel = Label(self.myFrame4, text = "Total price", font=("Courier New","12"))
self.pricelabel.place(x = 289, y = 208)
self.order_btn78 = PhotoImage(file = 'new-dip-project\\orderb.png')
self.order_btn = Button(self.myFrame4, image = self.order_btn78, bd = 0)
self.order_btn.place(x = 302, y = 160)
self.check_btn = PhotoImage(file = 'new-dip-project\\checkpay.png')
self.checkout_btn = Button(self.myFrame4, image = self.check_btn, bd = 0)
self.checkout_btn.place(x = 267, y = 410)
self.back_menu = PhotoImage(file = 'new-dip-project\\bbutton.png')
self.back_button2 = Button(self.myFrame4, image = self.back_menu, command = self.openMenu, bd = 0)
self.back_button2.place(x = 30, y = 410)
if __name__ == "__main__":
e = Goode_brothers(root)
root.title('Goode brothers')
root.mainloop()
You have to indent the methods under the class Goode Brothers
EXE won't open. I have tried everything I found online.
When I run the exe the console opens for a few seconds and then closes.
How can I make this .py executable and have my .txt output?
from tkinter import *
import time, os, fnmatch, shutil
screen = Tk()
screen.geometry("600x450")
screen.configure(background='azure')
screen.title("M")
t = time.localtime()
timestamp = time.strftime('%b-%d-%Y_%H%M', t)
BACKUP_NAME = ("backup-" + timestamp)
heading = Label(text = "Mr", font=(None, 15), bg = "lightblue", fg = "black", width = "500", height = "3")
heading.pack()
firstname_text = Label(text = "Name/ * ", bg = "azure",)
lastname_text = Label(text = "Usagel* ", bg = "azure",)
material_text = Label(text = "M * ", bg = "azure",)
age_text = Label(text = "How * ", bg = "azure",)
firstname_text.place(x = 15, y = 80)
lastname_text.place(x = 15, y = 140)
material_text.place(x = 15, y = 210)
age_text.place(x = 15, y = 260)
firstname = StringVar()
lastname = StringVar()
material = StringVar()
age = StringVar()
firstname_entry = Entry(textvariable = firstname, width = "30")
lastname_entry = Entry(textvariable = lastname, width = "30")
material_entry = Entry(textvariable = material, width = "30")
age_entry = Entry(textvariable = age, width = "30")
firstname_entry.place(x = 15, y = 100)
lastname_entry.place(x = 15, y = 170)
material_entry.place(x = 15, y = 240)
age_entry.place(x = 15, y = 290)
register = Button(screen,text = "Submit", font=(None, 10), width = "30", height = "2", command = save_info, bg = "lime green")
register.place(x = 15, y = 320)