GUI.py 4.7 KB

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