appWindow.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. # The code for changing pages was derived from: http://stackoverflow.com/questions/7546050/switch-between-two-frames-in-tkinter
  2. # License: http://creativecommons.org/licenses/by-sa/3.0/
  3. from database import Table
  4. from analogPressure.sdpArray import SdpArray
  5. from analogPressure.mcp3008 import MCP3008
  6. from digitalPressure.sdp610Array import Spd610Array
  7. from wirelessLoadCell.loadCells import LoadCells
  8. from ui import *
  9. import tkinter as tk
  10. import tk_tools
  11. from time import *
  12. class Main(tk.Tk, Table):
  13. def __init__(self, *args, **kwargs):
  14. tk.Tk.__init__(self, *args, **kwargs)
  15. tk.Tk.wm_title(self, "Windkanal-Tool")
  16. self.adc = MCP3008(0,0)
  17. self.pressureSensors = Spd610Array()
  18. self.forceSensors = LoadCells()
  19. self.motorController = None
  20. Table.__init__(self,
  21. ["time", "windspeed", "motor_pwm"] +
  22. [f"pressure_{i}" for i in range(8)] +
  23. [f"adc_{i}" for i in range(8)] +
  24. [f"force_X_1", f"force_Y_1", f"force_Z_1"] +
  25. [f"force_X_2", f"force_Y_2", f"force_Z_2"] +
  26. [f"force_X_3", f"force_Y_3", f"force_Z_3"])
  27. self.saveAsCsv("test.csv")
  28. container = tk.Frame(self)
  29. container.pack(side="top", fill="both", expand = True)
  30. container.grid_rowconfigure(0, weight=1)
  31. container.grid_columnconfigure(0, weight=1)
  32. menubar = tk.Menu(container)
  33. filemenu = tk.Menu(menubar, tearoff=0)
  34. filemenu.add_command(label="Save settings", command = lambda: self.popupmsg("Not supported just yet!"))
  35. filemenu.add_separator()
  36. filemenu.add_command(label="Exit", command=quit)
  37. menubar.add_cascade(label="File", menu=filemenu)
  38. tk.Tk.config(self, menu=menubar)
  39. label = tk.Label(self, text="Bedienelemente", font=LARGE_FONT)
  40. label.pack(pady=10,padx=10)
  41. # top menu
  42. top = tk.Frame(self, borderwidth=2, relief="solid")
  43. button1 = tk.Button(top, text="Bedienelemente", command=lambda: self.show_frame(Page_1))
  44. button1.pack(side=tk.LEFT)
  45. button2 = tk.Button(top, text="Kräfte", command=lambda: self.show_frame(Page_2))
  46. button2.pack(side=tk.LEFT)
  47. button3 = tk.Button(top, text="Druck", command=lambda: self.show_frame(Page_3))
  48. button3.pack(side=tk.LEFT)
  49. button4 = tk.Button(top,text="Einstellungen",command=lambda: self.show_frame(Page_4))
  50. button4.pack(side=tk.LEFT)
  51. button5 = tk.Button(top, text="QUIT", fg="red",command=quit)
  52. button5.pack(side=tk.LEFT)
  53. top.pack(side="top", expand=True, fill="both")
  54. self.frames = {}
  55. for F in (Page_1, Page_2, Page_3, Page_4):
  56. frame = F(container, self)
  57. self.frames[F] = frame
  58. frame.grid(row=0, column=0, sticky="nsew")
  59. self.show_frame(Page_1)
  60. self.interval()
  61. def show_frame(self, cont):
  62. frame = self.frames[cont]
  63. frame.tkraise()
  64. def popupmsg(self, msg=""):
  65. popup = tk.Toplevel(self.master)
  66. popup.wm_title("Error!")
  67. label = tk.Label(popup, text=msg, font=LARGE_FONT)
  68. label.pack(side="top", fill="x", pady=10)
  69. b1 = tk.Button(popup, text="Okay", command=popup.destroy)
  70. b1.pack()
  71. def interval(self):
  72. adcValues = self.adc.read()
  73. self.addRow([time.time()] + adcValues)
  74. for frame in self.frames:
  75. frame.update()
  76. self.after(300,self.interval)