GUI.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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 bleak import BleakScanner
  8. from bleak import BleakClient
  9. target_name = "Long name works now"
  10. global target_address
  11. target_address = None
  12. SERVICE_UUID= "d86aecf2-d87d-489f-b664-b02de82b2fc0"
  13. CHARACTERISTIC_UUID= "d86aecf2-d87d-489f-b664-b02de82b2fc0"
  14. async def connect():
  15. devices = await BleakScanner.discover()
  16. for d in devices:
  17. print(d)
  18. if target_name == d.name:
  19. target_address = d.address
  20. print("found target {} bluetooth device with address {} ".format(target_name,target_address))
  21. return target_address
  22. break
  23. else:
  24. print("could not find device")
  25. #function that will recive the ESP32 data
  26. def getCurrentScore():
  27. #than do math to figure out power level
  28. return 30
  29. names = []
  30. scores = []
  31. currentScore = getCurrentScore()
  32. highestScore = 100
  33. highScoreName = ""
  34. names = []
  35. scores = []
  36. if currentScore > highestScore :
  37. highestScore = currentScore
  38. f = open("scores.txt", "rw")
  39. #f.write(highestScore + highScoreName)
  40. scores.append(highestScore)
  41. names.append(highScoreName)
  42. ctk.set_appearance_mode("System") # Modes: system (default), light, dark
  43. ctk.set_default_color_theme("blue") # Themes: blue (default), dark-blue, green
  44. app = ctk.CTk() # create CTk window like you do with the Tk window
  45. app.geometry("1440x1024")
  46. canvas = ctk.CTkCanvas(app, width=500, height=480,highlightthickness=0,)
  47. canvas.config(background="white")
  48. canvas.place(x=0,y=0)
  49. def placeLeaderboard():
  50. canvas.create_rectangle(0, 0, 500, 500, fill="grey20", width=2) #grey14 to match background
  51. intx = 0
  52. inty = 80
  53. for i in range(len(names)):
  54. label1 = ctk.CTkLabel(width=249,height=79,text_color="white",text=names[i], font=("Arial",30),master=app)
  55. label1.place(x=intx,y=inty)
  56. label2 = ctk.CTkLabel(width=249,height=79,text_color="white",text=scores[i], font=("Arial",30),master=app)
  57. label2.place(x=intx+250,y=inty)
  58. inty+=80
  59. LEADERBOARD = ctk.CTkLabel(width=499,height=79,text_color="white",text="Leaderboard", font=("Arial",50),master=app)
  60. LEADERBOARD.place(x=0,y=0)
  61. StartButton = ctk.CTkButton(width=400,height=150,text="START",fg_color="green",corner_radius=50,font=("Arial",50),text_color="gray99",master=app)
  62. StartButton.place(x=50,y=600)
  63. ResetButton = ctk.CTkButton(width=400,height=150,text="RESET",fg_color="orange2",corner_radius=50,font=("Arial",50),text_color="gray99", master=app)
  64. ResetButton.place(x=50,y=800)
  65. scoreTitle = ctk.CTkLabel(width=50,height=20,text_color="white",text="Current Score:", font=("Arial",50),master=app)
  66. scoreTitle.place(x=600, y=20)
  67. scoreLabel = ctk.CTkLabel(width=50,height=20,text_color="white",text=currentScore, font=("Arial",50),master=app)
  68. scoreLabel.place(x=740, y=100)
  69. nameEntry = ctk.CTkEntry(width=350,height=50,master=app,font=("Arial",50))
  70. nameEntry.place(x=600,y=200)
  71. nameEntryButton = ctk.CTkButton(width=50,height=50,text="ENTER",fg_color="green",font=("Arial",20),text_color="gray99", master=app)
  72. nameEntryButton.place(x=980,y=205)
  73. image = Image.open("./Bell Drawing.png")
  74. photo = ImageTk.PhotoImage(image)
  75. image_label = ctk.CTkLabel(image=photo,text="",width=20, master=app)
  76. image_label.place(x=1200,y=0)
  77. dinger = ctk.CTkLabel(width=40,height=30,text="",fg_color="gray77",master=app)
  78. dinger.place(x=1405,y=900)
  79. placeLeaderboard()
  80. #label = customtkinter.CTkLabel(app, text=f"Current Highest Record is: {highestRecord} | this was acomplished by: {highestRecordName}", fg_color="brown")
  81. #progressbar = customtkinter.CTkProgressBar(app, height=300,orientation="vertical",width=40,fg_color="blue",progress_color="green",mode='determinate')
  82. #progressbar.set(float(f"0.{highestRecord}"))
  83. #label.grid(column=0,row=0)
  84. #progressbar.grid(column=25,row=8)
  85. def convertToNumbers(stringlist):
  86. dlist = stringlist.split(",")
  87. dlist = dlist[0:-1]
  88. intlist = []
  89. for string in dlist:
  90. intlist.append(float(string))
  91. return intlist
  92. async def getData():
  93. target_address = await connect()
  94. if target_address is not None:
  95. async with BleakClient(target_address) as client:
  96. print(f"Connected: {client.is_connected}")
  97. while 1:
  98. try:
  99. data = await client.read_gatt_char(CHARACTERISTIC_UUID)
  100. datastr = data.decode('utf-8') #convert byte to str
  101. print("time: {} ||| numbers: {}".format(time.time(),convertToNumbers(datastr)))
  102. except Exception:
  103. print("failed to get data, restarting connection.")
  104. def data():
  105. asyncio.run(getData())
  106. app.after(1000,data)
  107. app.mainloop()