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