GUI.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. from re import A, I
  2. import customtkinter as ctk
  3. import json
  4. from PIL import Image, ImageTk
  5. import time
  6. import asyncio
  7. from dobluetooth import connect, getData
  8. """
  9. parse esp32 data string and make each axis and accell data its own varible
  10. then do math on all those varibles to give us ONE NUMBER from all six numbers
  11. """
  12. def getCurrentScore():
  13. #than do math to figure out power level
  14. return 30
  15. names = []
  16. scores = []
  17. currentScore = getCurrentScore()
  18. highestScore = 100
  19. highScoreName = ""
  20. if currentScore > highestScore :
  21. highestScore = currentScore
  22. f = open("scores.txt", "rw")
  23. f.write(str(highestScore) + highScoreName)
  24. scores.append(highestScore)
  25. names.append(highScoreName)
  26. ctk.set_appearance_mode("System") # Modes: system (default), light, dark
  27. ctk.set_default_color_theme("blue") # Themes: blue (default), dark-blue, green
  28. app = ctk.CTk() # create CTk window like you do with the Tk window
  29. app.geometry("1440x1024")
  30. canvas = ctk.CTkCanvas(app, width=250, height=250,highlightthickness=0,)
  31. canvas.config(background="white")
  32. canvas.place(x=0,y=0)
  33. def placeLeaderboard():
  34. canvas.create_rectangle(0, 0, 500, 500, fill="grey20", width=2) #grey14 to match background
  35. intx = 0
  36. inty = 60
  37. for i in range(len(names)):
  38. label1 = ctk.CTkLabel(width=124,height=39,text_color="white",text=names[i], font=("Arial",15),master=app)
  39. label1.place(x=intx,y=inty)
  40. label2 = ctk.CTkLabel(width=124,height=39,text_color="white",text=scores[i], font=("Arial",15),master=app)
  41. label2.place(x=intx+125,y=inty)
  42. inty+=40
  43. LEADERBOARD = ctk.CTkLabel(width=249,height=39,text_color="white",text="Leaderboard", font=("Arial",50),master=app)
  44. LEADERBOARD.place(x=0,y=0)
  45. StartButton = ctk.CTkButton(width=00,height=150,text="START",fg_color="green",corner_radius=50,font=("Arial",50),text_color="gray99",master=app)
  46. StartButton.place(x=50,y=300)
  47. ResetButton = ctk.CTkButton(width=00,height=150,text="RESET",fg_color="orange2",corner_radius=50,font=("Arial",50),text_color="gray99", master=app)
  48. ResetButton.place(x=50,y=500)
  49. scoreTitle = ctk.CTkLabel(width=50,height=20,text_color="white",text="Current Score", font=("Arial",50),master=app)
  50. scoreTitle.place(x=350, y=20)
  51. scoreLabel = ctk.CTkLabel(width=50,height=20,text_color="white",text=currentScore, font=("Arial",50),master=app)
  52. scoreLabel.place(x=500, y=100)
  53. nameEntry = ctk.CTkEntry(width=300,height=50,master=app,font=("Arial",50))
  54. nameEntry.place(x=370,y=200)
  55. nameEntryButton = ctk.CTkButton(width=50,height=50,text="ENTER",fg_color="green",font=("Arial",20),text_color="gray99", master=app)
  56. nameEntryButton.place(x=670,y=205)
  57. image = Image.open("./Bell Drawing.png")
  58. photo = ImageTk.PhotoImage(image)
  59. image_label = ctk.CTkLabel(image=photo,text="",width=10, master=app)
  60. image_label.place(x=800,y=0)
  61. dinger = ctk.CTkLabel(width=40,height=30,text="",fg_color="gray77",master=app)
  62. dinger.place(x=1405,y=900)
  63. placeLeaderboard()
  64. #label = customtkinter.CTkLabel(app, text=f"Current Highest Record is: {highestRecord} | this was acomplished by: {highestRecordName}", fg_color="brown")
  65. #progressbar = customtkinter.CTkProgressBar(app, height=300,orientation="vertical",width=40,fg_color="blue",progress_color="green",mode='determinate')
  66. #progressbar.set(float(f"0.{highestRecord}"))
  67. #label.grid(column=0,row=0)
  68. #progressbar.grid(column=25,row=8)
  69. def convertToNumbers(stringlist):
  70. dlist = stringlist.split(",")
  71. dlist = dlist[0:-1]
  72. intlist = []
  73. for string in dlist:
  74. intlist.append(float(string))
  75. return intlist
  76. async def runLoop():
  77. target_address = await connect()
  78. if target_address is not None:
  79. async with BleakClient(target_address) as client:
  80. print(f"Connected: {client.is_connected}")
  81. while 1:
  82. try:
  83. data = await client.read_gatt_char(CHARACTERISTIC_UUID)
  84. datastr = data.decode('utf-8') #convert byte to str
  85. print("time: {} ||| numbers: {}".format(time.time(),convertToNumbers(datastr)))
  86. except Exception:
  87. print("failed to get data, restarting connection.")
  88. def data():
  89. asyncio.run(getData())
  90. app.after(1000,data)
  91. app.mainloop()