From b1f55b4dc4bb60b13c7d2f4997ab0e54216496f3 Mon Sep 17 00:00:00 2001 From: Martin Zietz Date: Thu, 21 Jan 2021 13:37:46 +0100 Subject: [PATCH] Status Panel setup --- Helmholtz.ico | Bin 0 -> 41662 bytes User_Interface.py | 101 +++++++++++++++++++++++++++++++++++----------- main.py | 6 +-- 3 files changed, 79 insertions(+), 28 deletions(-) create mode 100644 Helmholtz.ico diff --git a/Helmholtz.ico b/Helmholtz.ico new file mode 100644 index 0000000000000000000000000000000000000000..9b1a8055902c8655b3e406857990bcffa9cc051d GIT binary patch literal 41662 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 literal 0 HcmV?d00001 diff --git a/User_Interface.py b/User_Interface.py index d95d3f1..6598b06 100644 --- a/User_Interface.py +++ b/User_Interface.py @@ -1,4 +1,11 @@ from tkinter import * +from tkinter import ttk +import globals +import cage_func +import random as rand + +NORM_FONT = () +SUB_HEADER_FONT = ("Arial", 9, "bold") class HelmholtzGUI(Tk): @@ -6,46 +13,35 @@ class HelmholtzGUI(Tk): def __init__(self): Tk.__init__(self) + Tk.wm_title(self, "Helmholtz Cage Control") + Tk.wm_iconbitmap(self, "Helmholtz.ico") + self.Menu = TopMenu(self) # displays menu bar at the top mainArea = Frame(self) - mainArea.pack(fill="both", expand=True) + mainArea.pack(side="top", fill="both", expand=True) - # mainArea.grid_rowconfigure(0, weight=1) - # mainArea.grid_columnconfigure(0, weight=1) + mainArea.grid_rowconfigure(0, weight=1) + mainArea.grid_columnconfigure(0, weight=1) self.frames = {} # dictionary for storing all pages - frame = EmptyFrame(mainArea) + for F in (TestFrame, StatusDisplay): + frame = F(mainArea, self) + self.frames[F] = frame + frame.grid(row=0, column=0, sticky="nsew") - self.frames[EmptyFrame] = frame - - # frame.grid(row=0, column=0, sticky="nsew") - - self.show_frame(EmptyFrame) + self.show_frame(StatusDisplay) def show_frame(self, key): frame = self.frames[key] # gets correct page from the dictionary frame.tkraise() # brings this frame to the front -class EmptyFrame(Frame): - - def __init__(self, parent): - Frame.__init__(self, parent) - - frame = Frame(parent, width=1000, height=600) - frame.pack(padx=50, pady=50) - - one = Label(frame, text="One", bg="red") - one.pack(fill=X) - two = Label(frame, text="Two", bg="blue") - two.pack() - - class TopMenu: def __init__(self, window): + print("menu called") menu = Menu(window) window.config(menu=menu) @@ -54,4 +50,61 @@ class TopMenu: ModeSelector.add_command(label="Full Manual", command=self.manual_mode) def manual_mode(self): - print("Switching to manual mode") \ No newline at end of file + print("Switching to manual mode") + + +class TestFrame(Frame): + + def __init__(self, parent, controller): + Frame.__init__(self, parent) + print("TestFrame called") + + one = Label(self, text="One", bg="red") + one.pack(fill=X) + two = Label(self, text="Two", bg="blue") + two.pack() + button = ttk.Button(self, text="Print stuff", command=lambda: print_stuff("Hello")) + button.pack() + + +class StatusDisplay(Frame): + + def __init__(self, parent, controller): + Frame.__init__(self, parent) + print("StatusDisplay called") # ToDo: remove + rowCounter = 0 # keep track of which row we are at in the grid layout + + col = 0 + for header in ["X-Axis", "Y-Axis", "Z-Axis"]: # create Column headers + headLabel = Label(self, text=header, font=SUB_HEADER_FONT) + headLabel.grid(columnspan=2, row=rowCounter, column=col*2, sticky="ew") + col = col + 1 # move to next column + rowCounter = rowCounter + 1 # increase row counter to place future stuff below header + + LabelTexts = ["Port:", "Channel:", "Output:"] # define content of row entries + rowNo = len(LabelTexts) # get number of label rows + columnNo = 3 # number of label columns + Labels = [[] for _ in range(columnNo)] + # prepare list of lists to contain all labels for row entries in all columns + + for i in range(0, rowNo): # create label objects for row entries + for j in range(columnNo): + Labels[j].append(Label(self, text=LabelTexts[i])) + + col = 0 + for LabelCol in Labels: # place row entries in grid layout for all columns + for row in range(rowNo): # place row entries + LabelCol[row].grid(row=row+rowCounter, column=col*2, sticky="w") + col = col + 1 + rowCounter = rowCounter + rowNo # increase row counter to place future stuff below this + + toBeRemoved = Label(self, text="Active TBD") + toBeRemoved.grid(row=1, column=1) + + +def print_stuff(stuff): + print(stuff) + + +def random_no(): + return rand.uniform(0, 20) diff --git a/main.py b/main.py index 3aea811..fcaddfc 100644 --- a/main.py +++ b/main.py @@ -24,7 +24,5 @@ g.Z_PORT = "COM2" # Code starts here------------------------------------------ g.MAX_AMPS = np.sqrt(g.MAX_WATTS / g.RESISTANCES) # calculate maximum currents in each axis -mainWindow = ui.HelmholtzGUI() -Menu = ui.TopMenu(mainWindow) - -mainWindow.mainloop() +application = ui.HelmholtzGUI() +application.mainloop()