I am trying to create a UI with two different screens that the user can change between using a button at the top of the screen.
I have placed the button in row 0 and the frames for the other screens in row 1 however the button is appearing halfway down the screen within the frame that is supposed to be in row 1.
Code:
class TaskInputFrame(GeneralFrame):
def __init__(self, *args):
super().__init__(*args)
self.enter_task_button = ttk.Button(self, text="Enter Task", command=self.enter_task)
self.turnpoint1_label = ttk.Label(self, text=str("Turpoint 1:"))
self.turnpoint2_label = ttk.Label(self, text=str("Turpoint 2:"))
self.turnpoint3_label = ttk.Label(self, text=str("Turpoint 3:"))
self.turnpoint4_label = ttk.Label(self, text=str("Turpoint 4:"))
self.turnpoint5_label = ttk.Label(self, text=str("Turpoint 5:"))
self.pilot_mass_label = ttk.Label(self, text=str("Pilot Weight:"))
self.desired_wing_loading_label = ttk.Label(self, text=str("Desired Wing Loading:"))
self.turnpoint1_entry = ttk.Entry(self)
self.turnpoint2_entry = ttk.Entry(self)
self.turnpoint3_entry = ttk.Entry(self)
self.turnpoint4_entry = ttk.Entry(self)
self.turnpoint5_entry = ttk.Entry(self)
self.pilot_mass_entry = ttk.Entry(self)
self.desired_wing_loading_entry = ttk.Entry(self)
def place_widgets(self):
self.enter_task_button.grid(column=0, row=7, sticky = tk.W, pady=3)
self.turnpoint1_entry.grid(column=1, row=0, sticky=tk.E, pady=3)
self.turnpoint2_entry.grid(column=1, row=1, sticky=tk.E, pady=3)
self.turnpoint3_entry.grid(column=1, row=2, sticky=tk.E, pady=3)
self.turnpoint4_entry.grid(column=1, row=3, sticky=tk.E, pady=3)
self.turnpoint5_entry.grid(column=1, row=4, sticky=tk.E, pady=3)
self.pilot_mass_entry.grid(column=1, row=5, sticky=tk.E, pady=3)
self.desired_wing_loading_entry.grid(column=1, row=6, sticky=tk.E, pady=3)
self.turnpoint1_label.grid(column=0, row=0, sticky=tk.E, pady=3, padx=1)
self.turnpoint2_label.grid(column=0, row=1, sticky=tk.E, pady=3, padx=1)
self.turnpoint3_label.grid(column=0, row=2, sticky=tk.E, pady=3, padx=1)
self.turnpoint4_label.grid(column=0, row=3, sticky=tk.E, pady=3, padx=1)
self.turnpoint5_label.grid(column=0, row=4, sticky=tk.E, pady=3, padx=1)
self.pilot_mass_label.grid(column=0, row=5, sticky=tk.E, pady=3, padx=1)
self.desired_wing_loading_label.grid(column=0, row=6, sticky=tk.W, pady=3)
def forget_widgets(self):
self.enter_task_button.grid_forget()
self.turnpoint1_entry.grid_forget()
self.turnpoint2_entry.grid_forget()
self.turnpoint3_entry.grid_forget()
self.turnpoint4_entry.grid_forget()
self.turnpoint5_entry.grid_forget()
self.pilot_mass_entry.grid_forget()
self.desired_wing_loading_entry.grid_forget()
self.turnpoint1_label.grid_forget()
self.turnpoint2_label.grid_forget()
self.turnpoint3_label.grid_forget()
self.turnpoint4_label.grid_forget()
self.turnpoint5_label.grid_forget()
self.pilot_mass_label.grid_forget()
self.desired_wing_loading_label.grid_forget()
def enter_task(self):
pass
class TaskOutputFrame(GeneralFrame):
def __init__(self, *args):
super().__init__(*args)
self.task_duration_label = ttk.Label(self, text=str("Task Duration:"))
self.optimal_launch_time_label = ttk.Label(self, text=str("Optimal Launch Time:"))
self.finish_time_label = ttk.Label(self, text=str("Finish Time:"))
self.optimal_wing_loading_label = ttk.Label(self, text=str("Optimal Wing Loading:"))
def place_widgets(self):
self.task_duration_label.grid(column=0, row=0, sticky=tk.E, pady=3)
self.optimal_launch_time_label.grid(column=0, row=1, sticky=tk.E, pady=3)
self.finish_time_label.grid(column=0, row=2, sticky=tk.E, pady=3)
self.optimal_wing_loading_label.grid(column=0, row=3, sticky=tk.E, pady=3)
def forget_widgets(self):
self.task_duration_label.grid_forget()
self.optimal_launch_time_label.grid_forget()
self.finish_time_label.grid_forget()
self.optimal_wing_loading_label.grid_forget()
class MapFrame(GeneralFrame):
def __init__(self, *args):
super().__init__(*args)
self.map = tkintermapview.TkinterMapView(width=600, height=570, corner_radius=3)
self.map.set_position(50.853060, -3.269220)
self.turnpoint1 = self.map.set_marker(50.853060, -3.269220, text="NHL")
self.turnpoint2 = self.map.set_marker(50.991271, -3.491076, text="BAM")
self.turnpoint3 = self.map.set_marker(50.897219, -2.642515, text="YEO")
self.turnpoint4 = self.map.set_marker(50.853060, -3.269220, text="NHL")
self.task = self.map.set_path([self.turnpoint1.position, self.turnpoint2.position, self.turnpoint3.position, self.turnpoint4.position])
def place_widgets(self):
self.map.grid(column=0, row=0, padx=15, pady=15, sticky=tk.E)
def forget_widgets(self):
self.map.grid_forget()
class TaskFrame(GeneralFrame):
def __init__(self, *args):
super().__init__(*args)
self.rowconfigure(0, weight=2)
self.rowconfigure(1, weight=1)
self.TaskInputFrame = TaskInputFrame()
self.TaskOutputFrame = TaskOutputFrame()
self.MapFrame = MapFrame()
self.TaskInputFrame.grid(column=0, row=0, sticky=tk.NW)
self.TaskOutputFrame.grid(column=0, row=1, sticky=tk.NW)
self.MapFrame.grid(column=1, row=0, rowspan=2)
def place_widgets(self):
self.TaskInputFrame.place_widgets()
self.TaskOutputFrame.place_widgets()
self.MapFrame.place_widgets()
def forget_widgets(self):
self.TaskInputFrame.forget_widgets()
self.TaskOutputFrame.forget_widgets()
self.MapFrame.forget_widgets()
class MainFrame(GeneralFrame):
def __init__(self, *args):
super().__init__(*args)
self.switch_frames_button = ttk.Button(self, text="Switch Frame", command=self.change_screens)
self.switch_frames_button.grid(column=0, row=0)
self.TaskFrame = TaskFrame()
self.GliderFrame = GliderFrame()
self.TaskFrame.grid(column=0, row=1)
self.TaskFrame.place_widgets()
self.current_frame = 1
def change_screens(self):
if self.current_frame == 1:
self.TaskFrame.grid_forget()
self.TaskFrame.forget_widgets()
self.GliderFrame.grid(column=0, row=1)
self.GliderFrame.place_widgets()
self.current_frame = 2
else:
self.GliderFrame.grid_forget()
self.GliderFrame.forget_widgets()
self.TaskFrame.grid(column=0, row=1)
self.TaskFrame.place_widgets()
self.current_frame = 1
class App(tk.Tk):
def __init__(self):
super().__init__()
self.geometry("1200x600")
self.title("Gliding Task Analysis")
self.main_frame = MainFrame()
self.main_frame.grid(column=0, row=0, sticky=tk.W)
App().mainloop()