GUI.py 4.4 KB

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