am kind of new to tkinter but i don't know what am doing wrong, i have already defined the function for attributes that would be inside the entryboxes but known are appearing after i ran the code. that is How do I bind the select make combobox so it can autofill the relevant entry boxes from the constructed vehicle class?
from tkinter import *
from tkinter import ttk
import random
import datetime
from tkinter import messagebox
class Window:
def __init__(self,root):
self.root = root
self.root.title("Car Rental Service")
self.root.geometry("1350x700+0+0")
self.var1 = 0
self.var2 = 0
self.var3 = 0
self.var4 = 0
self.var5 = 0
self.var6 = 0
self.var7 = 0
self.var8 = 0
def Vehicle(Window):
values =str(self.cboSelectVehicleType.get())
vtype = values
if vtype =="Car":
KmL.set("10")
NumberOfDoors.set("4")
NumberOfPassengers.set("5")
NumberOfBeds.set("0")
PlateNumber.set("152-C-854")
DailyCost.set("20")
WeeklyCost.set("95")
n = float(DailyCost.get())
s = float( NoofDaysRenting.get())
price = (n*s)
TC = str('%.2f'%(price))
Total.set(TC)
elif vtype =="Van":
KmL.set("8")
NumberOfDoors.set("3")
NumberOfPassengers.set("3")
NumberOfBeds.set("0")
PlateNumber.set("142-G-511")
DailyCost.set("45")
WeeklyCost.set("260")
n = float(DailyCost.get())
s = float( NoofDaysRenting.get())
price = (n*s)
TC = str('%.2f'%(price))
Total.set(TC)
elif vtype =="Caravans":
KmL.set("8")
NumberOfDoors.set("0")
NumberOfPassengers.set("0")
NumberOfBeds.set("4")
PlateNumber.set("131-G-111")
DailyCost.set("50")
WeeklyCost.set("350")
n = float(DailyCost.get())
s = float( NoofDaysRenting.get())
price = (n*s)
TC = str('%.2f'%(price))
Total.set(TC)
#===================================Frame==================================
Mainframe = Frame(self.root, width =1350, height=700, bd=20, relief="raise")
Mainframe.grid()
LeftMainframe = Frame(Mainframe, width =1000, height=650, bd=8, relief="raise")
LeftMainframe.pack(side=LEFT)
RightMainframe = Frame(Mainframe, width =350, height=650, bd=8, relief="raise")
RightMainframe.pack(side=RIGHT)
#===================================Div_Frame==================================
LeftMainframe1 = Frame(LeftMainframe, width =1000, height=225, bd=8, relief="raise")
LeftMainframe1.pack(side=TOP)
LeftMainframe2 = Frame(LeftMainframe, width =1000, height=225, bd=8, relief="raise")
LeftMainframe2.pack(side=TOP)
LeftMainframe3 = Frame(LeftMainframe, width =1000, height=100, bd=8, relief="raise")
LeftMainframe3.pack(side=TOP)
LeftMainframe4 = Frame(LeftMainframe, width =1000, height=100, bd=8, relief="raise")
LeftMainframe4.pack(side=TOP)
RightMainframe1 = Frame(RightMainframe, width =350, height=325, bd=8, relief="raise")
RightMainframe1.pack(side=TOP)
RightMainframe2 = Frame(RightMainframe, width =350, height=325, bd=8, relief="raise")
RightMainframe2.pack(side=BOTTOM)
#===================================Variable==================================
self.var1 = IntVar()
self.var2 = IntVar()
self.var3 = IntVar()
self.var4 = IntVar()
self.var5 = IntVar()
SelectVehicleType = StringVar()
SelectMake = StringVar()
Model = StringVar()
KmL = StringVar()
NumberOfDoors = StringVar()
NumberOfPassengers = StringVar()
NumberOfBeds = StringVar()
PlateNumber = StringVar()
DailyCost = StringVar()
WeeklyCost = StringVar()
WeekendCost = StringVar()
Total = StringVar()
CustomerID = StringVar()
def Reset():
self.var1.set(0)
self.var2.set(0)
self.var3.set(0)
self.var4.set(0)
self.var5.set(0)
self.var6.set(0)
self.var7.set(0)
self.var8.set(0)
SelectVehicleType.set("")
SelectMake.set("")
Model.set("")
KmL.set("")
NumberOfDoors.set("")
NumberOfPassengers.set("")
NumberOfBeds.set("")
PlateNumber.set("")
DailyCost.set("")
WeeklyCost.set("")
WeekendCost.set("")
Total.set("")
CustomerID.set("")
InvoiceID.set("")
return Reset
#------------------------------------LeftmainFrame2----------------------------------
self.lblSelectVehicleType = Label(LeftMainframe2, font=('arial', 10, 'bold'), text="Select VehicleType", bd=8)
self.lblSelectVehicleType.grid(row=0, column=0)
self.cboSelectVehicleType =ttk.Combobox(LeftMainframe2, textvariable=self.var1, state='readonly', font=('arial', 10, 'bold'), width=25, justify='left')
self.cboSelectVehicleType.bind("<<ComboboxSelected>>",Vehicle)
self.cboSelectVehicleType['value']=('','Car','Van','Caravans')
self.cboSelectVehicleType.current(0)
self.cboSelectVehicleType.grid(row=0, column=1)
self.lblSelectMake = Label(LeftMainframe2, font=('arial', 10, 'bold'), text="Select Make", bd=8)
self.lblSelectMake.grid(row=0, column=2)
self.cboSelectMake =ttk.Combobox(LeftMainframe2, textvariable=self.var2, state='readonly', font=('arial', 10, 'bold'), width=25, justify='left')
self.cboSelectMake['value']=('','Audi A5','Ford fiesta','Toyota Corrolla','Ford focus','Renault Clio''Renault Other','Citroen Berlingo','Peugot Partner''Renault C','Citroen B','Peugot P',)
self.cboSelectMake.current(0)
self.cboSelectMake.grid(row=0, column=3)
self.lblModel = Label(LeftMainframe2, font=('arial', 10, 'bold'), text="Model", bd=8)
self.lblModel.grid(row=0, column=4)
self.txtModel = Entry(LeftMainframe2, font=('arial', 10, 'bold'), bd=15, width=25, justify='left')
self.txtModel.grid(row=0, column=5)
self.lblKmL = Label(LeftMainframe2, font=('arial', 10, 'bold'), text="Km/L", bd=8)
self.lblKmL.grid(row=1, column=0)
self.txtKmL = Entry(LeftMainframe2, font=('arial', 10, 'bold'), bd=15, width=25, justify='left')
self.txtKmL.grid(row=1, column=1)
self.lblNumberOfBeds = Label(LeftMainframe2, font=('arial', 10, 'bold'), text="Number Of Beds", bd=8)
self.lblNumberOfBeds.grid(row=1, column=2)
self.txtNumberOfBeds = Entry(LeftMainframe2, font=('arial', 10, 'bold'), bd=15, width=25, justify='left')
self.txtNumberOfBeds.grid(row=1, column=3)
self.lblPlateNumber = Label(LeftMainframe2, font=('arial', 10, 'bold'), text="PlateNumber", bd=8)
self.lblPlateNumber.grid(row=1, column=4)
self.txtPlateNumber = Entry(LeftMainframe2, font=('arial', 10, 'bold'), bd=15, width=25, justify='left')
self.txtPlateNumber.grid(row=1, column=5)
self.lblNumberOfPassengers = Label(LeftMainframe2, font=('arial', 10, 'bold'), text="Number Of Passengers", bd=8)
self.lblNumberOfPassengers.grid(row=2, column=0)
self.txtNumberOfPassengers = Entry(LeftMainframe2, font=('arial', 10, 'bold'), bd=15, width=25, justify='left')
self.txtNumberOfPassengers.grid(row=2, column=1)
self.lblDailyCost = Label(LeftMainframe2, font=('arial', 10, 'bold'), text="Daily Cost", bd=8)
self.lblDailyCost.grid(row=2, column=2)
self.txtDailyCost = Entry(LeftMainframe2, font=('arial', 10, 'bold'), bd=15, width=25, justify='left')
self.txtDailyCost.grid(row=2, column=3)
self.lblWeeklyCost = Label(LeftMainframe2, font=('arial', 10, 'bold'), text="Weekly Cost", bd=8)
self.lblWeeklyCost.grid(row=2, column=4)
self.txtWeeklyCost = Entry(LeftMainframe2, font=('arial', 10, 'bold'), bd=15, width=25, justify='left')
self.txtWeeklyCost.grid(row=2, column=5)
self.lblWeekendCost = Label(LeftMainframe2, font=('arial', 10, 'bold'), text=" Weekend Cost", bd=8)
self.lblWeekendCost.grid(row=3, column=0)
self.txtWeekendCost = Entry(LeftMainframe2, font=('arial', 10, 'bold'), bd=15, width=25, justify='left')
self.txtWeekendCost.grid(row=3, column=1)
#----------------------------------------Leftmainframe4------------------------------
self.btnTotal=Button(LeftMainframe4, text='Total', padx=8, pady=8, bd=8, fg="blue", font=('arial', 13, 'bold'), width= 21, height=1,).grid(row=0, column=0)
self.btnReceipt=Button(LeftMainframe4, text='Receipt', padx=8, pady=8, bd=8, fg="green", font=('arial', 13, 'bold'), width= 21, height=1,).grid(row=0, column=1)
self.btnReset=Button(LeftMainframe4, text="Reset", command=Reset, padx=8, pady=8, bd=8, fg="blue", font=('arial', 13, 'bold'), width= 21, height=1,).grid(row=0, column=2)
if __name__ =='__main__':
root= Tk()
application = Window(root)
root.mainloop()
I see two main problems
you forgot some StringVar
variables - ie. NoofDaysRenting
and InvoiceID
you forgot to use textvariable=
to assign StringVar
to Entry
- ie.
self.txtKmL = Entry(..., textvariable=self.KmL, ...)
so it doesn't update Entry
when you update StringVar
Code after other changes.
It has textvariable=
only in two Entry
because there is too much work for me.
from tkinter import *
from tkinter import ttk
import random
import datetime
from tkinter import messagebox
class Window:
def __init__(self,root):
self.root = root
self.root.title("Car Rental Service")
self.root.geometry("1350x700+0+0")
# --- Variable ---
self.var1 = IntVar()
self.var2 = IntVar()
self.var3 = IntVar()
self.var4 = IntVar()
self.var5 = IntVar()
self.var6 = IntVar()
self.var7 = IntVar()
self.var8 = IntVar()
self.SelectVehicleType = StringVar()
self.SelectMake = StringVar()
self.Model = StringVar()
self.KmL = StringVar()
self.NumberOfDoors = StringVar()
self.NumberOfPassengers = StringVar()
self.NumberOfBeds = StringVar()
self.PlateNumber = StringVar()
self.DailyCost = StringVar()
self.WeeklyCost = StringVar()
self.WeekendCost = StringVar()
self.Total = StringVar()
self.CustomerID = StringVar()
self.NoofDaysRenting = StringVar()
self.InvoiceID = StringVar()
#===================================Frame==================================
Mainframe = Frame(self.root, width =1350, height=700, bd=20, relief="raise")
Mainframe.grid()
LeftMainframe = Frame(Mainframe, width =1000, height=650, bd=8, relief="raise")
LeftMainframe.pack(side=LEFT)
RightMainframe = Frame(Mainframe, width =350, height=650, bd=8, relief="raise")
RightMainframe.pack(side=RIGHT)
#===================================Div_Frame==================================
LeftMainframe1 = Frame(LeftMainframe, width =1000, height=225, bd=8, relief="raise")
LeftMainframe1.pack(side=TOP)
LeftMainframe2 = Frame(LeftMainframe, width =1000, height=225, bd=8, relief="raise")
LeftMainframe2.pack(side=TOP)
LeftMainframe3 = Frame(LeftMainframe, width =1000, height=100, bd=8, relief="raise")
LeftMainframe3.pack(side=TOP)
LeftMainframe4 = Frame(LeftMainframe, width =1000, height=100, bd=8, relief="raise")
LeftMainframe4.pack(side=TOP)
RightMainframe1 = Frame(RightMainframe, width =350, height=325, bd=8, relief="raise")
RightMainframe1.pack(side=TOP)
RightMainframe2 = Frame(RightMainframe, width =350, height=325, bd=8, relief="raise")
RightMainframe2.pack(side=BOTTOM)
#------------------------------------LeftmainFrame2----------------------------------
self.lblSelectVehicleType = Label(LeftMainframe2, font=('arial', 10, 'bold'), text="Select VehicleType", bd=8)
self.lblSelectVehicleType.grid(row=0, column=0)
self.cboSelectVehicleType =ttk.Combobox(LeftMainframe2, textvariable=self.var1, state='readonly', font=('arial', 10, 'bold'), width=25, justify='left')
self.cboSelectVehicleType.bind("<<ComboboxSelected>>", self.Vehicle)
self.cboSelectVehicleType['value']=('','Car','Van','Caravans')
self.cboSelectVehicleType.current(0)
self.cboSelectVehicleType.grid(row=0, column=1)
self.lblSelectMake = Label(LeftMainframe2, font=('arial', 10, 'bold'), text="Select Make", bd=8)
self.lblSelectMake.grid(row=0, column=2)
self.cboSelectMake =ttk.Combobox(LeftMainframe2, textvariable=self.var2, state='readonly', font=('arial', 10, 'bold'), width=25, justify='left')
self.cboSelectMake['value']=('','Audi A5','Ford fiesta','Toyota Corrolla','Ford focus','Renault Clio''Renault Other','Citroen Berlingo','Peugot Partner''Renault C','Citroen B','Peugot P',)
self.cboSelectMake.current(0)
self.cboSelectMake.grid(row=0, column=3)
self.lblModel = Label(LeftMainframe2, font=('arial', 10, 'bold'), text="Model", bd=8)
self.lblModel.grid(row=0, column=4)
self.txtModel = Entry(LeftMainframe2, font=('arial', 10, 'bold'), bd=15, width=25, justify='left')
self.txtModel.grid(row=0, column=5)
self.lblKmL = Label(LeftMainframe2, font=('arial', 10, 'bold'), text="Km/L", bd=8)
self.lblKmL.grid(row=1, column=0)
self.txtKmL = Entry(LeftMainframe2, textvariable=self.KmL, font=('arial', 10, 'bold'), bd=15, width=25, justify='left')
self.txtKmL.grid(row=1, column=1)
self.lblNumberOfBeds = Label(LeftMainframe2, font=('arial', 10, 'bold'), text="Number Of Beds", bd=8)
self.lblNumberOfBeds.grid(row=1, column=2)
self.txtNumberOfBeds = Entry(LeftMainframe2, textvariable=self.NumberOfBeds, font=('arial', 10, 'bold'), bd=15, width=25, justify='left')
self.txtNumberOfBeds.grid(row=1, column=3)
self.lblPlateNumber = Label(LeftMainframe2, font=('arial', 10, 'bold'), text="PlateNumber", bd=8)
self.lblPlateNumber.grid(row=1, column=4)
self.txtPlateNumber = Entry(LeftMainframe2, font=('arial', 10, 'bold'), bd=15, width=25, justify='left')
self.txtPlateNumber.grid(row=1, column=5)
self.lblNumberOfPassengers = Label(LeftMainframe2, font=('arial', 10, 'bold'), text="Number Of Passengers", bd=8)
self.lblNumberOfPassengers.grid(row=2, column=0)
self.txtNumberOfPassengers = Entry(LeftMainframe2, font=('arial', 10, 'bold'), bd=15, width=25, justify='left')
self.txtNumberOfPassengers.grid(row=2, column=1)
self.lblDailyCost = Label(LeftMainframe2, font=('arial', 10, 'bold'), text="Daily Cost", bd=8)
self.lblDailyCost.grid(row=2, column=2)
self.txtDailyCost = Entry(LeftMainframe2, font=('arial', 10, 'bold'), bd=15, width=25, justify='left')
self.txtDailyCost.grid(row=2, column=3)
self.lblWeeklyCost = Label(LeftMainframe2, font=('arial', 10, 'bold'), text="Weekly Cost", bd=8)
self.lblWeeklyCost.grid(row=2, column=4)
self.txtWeeklyCost = Entry(LeftMainframe2, font=('arial', 10, 'bold'), bd=15, width=25, justify='left')
self.txtWeeklyCost.grid(row=2, column=5)
self.lblWeekendCost = Label(LeftMainframe2, font=('arial', 10, 'bold'), text=" Weekend Cost", bd=8)
self.lblWeekendCost.grid(row=3, column=0)
self.txtWeekendCost = Entry(LeftMainframe2, font=('arial', 10, 'bold'), bd=15, width=25, justify='left')
self.txtWeekendCost.grid(row=3, column=1)
#----------------------------------------Leftmainframe4------------------------------
self.btnTotal=Button(LeftMainframe4, text='Total', padx=8, pady=8, bd=8, fg="blue", font=('arial', 13, 'bold'), width= 21, height=1,).grid(row=0, column=0)
self.btnReceipt=Button(LeftMainframe4, text='Receipt', padx=8, pady=8, bd=8, fg="green", font=('arial', 13, 'bold'), width= 21, height=1,).grid(row=0, column=1)
self.btnReset=Button(LeftMainframe4, text="Reset", command=self.Reset, padx=8, pady=8, bd=8, fg="blue", font=('arial', 13, 'bold'), width= 21, height=1,).grid(row=0, column=2)
self.Reset() # reset at start to set default values
def Reset(self):
self.var1.set(0)
self.var2.set(0)
self.var3.set(0)
self.var4.set(0)
self.var5.set(0)
self.var6.set(0)
self.var7.set(0)
self.var8.set(0)
self.SelectVehicleType.set("")
self.SelectMake.set("")
self.Model.set("")
self.KmL.set("")
self.NumberOfDoors.set("")
self.NumberOfPassengers.set("")
self.NumberOfBeds.set("")
self.PlateNumber.set("")
self.DailyCost.set("")
self.WeeklyCost.set("")
self.WeekendCost.set("")
self.Total.set("")
self.CustomerID.set("")
self.InvoiceID.set("")
self.NoofDaysRenting.set("0")
# return Reset # makes no sense
def Vehicle(self, event):
#print(event)
vtype = str(self.cboSelectVehicleType.get())
if vtype =="Car":
self.KmL.set("10")
self.NumberOfDoors.set("4")
self.NumberOfPassengers.set("5")
self.NumberOfBeds.set("0")
self.PlateNumber.set("152-C-854")
self.DailyCost.set("20")
self.WeeklyCost.set("95")
n = float(self.DailyCost.get())
s = float(self.NoofDaysRenting.get())
price = (n*s)
TC = str('%.2f'%(price))
self.Total.set(TC)
elif vtype =="Van":
self.KmL.set("8")
self.NumberOfDoors.set("3")
self.NumberOfPassengers.set("3")
self.NumberOfBeds.set("0")
self.PlateNumber.set("142-G-511")
self.DailyCost.set("45")
self.WeeklyCost.set("260")
n = float(self.DailyCost.get())
s = float(self.NoofDaysRenting.get())
price = (n*s)
TC = str('%.2f'%(price))
self.Total.set(TC)
elif vtype =="Caravans":
self.KmL.set("8")
self.NumberOfDoors.set("0")
self.NumberOfPassengers.set("0")
self.NumberOfBeds.set("4")
self.PlateNumber.set("131-G-111")
self.DailyCost.set("50")
self.WeeklyCost.set("350")
n = float(self.DailyCost.get())
s = float(self.NoofDaysRenting.get())
price = (n*s)
TC = str('%.2f'%(price))
self.Total.set(TC)
if __name__ =='__main__':
root= Tk()
application = Window(root)
root.mainloop()