Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import tkinter as tk
- from tkinter import messagebox
- from db import Database
- db = Database('tunes.db')
- class Application(tk.Frame):
- def __init__(self, master):
- super().__init__(master)
- self.master = master
- master.title('Drift Tuner')
- self.create_widgets()
- self.save_window()
- self.load_tune()
- self.selected_item = 0
- self.populate_list()
- def create_widgets(self):
- rows = 0
- while rows < 13:
- self.master.columnconfigure(rows, minsize=25)
- self.master.rowconfigure(rows, minsize=25)
- rows += 1
- # Front
- self.front_label = tk.Label(self.master, text='Front Percentage', font=('bold'), pady=5)
- self.front_label.grid(row=0, column=0, sticky=tk.S, columnspan=4)
- # Percentage
- self.front_text = tk.StringVar()
- self.front_label = tk.Label(self.master, text='Front', pady=5, font=('bold', 12))
- self.front_label.grid(row=1, column=1, sticky=tk.E)
- self.front_entry = tk.Entry(self.master, textvariable=self.front_text, width=8, font=('bold', 10))
- self.front_entry.grid(row=1, column=2)
- # AntiRoll Bars
- # AntiRool Bars category
- self.antiroll_label = tk.Label(self.master, text='Antiroll Bars | Antiroll Bars', font=('bold'), pady=5)
- self.antiroll_label.grid(row=2, column=0, sticky=tk.S, columnspan=4)
- # Max
- self.armax_text = tk.StringVar()
- self.armax_label = tk.Label(self.master, text='Max', pady=5, font=('bold', 12))
- self.armax_label.grid(row=3, column=0, sticky=tk.E)
- self.armax_entry = tk.Entry(self.master, textvariable=self.armax_text, width=8, font=('bold', 10))
- self.armax_entry.grid(row=3, column=1)
- # Min
- self.armin_text = tk.StringVar()
- self.armin_label = tk.Label(self.master, text='Min', font=('bold', 12))
- self.armin_label.grid(row=3, column=2, sticky=tk.E)
- self.armin_entry = tk.Entry(self.master, textvariable=self.armin_text, width=8, font=('bold', 10))
- self.armin_entry.grid(row=3, column=3)
- # Springs
- # Springs category
- self.springs_label = tk.Label(self.master, text='Springs | Springs', font=('bold'), pady=5)
- self.springs_label.grid(row=0, column=5, sticky=tk.S, columnspan=4)
- # Max
- self.springmax_text = tk.StringVar()
- self.springmax_label = tk.Label(self.master, text='Max', pady=5, font=('bold', 12))
- self.springmax_label.grid(row=1, column=5, sticky=tk.E)
- self.springmax_entry = tk.Entry(self.master, textvariable=self.springmax_text, width=8, font=('bold', 10))
- self.springmax_entry.grid(row=1, column=6)
- # Min
- self.springmin_text = tk.StringVar()
- self.springmin_label = tk.Label(self.master, text='Min', font=('bold', 12))
- self.springmin_label.grid(row=1, column=7, sticky=tk.E)
- self.springmin_entry = tk.Entry(self.master, textvariable=self.springmin_text, width=8, font=('bold', 10))
- self.springmin_entry.grid(row=1, column=8)
- # Ride Height category
- self.rideheight_label = tk.Label(self.master, text='Springs | Ride Height', font=('bold'), pady=5)
- self.rideheight_label.grid(row=2, column=5, sticky=tk.S, columnspan=4)
- # Max
- self.rideheightmax_text = tk.StringVar()
- self.rideheightmax_label = tk.Label(self.master, text='Max', pady=5, font=('bold', 12))
- self.rideheightmax_label.grid(row=3, column=5, sticky=tk.E)
- self.rideheightmax_entry = tk.Entry(self.master, textvariable=self.rideheightmax_text, width=8, font=('bold', 10))
- self.rideheightmax_entry.grid(row=3, column=6)
- # Min
- self.rideheightmin_text = tk.StringVar()
- self.rideheightmin_label = tk.Label(self.master, text='Min', font=('bold', 12))
- self.rideheightmin_label.grid(row=3, column=7, sticky=tk.E)
- self.rideheightmin_entry = tk.Entry(self.master, textvariable=self.rideheightmin_text, width=8, font=('bold', 10))
- self.rideheightmin_entry.grid(row=3, column=8)
- # Damping
- # Rebound category
- self.rebound_label = tk.Label(self.master, text='Damping | Rebound', font=('bold'), pady=5)
- self.rebound_label.grid(row=0, column=10, sticky=tk.S, columnspan=4)
- # Max
- self.reboundmax_text = tk.StringVar()
- self.reboundmax_label = tk.Label(self.master, text='Max', pady=5, font=('bold', 12))
- self.reboundmax_label.grid(row=1, column=10, sticky=tk.E)
- self.reboundmax_entry = tk.Entry(self.master, textvariable=self.reboundmax_text, width=8, font=('bold', 10))
- self.reboundmax_entry.grid(row=1, column=11)
- # Min
- self.reboundmin_text = tk.StringVar()
- self.reboundmin_label = tk.Label(self.master, text='Min', font=('bold', 12))
- self.reboundmin_label.grid(row=1, column=12, sticky=tk.E)
- self.reboundmin_entry = tk.Entry(self.master, textvariable=self.reboundmin_text, width=8, font=('bold', 10))
- self.reboundmin_entry.grid(row=1, column=13)
- # Rear
- self.rear_label = tk.Label(self.master, text='Rear Percentage', font=('bold'), pady=5)
- self.rear_label.grid(row=7, column=0, sticky=tk.S, columnspan=4)
- # Percentage
- self.rear_text = tk.StringVar()
- self.rear_label = tk.Label(self.master, text='Rear', pady=5, font=('bold', 12))
- self.rear_label.grid(row=8, column=1, sticky=tk.E)
- self.rear_output = tk.Entry(self.master, textvariable=self.rear_text, width=8, font=('bold', 10))
- self.rear_output.grid(row=8, column=2)
- self.rear_output.bind("<Button-1>", lambda e: "break")
- self.rear_output.bind("<Key>", lambda e: "break")
- # AntiRoll Bars
- # AntiRool Bars category
- self.antiroll_label = tk.Label(self.master, text='Antiroll Bars | Antiroll Bars', font=('bold'), pady=5)
- self.antiroll_label.grid(row=9, column=0, sticky=tk.S, columnspan=4)
- # Front
- self.arfront_text = tk.StringVar()
- self.arfront_label = tk.Label(self.master, text='Front', pady=5, font=('bold', 12))
- self.arfront_label.grid(row=10, column=0, sticky=tk.E)
- self.arfront_output = tk.Entry(self.master, textvariable=self.arfront_text, width=8, font=('bold', 10))
- self.arfront_output.grid(row=10, column=1)
- self.arfront_output.bind("<Button-1>", lambda e: "break")
- self.arfront_output.bind("<Key>", lambda e: "break")
- # Rear
- self.arrear_text = tk.StringVar()
- self.arrear_label = tk.Label(self.master, text='Rear', font=('bold', 12))
- self.arrear_label.grid(row=10, column=2, sticky=tk.E)
- self.arrear_output = tk.Entry(self.master, textvariable=self.arrear_text, width=8, font=('bold', 10))
- self.arrear_output.grid(row=10, column=3)
- self.arrear_output.bind("<Button-1>", lambda e: "break")
- self.arrear_output.bind("<Key>", lambda e: "break")
- # Springs
- # Springs category
- self.springs_label = tk.Label(self.master, text='Springs | Springs', font=('bold'), pady=5)
- self.springs_label.grid(row=7, column=5, sticky=tk.S, columnspan=4)
- # Front
- self.springfront_text = tk.StringVar()
- self.springfront_label = tk.Label(self.master, text='Front', pady=5, font=('bold', 12))
- self.springfront_label.grid(row=8, column=5, sticky=tk.E)
- self.springfront_output = tk.Entry(self.master, textvariable=self.springfront_text, width=8, font=('bold', 10))
- self.springfront_output.grid(row=8, column=6)
- self.springfront_output.bind("<Button-1>", lambda e: "break")
- self.springfront_output.bind("<Key>", lambda e: "break")
- # Rear
- self.springrear_text = tk.StringVar()
- self.springrear_label = tk.Label(self.master, text='Rear', font=('bold', 12))
- self.springrear_label.grid(row=8, column=7, sticky=tk.E)
- self.springrear_output = tk.Entry(self.master, textvariable=self.springrear_text, width=8, font=('bold', 10))
- self.springrear_output.grid(row=8, column=8)
- self.springrear_output.bind("<Button-1>", lambda e: "break")
- self.springrear_output.bind("<Key>", lambda e: "break")
- # Ride Height category
- self.rideheight_label = tk.Label(self.master, text='Springs | Ride Height', font=('bold'), pady=5)
- self.rideheight_label.grid(row=9, column=5, sticky=tk.S, columnspan=4)
- # Front
- self.rideheightfront_text = tk.StringVar()
- self.rideheightfront_label = tk.Label(self.master, text='Front', pady=5, font=('bold', 12))
- self.rideheightfront_label.grid(row=10, column=5, sticky=tk.E)
- self.rideheightfront_output = tk.Entry(self.master, textvariable=self.rideheightfront_text, width=8, font=('bold', 10))
- self.rideheightfront_output.grid(row=10, column=6)
- self.rideheightfront_output.bind("<Button-1>", lambda e: "break")
- self.rideheightfront_output.bind("<Key>", lambda e: "break")
- # Rear
- self.rideheightrear_text = tk.StringVar()
- self.rideheightrear_label = tk.Label(self.master, text='Rear', font=('bold', 12))
- self.rideheightrear_label.grid(row=10, column=7, sticky=tk.E)
- self.rideheightrear_output = tk.Entry(self.master, textvariable=self.rideheightrear_text, width=8, font=('bold', 10))
- self.rideheightrear_output.grid(row=10, column=8)
- self.rideheightrear_output.bind("<Button-1>", lambda e: "break")
- self.rideheightrear_output.bind("<Key>", lambda e: "break")
- # Damping
- # Rebound category
- self.rebound_label = tk.Label(self.master, text='Damping | Rebound', font=('bold'), pady=5)
- self.rebound_label.grid(row=7, column=10, sticky=tk.S, columnspan=4)
- # Front
- self.reboundfront_text = tk.StringVar()
- self.reboundfront_label = tk.Label(self.master, text='Front', pady=5, font=('bold', 12))
- self.reboundfront_label.grid(row=8, column=10, sticky=tk.E)
- self.reboundfront_output = tk.Entry(self.master, textvariable=self.reboundfront_text, width=8, font=('bold', 10))
- self.reboundfront_output.grid(row=8, column=11)
- self.reboundfront_output.bind("<Button-1>", lambda e: "break")
- self.reboundfront_output.bind("<Key>", lambda e: "break")
- # Rear
- self.reboundrear_text = tk.StringVar()
- self.reboundrear_label = tk.Label(self.master, text='Rear', font=('bold', 12))
- self.reboundrear_label.grid(row=8, column=12, sticky=tk.E)
- self.reboundrear_output = tk.Entry(self.master, textvariable=self.reboundrear_text, width=8, font=('bold', 10))
- self.reboundrear_output.grid(row=8, column=13)
- self.reboundrear_output.bind("<Button-1>", lambda e: "break")
- self.reboundrear_output.bind("<Key>", lambda e: "break")
- # Bump category
- self.bump_label = tk.Label(self.master, text='Damping | Bump', font=('bold'), pady=5)
- self.bump_label.grid(row=9, column=10, sticky=tk.S, columnspan=4)
- # Front
- self.bumpfront_text = tk.StringVar()
- self.bumpfront_label = tk.Label(self.master, text='Front', pady=5, font=('bold', 12))
- self.bumpfront_label.grid(row=10, column=10, sticky=tk.E)
- self.bumpfront_output = tk.Entry(self.master, textvariable=self.bumpfront_text, width=8, font=('bold', 10))
- self.bumpfront_output.grid(row=10, column=11)
- self.bumpfront_output.bind("<Button-1>", lambda e: "break")
- self.bumpfront_output.bind("<Key>", lambda e: "break")
- # Rear
- self.bumprear_text = tk.StringVar()
- self.bumprear_label = tk.Label(self.master, text='Rear', font=('bold', 12))
- self.bumprear_label.grid(row=10, column=12, sticky=tk.E)
- self.bumprear_output = tk.Entry(self.master, textvariable=self.bumprear_text, width=8, font=('bold', 10))
- self.bumprear_output.grid(row=10, column=13)
- self.bumprear_output.bind("<Button-1>", lambda e: "break")
- self.bumprear_output.bind("<Key>", lambda e: "break")
- # Buttons
- self.calculate_button = tk.Button(self.master, text='Calculate', width=15, command=self.calculate_tune)
- self.calculate_button.grid(row=5, column=3, columnspan=2)
- self.help_button = tk.Button(self.master, text='Help/Info', width=15, command=self.show_help)
- self.help_button.grid(row=5, column=1, columnspan=2)
- self.cleartext_button = tk.Button(self.master, text='Clear Inputs', width=15, command=self.clear_text)
- self.cleartext_button.grid(row=5, column=5, columnspan=2)
- self.clearoutput_button = tk.Button(self.master, text='Clear Outputs', width=15, command=self.clear_output)
- self.clearoutput_button.grid(row=5, column=7, columnspan=2)
- self.save_button = tk.Button(self.master, text='Save Tune', width=15, command=self.save_window)
- self.save_button.grid(row=5, column=9, columnspan=2)
- self.load_button = tk.Button(self.master, text='Load Tune', width=15, command=self.load_window)
- self.load_button.grid(row=5, column=11, columnspan=2)
- def equation(self, A, B, C):
- x = (((A-B)*C)+B)
- return x
- def calculate_tune(self):
- try:
- (float(self.front_text.get()), float(self.armax_entry.get()), float(self.armin_entry.get()), float(self.springmax_entry.get()), float(self.springmin_entry.get()), float(self.rideheightmax_entry.get()), float(self.rideheightmin_entry.get()), float(self.reboundmax_entry.get()), float(self.reboundmin_entry.get()))
- except ValueError:
- messagebox.showerror('Values', 'Please fill out everything with proper values')
- return
- if float(self.front_text.get()) > 1 or float(self.front_text.get()) < 0:
- messagebox.showerror('Front Percentage', 'Please make sure the front perentage has the format 0.##')
- return
- self.front = float(self.front_text.get())
- self.rear = 1-self.front
- self.rear_output.delete(0, tk.END)
- self.rear_output.insert(tk.END, self.rear)
- self.set_values(self.arfront_output, self.armax_text, self.armin_text, self.front)
- self.set_values(self.arrear_output, self.armax_text, self.armin_text, self.rear)
- self.set_values(self.springfront_output, self.springmax_text, self.springmin_text, self.front)
- self.set_values(self.springrear_output, self.springmax_text, self.springmin_text, self.rear)
- self.rideheightfront_output.delete(0, tk.END)
- self.rideheightfront_output.insert(tk.END, float(self.rideheightmin_entry.get())+0.4)
- self.rideheightrear_output.delete(0, tk.END)
- self.rideheightrear_output.insert(tk.END, float(self.rideheightmin_entry.get()))
- self.set_values(self.reboundfront_output, self.reboundmax_text, self.reboundmin_text, self.front)
- self.set_values(self.reboundrear_output, self.reboundmax_text, self.reboundmin_text, self.rear)
- self.bumpfront_output.delete(0, tk.END)
- self.bumpfront_output.insert(tk.END, (self.equation(float(self.reboundmax_text.get()), float(self.reboundmin_text.get()), self.front))*0.5)
- self.bumprear_output.delete(0, tk.END)
- self.bumprear_output.insert(tk.END, (self.equation(float(self.reboundmax_text.get()), float(self.reboundmin_text.get()), self.rear))*0.5)
- def save_window(self):
- self.save = tk.Toplevel(self.master)
- self.save.title('Save')
- self.save_text = tk.StringVar()
- self.label_label = tk.Label(self.save, text='Save Your Tune', font=('bold', 12), pady=5)
- self.label_label.grid(row=0, column=0, columnspan=2)
- self.save_label = tk.Label(self.save, text='Copy and Save This ID', font=('bold', 10))
- self.save_label.grid(row=1, column=0, sticky=tk.E)
- self.save_entry = tk.Entry(self.save, textvariable=self.save_text, width=15)
- self.save_entry.grid(row=1, column=1)
- self.save_button = tk.Button(self.save, text='Save Tune', width=15, command=self.save_tune)
- self.save_button.grid(row=2, column=0, columnspan=2)
- self.save_entry.bind("<Key>", lambda e: "break")
- def load_window(self):
- self.load = tk.Toplevel(self.master)
- self.load.title('Load')
- self.tunes_list = tk.Listbox(self.load, height=8, width=50, border=0)
- self.tunes_list.grid(row=0, column=0, columnspan=3, rowspan=6, pady=5, padx=5)
- self.scrollbar = tk.Scrollbar(self.load)
- self.scrollbar.grid(row=0, column=3, pady=0, padx=5)
- self.tunes_list.configure(yscrollcommand=self.scrollbar.set)
- self.scrollbar.configure(command=self.tunes_list.yview)
- self.tunes_list.bind('<<ListboxSelect>>', self.select_item)
- self.remove_button = tk.Button(self.load, text="Remove Tune", width=15, command=self.remove_item)
- self.remove_button.grid(row=6, column=1)
- self.load_button = tk.Button(self.load, text="Load Tune", width=15, command=self.load_tune)
- self.load_button.grid(row=6, column=2)
- def set_values(self, output, max, min, side):
- output.delete(0, tk.END)
- output.insert(tk.END, self.equation(float(max.get()), float(min.get()), side))
- def show_help(self):
- messagebox.showinfo('Help/Info', 'Examples:' + '\n' + '' + '\n' + 'Front: 0.54' + '\n' + 'Antiroll Bars: 65, 1' + '\n' + 'Springs: 1519.5, 218.8' + '\n' + 'Ride Height: 5.6, 3.0' + '\n' + 'Rebound: 20, 3' + '\n' + '' + '\n' + 'Created by: MilkyDoritos')
- def clear_text(self):
- self.front_entry.delete(0, tk.END)
- self.armax_entry.delete(0, tk.END)
- self.armin_entry.delete(0, tk.END)
- self.springmax_entry.delete(0, tk.END)
- self.springmin_entry.delete(0, tk.END)
- self.rideheightmax_entry.delete(0, tk.END)
- self.rideheightmin_entry.delete(0, tk.END)
- self.reboundmax_entry.delete(0, tk.END)
- self.reboundmin_entry.delete(0, tk.END)
- def clear_output(self):
- self.rear_output.delete(0, tk.END)
- self.arfront_output.delete(0, tk.END)
- self.arrear_output.delete(0, tk.END)
- self.springfront_output.delete(0, tk.END)
- self.springrear_output.delete(0, tk.END)
- self.rideheightfront_output.delete(0, tk.END)
- self.rideheightrear_output.delete(0, tk.END)
- self.reboundfront_output.delete(0, tk.END)
- self.reboundrear_output.delete(0, tk.END)
- self.bumpfront_output.delete(0, tk.END)
- self.bumprear_output.delete(0, tk.END)
- def save_tune(self):
- try:
- (float(self.rear_output.get()), float(self.arfront_output.get()), float(self.arrear_output.get()), float(self.springfront_output.get()), float(self.springrear_output.get()), float(self.rideheightfront_output.get()), float(self.rideheightrear_output.get()), float(self.reboundfront_output.get()), float(self.reboundrear_output.get()))
- except ValueError:
- messagebox.showerror('Cannot Save', 'Please have an avaliable tune/output ready to save')
- return
- self.tune_id = (db.insert(float(self.rear_output.get()), float(self.arfront_output.get()), float(self.arrear_output.get()), float(self.springfront_output.get()), float(self.springrear_output.get()), float(self.rideheightfront_output.get()), float(self.rideheightrear_output.get()), float(self.reboundfront_output.get()), float(self.reboundrear_output.get())))
- self.save_entry.delete(0, tk.END)
- self.save_entry.insert(tk.END, self.tune_id)
- def load_tune(self):
- pass
- def select_item(self, event):
- try:
- index = self.tunes_list.curselection()[0]
- self.selected_item = self.tunes_list.get(index)
- except IndexError:
- pass
- def populate_list(self):
- self.tunes_list.delete(0, tk.END)
- for row in db.fetch():
- self.tunes_list.insert(tk.END, row)
- def remove_item(self):
- db.remove(self.selected_item[0])
- self.clear_text()
- self.populate_list()
- root = tk.Tk()
- app = Application(master=root)
- app.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement