GUI.py 4.4 KB

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