Advertisement
Vasilena

gui new

Apr 20th, 2023
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.75 KB | None | 0 0
  1. import tkinter as tk
  2. from tkinter import *
  3. from tkinter import ttk
  4. from tkinter import messagebox
  5. import tkinter.messagebox
  6. from pump_two_on import PumpTwoOn
  7. from pump_two_off import PumpTwoOff
  8. from pump_one_on import PumpOneOn
  9. from pump_one_off import PumpOneOff
  10. from drain import TankDrain
  11. from exit import Exit
  12. import RPi.GPIO as GPIO
  13.  
  14. GPIO.setwarnings(False)
  15. GPIO.setmode(GPIO.BOARD)
  16.  
  17. GPIO.setup(36, GPIO.IN) # pump one
  18. GPIO.setup(40, GPIO.IN) # pumo two
  19. GPIO.setup(38, GPIO.IN) # pumo three
  20.  
  21. # tank one gpio senzors setup
  22. GPIO.setup(18, GPIO.IN)
  23. GPIO.setup(22, GPIO.IN)
  24. GPIO.setup(21, GPIO.IN)
  25. GPIO.setup(23, GPIO.IN)
  26. GPIO.setup(24, GPIO.IN)
  27.  
  28. # tank two gpio sen+zors setup
  29. GPIO.setup(11, GPIO.IN)
  30. GPIO.setup(12, GPIO.IN)
  31. GPIO.setup(13, GPIO.IN)
  32. GPIO.setup(15, GPIO.IN)
  33. GPIO.setup(16, GPIO.IN)
  34.  
  35. # tank three gpio senzors setup
  36. GPIO.setup(29, GPIO.IN)
  37. GPIO.setup(31, GPIO.IN)
  38. GPIO.setup(33, GPIO.IN)
  39. GPIO.setup(35, GPIO.IN)
  40. GPIO.setup(37, GPIO.IN)
  41.  
  42.  
  43. class Window:
  44.  
  45. def __init__(self, root):
  46. # --------------------------------TK-------------------------------
  47. # root setup
  48. self.window = root
  49. self.background_color = '#999da0'
  50. self.window.attributes('-fullscreen', True)
  51. self.window.title("Control Panel")
  52. self.window.configure(background='#999da0')
  53.  
  54. # root geometry
  55. self.screen_width = self.window.winfo_screenwidth() # 1920
  56. self.screen_height = self.window.winfo_screenheight() # 1080
  57.  
  58. # manual mode
  59. self.manual = Label(root, text="РЪЧНО УПРАВЛЕНИЕ", font=('Arial', 30), bg=self.background_color, fg="black")
  60. self.manual.place(x=(self.screen_width / 3) * 2.15, y=self.screen_height / 20)
  61.  
  62. self.pumpOne = Label(root, text="ПОМПА 1", font=('Arial', 20), bg=self.background_color, fg="black")
  63. self.pumpOne.place(x=(self.screen_width / 3) * 2.17, y=self.screen_height / 8)
  64.  
  65. self.pumpTwo = Label(root, text="ПОМПА 2", font=('Arial', 20), bg=self.background_color, fg="black")
  66. self.pumpTwo.place(x=(self.screen_width / 3) * 2.6, y=self.screen_height / 8)
  67.  
  68. # buttons
  69. self.pump_one_on_btn = Button(root, text="ВКЛЮЧИ", font=("Arial", 15, "bold"), command=self.pump_one_on_func, bg="#198FF5", fg="white")
  70. self.pump_one_on_btn.place(x=(self.screen_width / 3) * 2.18, y=self.screen_height / 5.8)
  71.  
  72. self.pump_one_off_btn = Button(root, text="ИЗКЛЮЧИ", font=("Arial", 15, "bold"), command=self.pump_one_off_func, bg="#696969", fg="white")
  73. self.pump_one_off_btn.place(x=(self.screen_width / 3) * 2.16, y=self.screen_height / 4.5)
  74.  
  75. # separator
  76. self.separator_frame = Frame(root, bg="black", width=2, height=150)
  77. self.separator_frame.place(x=1590, y=137)
  78.  
  79. self.pump_two_on_btn = Button(root, text="ВКЛЮЧИ", font=("Arial", 15, "bold"), command=self.pump_two_on_func, bg="#198FF5", fg="white")
  80. self.pump_two_on_btn.place(x=(self.screen_width / 3) * 2.6, y=self.screen_height / 5.8)
  81.  
  82. self.pump_two_off_btn = Button(root, text="ИЗКЛЮЧИ", font=("Arial", 15, "bold"), command=self.pump_two_off_func, bg="#696969", fg="white")
  83. self.pump_two_off_btn.place(x=(self.screen_width / 3) * 2.6, y=self.screen_height / 4.5)
  84.  
  85. # draning
  86. self.manual = Label(root, text="ГЛАВЕН РЕЗЕРВОАР", font=('Arial', 30), bg=self.background_color, fg="black")
  87. self.manual.place(x=(self.screen_width / 3) * 2.15, y=self.screen_height / 3.3)
  88.  
  89. self.pump_two_off_btn = Button(root, text="ИЗТОЧВАНЕ", font=("Arial", 15, "bold"), command=self.drain_func, bg="#F06B5D", fg="white")
  90. self.pump_two_off_btn.place(x=(self.screen_width / 3) * 2.35, y=self.screen_height / 2.7)
  91.  
  92. # separator
  93. self.separator_frame = Frame(root, bg="black", width=470, height=2)
  94. self.separator_frame.place(x=1360, y=480)
  95.  
  96. # exit program button
  97. self.exit_btn = Button(root, text="X", height=1, width=2, font=("Arial", 15, "bold"),
  98. command=self.Exit_btn_func, bg="#EF4324", fg="white")
  99. self.exit_btn.place(x=self.screen_width - 55, y=self.screen_height - (self.screen_height - 5))
  100.  
  101. # automatic mode
  102. self.automatic = Label(root, text="АВТОМАТИЧНО УПРАВЛЕНИЕ", font=('Arial', 25), bg=self.background_color,
  103. fg="black")
  104. self.automatic.place(x=(self.screen_width / 3) * 2.1, y=self.screen_height / 2.1)
  105.  
  106. self.tankOne = Label(root, text="РЕЗЕРВОАР 1", font=('Arial', 20), bg=self.background_color, fg="black")
  107. self.tankOne.place(x=(self.screen_width / 3) * 2.13, y=self.screen_height / 1.9)
  108.  
  109. # separator
  110. self.separator_frame = Frame(root, bg="black", width=2, height=120)
  111. self.separator_frame.place(x=1590, y=570)
  112.  
  113. self.tankTwo = Label(root, text="РЕЗЕРВОАР 2", font=('Arial', 20), bg=self.background_color, fg="black")
  114. self.tankTwo.place(x=(self.screen_width / 3) * 2.55, y=self.screen_height / 1.9)
  115.  
  116. # dropdown menus
  117. self.tank1_label = tk.Label(root, text="избери:", bg=self.background_color, font=('Arial', 18))
  118. self.tank1_label.place(x=(self.screen_width / 3) * 2.17, y=self.screen_height / 1.7)
  119. self.tank1_value_inside = tk.StringVar(value="0%")
  120. self.tank1_options = ["0%", "20%", "40%", "60%", "80%", "100%"]
  121. self.tank1_dropdown = tk.OptionMenu(root, self.tank1_value_inside, *self.tank1_options)
  122. self.tank1_dropdown.place(x=(self.screen_width / 3) * 2.32, y=self.screen_height / 1.7)
  123.  
  124. # dropdown menus
  125. self.tank2_label = tk.Label(root, text="избери:", bg=self.background_color, font=('Arial', 18))
  126. self.tank2_label.place(x=(self.screen_width / 3) * 2.55, y=self.screen_height / 1.7)
  127. self.tank2_value_inside = tk.StringVar(value="0%")
  128. self.tank2_options = ["0%", "20%", "40%", "60%", "80%", "100%"]
  129. self.tank2_dropdown = tk.OptionMenu(root, self.tank2_value_inside, *self.tank2_options)
  130. self.tank2_dropdown.place(x=(self.screen_width / 3) * 2.70, y=self.screen_height / 1.7)
  131.  
  132. # sequence option
  133. self.automatic = Label(root, text="ИЗБЕРИ ПОСЛЕДОВАТЕЛНОСТ", font=('Arial', 25), bg=self.background_color,
  134. fg="black")
  135. self.automatic.place(x=(self.screen_width / 3) * 2.1, y=self.screen_height / 1.5)
  136.  
  137. # create a label and two radio buttons for the first sequence option
  138. self.sequence1_label = tk.Label(root, text='ЕДНО', bg=self.background_color, font=('Arial', 20))
  139. self.sequence1_label.place(x=(self.screen_width / 3) * 2.3, y=self.screen_height / 1.4)
  140.  
  141. self.sequence1_var = tk.StringVar(root)
  142. self.sequence1_var.set('Резервоар 1')
  143.  
  144. self.sequence1_rb1 = tk.Radiobutton(root, text='Резервоар 1 ', bg=self.background_color, font=('Arial', 15),
  145. variable=self.sequence1_var, value='Резервоар 1')
  146. self.sequence1_rb1.place(x=(self.screen_width / 3) * 2.15, y=self.screen_height / 1.31)
  147. self.sequence1_rb2 = tk.Radiobutton(root, text='Резервоар 2 ', bg=self.background_color, font=('Arial', 15),
  148. variable=self.sequence1_var, value='Резервоар 2')
  149. self.sequence1_rb2.place(x=(self.screen_width / 3) * 2.15, y=self.screen_height / 1.24)
  150.  
  151. # separator
  152. self.separator_frame = Frame(root, bg="black", width=2, height=122)
  153. self.separator_frame.place(x=1590, y=780)
  154.  
  155. # create a label and two radio buttons for the second sequence option
  156. self.sequence2_label = tk.Label(root, text='ДВЕ', font=('Arial', 20), bg=self.background_color, fg="black")
  157. self.sequence2_label.place(x=(self.screen_width / 3) * 2.55, y=self.screen_height / 1.4)
  158.  
  159. self.sequence2_var = tk.StringVar(root)
  160. self.sequence2_var.set('Резервоар 2')
  161.  
  162. self.sequence2_rb1 = tk.Radiobutton(root, text='Резервоар 1 ', bg=self.background_color, font=('Arial', 15),
  163. variable=self.sequence2_var, value='Резервоар 1')
  164. self.sequence2_rb1.place(x=(self.screen_width / 3) * 2.57, y=self.screen_height / 1.31)
  165. self.sequence2_rb2 = tk.Radiobutton(root, text='Резервоар 2 ', bg=self.background_color, font=('Arial', 15),
  166. variable=self.sequence2_var, value='Резервоар 2')
  167. self.sequence2_rb2.place(x=(self.screen_width / 3) * 2.57, y=self.screen_height / 1.24)
  168.  
  169. # start and stop button
  170.  
  171. self.start = Button(root, text="СТАРТИРАЙ", font=('Arial', 25), bg="#41be87", fg="white",
  172. command=self.overflow_btn_on)
  173. self.start.place(x=(self.screen_width / 3) * 2.17, y=self.screen_height / 1.15)
  174.  
  175. self.stop = Button(root, text="СПРИ", font=('Arial', 25), bg="#e2651d", fg="white",
  176. command=self.overflow_btn_off)
  177. self.stop.place(x=(self.screen_width / 3) * 2.6, y=self.screen_height / 1.15)
  178.  
  179. # --------------------------------Canvas-------------------------------
  180. # canvas setup
  181. self.canvas = Canvas(root, width=(self.screen_width / 3) * 2, height=self.screen_height,
  182. bg=self.background_color)
  183. self.canvas.pack()
  184. self.canvas.place(bordermode=OUTSIDE)
  185.  
  186. # heading
  187. self.canvas.create_text(self.screen_width / 3, self.screen_height / 18, text='К О Н Т Р О Л Е Н П А Н Е Л',
  188. fill='black', font='Arial 25')
  189.  
  190. # create scale tank One
  191. self.canvas.create_line(65, 140, 65, 520, width=2)
  192. for i in range(6):
  193. self.p1 = 100 - i * 20
  194. self.y1 = 140
  195. self.y1 = self.y1 + i * 76
  196. self.canvas.create_text(25, self.y1, text=self.p1, font=("Arial", 13, "bold"))
  197. self.canvas.create_text(45, self.y1, text="%", font=("Arial", 13, "bold"))
  198. self.canvas.create_line(65, self.y1, 75, self.y1, width=2)
  199.  
  200. # create scale tank Two
  201. self.canvas.create_line(65, 600, 65, 980, width=2)
  202. for i in range(6):
  203. self.p = 100 - i * 20
  204. self.y = 600
  205. self.y = self.y + i * 76
  206. self.canvas.create_text(25, self.y, text=self.p, font=("Arial", 13, "bold"))
  207. self.canvas.create_text(45, self.y, text=" %", font=("Arial", 13, "bold"))
  208. self.canvas.create_line(65, self.y, 75, self.y, width=2)
  209.  
  210. # create scale tank Three
  211. self.canvas.create_line(1185, 200, 1185, 900, width=3)
  212. for i in range(6):
  213. self.p = 100 - i * 20
  214. self.y2 = 200
  215. self.y2 = self.y2 + i * 140
  216. self.canvas.create_text(1205, self.y2, text=self.p, font=("Arial", 15, "bold"))
  217. self.canvas.create_text(1230, self.y2, text=" %", font=("Arial", 15, "bold"))
  218. self.canvas.create_line(1160, self.y2, 1186, self.y2, width=3)
  219.  
  220. # tank One (T1)
  221. self.canvas.create_rectangle(80, 140, 360, 520, fill='#d9dddc')
  222. # tank One Water
  223. self.waterOne = self.canvas.create_rectangle(80, 140, 360, 520, fill='blue')
  224.  
  225. self.tank1_label_canvas = tk.Label(root, text="Резервоар 1", bg=self.background_color, font=('Arial', 18))
  226. self.tank1_label_canvas.place(x=80, y=100)
  227.  
  228. # tank Two (T2)
  229. self.canvas.create_rectangle(80, 600, 360, 980, fill='#d9dddc')
  230. # tank Two Water
  231. self.waterTwo = self.canvas.create_rectangle(80, 600, 360, 980, fill='blue')
  232.  
  233. self.tank2_label_canvas = tk.Label(root, text="Резервоар 2", bg=self.background_color, font=('Arial', 18))
  234. self.tank2_label_canvas.place(x=80, y=560)
  235.  
  236. # tank Three (T3)
  237. self.canvas.create_rectangle(750, 200, 1150, 900, fill='#d9dddc')
  238. # tank Three Water
  239. self.waterThree = self.canvas.create_rectangle(750, 200, 1150, 900, fill='blue')
  240.  
  241. self.tank3_label_canvas = tk.Label(root, text="Резервоар 3", bg=self.background_color, font=('Arial', 20))
  242. self.tank3_label_canvas.place(x=995, y=155)
  243.  
  244. # pump One (p40)
  245. self.ovalOne = self.canvas.create_oval(380, 380, 510, 510)
  246.  
  247. # pump Two (p38)
  248. self.ovalTwo = self.canvas.create_oval(380, 840, 510, 970)
  249.  
  250. def Exit_btn_func(self):
  251. self.Exit_btn = Exit().exit()
  252. if self.Exit_btn > 0:
  253. self.window.destroy()
  254. return
  255.  
  256. def check_condition_water_tank_one(self):
  257. if self.sum == 1:
  258. return 444
  259. elif self.sum == 2:
  260. return 368
  261. elif self.sum == 3:
  262. return 292
  263. elif self.sum == 4:
  264. return 216
  265. elif self.sum == 5:
  266. return 140
  267. else:
  268. return 520
  269.  
  270.  
  271. def check_condition_water_tank_two(self):
  272. if self.sum == 1:
  273. return 904
  274. elif self.sum == 2:
  275. return 828
  276. elif self.sum == 3:
  277. return 752
  278. elif self.sum == 4:
  279. return 676
  280. elif self.sum == 5:
  281. return 600
  282. else:
  283. return 980
  284.  
  285. def check_condition_water_tank_three(self):
  286. if self.sum == 1:
  287. return 760
  288. elif self.sum == 2:
  289. return 620
  290. elif self.sum == 3:
  291. return 480
  292. elif self.sum == 4:
  293. return 340
  294. elif self.sum == 5:
  295. return 200
  296. else:
  297. return 900
  298.  
  299. def update_water_tank_one(self):
  300. self.sum = GPIO.input(18) + GPIO.input(22) + GPIO.input(21) + GPIO.input(23) + GPIO.input(24)
  301. self.y1 = self.check_condition_water_tank_one()
  302. self.canvas.coords(self.waterOne, 80, self.y1, 360, 520)
  303. self.window.after(300, self.update_water_tank_one)
  304.  
  305. def update_water_tank_two(self):
  306. self.sum = GPIO.input(15) + GPIO.input(13) + GPIO.input(12) + GPIO.input(16) + GPIO.input(11)
  307. self.y1 = self.check_condition_water_tank_two()
  308. self.canvas.coords(self.waterTwo, 80, self.y1, 360, 980)
  309. self.window.after(300, self.update_water_tank_two)
  310.  
  311. def update_water_tank_three(self):
  312. self.sum = GPIO.input(29) + GPIO.input(31) + GPIO.input(33) + GPIO.input(35) + GPIO.input(37)
  313. self.y1 = self.check_condition_water_tank_three()
  314. self.canvas.coords(self.waterThree, 750, self.y1, 1150, 900)
  315. self.window.after(300, self.update_water_tank_three)
  316.  
  317.  
  318. def pump_one_on_func(self):
  319. PumpOneOn()
  320.  
  321. def pump_one_off_func(self):
  322. PumpOneOff()
  323.  
  324. def pump_two_on_func(self):
  325. PumpTwoOn()
  326.  
  327. def pump_two_off_func(self):
  328. PumpTwoOff()
  329.  
  330. def drain_func(self):
  331. TankDrain()
  332.  
  333. def overflow_btn_on(self):
  334. if int(self.tank2_value_inside.get()[:-1]) + int(self.tank1_value_inside.get()[:-1]) != 100 \
  335. or self.sequence2_var.get() == self.sequence1_var.get():
  336. messagebox.showwarning("Предупреждение", "Въведените данни не са равни на 100%!")
  337. else:
  338. print("OK!")
  339.  
  340. def overflow_btn_off(self):
  341. ...
  342.  
  343.  
  344. if __name__ == "__main__":
  345. root = tk.Tk()
  346. obj = Window(root)
  347. obj.update_water_tank_one()
  348. obj.update_water_tank_two()
  349. obj.update_water_tank_three()
  350. root.mainloop()
  351.  
  352.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement