{"id":379,"date":"2022-07-04T09:43:39","date_gmt":"2022-07-04T09:43:39","guid":{"rendered":"https:\/\/www.bleuio.com\/blog\/?p=379"},"modified":"2022-07-04T09:47:33","modified_gmt":"2022-07-04T09:47:33","slug":"python-gui-bluetooth-programming-with-tkinter","status":"publish","type":"post","link":"https:\/\/www.bleuio.com\/blog\/python-gui-bluetooth-programming-with-tkinter\/","title":{"rendered":"Python GUI Bluetooth Programming With Tkinter"},"content":{"rendered":"\n<p>Python has a lot of&nbsp;<a target=\"_blank\" href=\"http:\/\/wiki.python.org\/moin\/GuiProgramming\" rel=\"noreferrer noopener\">GUI frameworks<\/a>, but&nbsp;<a target=\"_blank\" href=\"https:\/\/wiki.python.org\/moin\/TkInter\" rel=\"noreferrer noopener\">Tkinter<\/a>&nbsp;is the only framework that\u2019s built into the Python standard library. Tkinter has several strengths. It\u2019s&nbsp;<strong>cross-platform<\/strong>, so the same code works on Windows, macOS, and Linux. Visual elements are rendered using native operating system elements, so applications built with Tkinter look like they belong on the platform where they\u2019re run.<\/p>\n\n\n\n<p>Tkinter is lightweight and relatively painless to use compared to other frameworks. This makes it a compelling choice for building GUI applications in Python, especially for applications where a modern sheen is unnecessary, and the top priority is to quickly build something functional and cross-platform.<\/p>\n\n\n\n<p>In this article, we will try to create a simple Python GUI application that can scan for nearby Bluetooth devices using Pyserial and shows the list on the screen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Requirments&nbsp;<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a target=\"_blank\" href=\"https:\/\/www.bleuio.com\/\" rel=\"noreferrer noopener\">Bluetooth Low Energy USB dongle BleuIO<\/a>&nbsp;(https:\/\/www.bleuio.com)<\/li><li><a target=\"_blank\" href=\"https:\/\/pypi.org\/project\/pyserial\/\" rel=\"noreferrer noopener\">Pyserial<\/a>.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Instructions<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Connect the BleuIO to your computer. The script uses pyserial to connect to the Bluetooth USB dongle BleuIO.<\/li><li>Update the script and write the correct COM port (line 25), where the dongle is connected.&nbsp;<\/li><li>After connecting to the dongle, we put the dongle into the central role using AT+CENTRAL so that it can scan for nearby Bluetooth devices.&nbsp;<\/li><li>Then we do a simple Gap scan using AT+GAPSCAN=3 command to scan for nearby Bluetooth devices for 3 seconds.<\/li><li>After that, we read the output from the serial port and filter the device to get the unique number of devices.<\/li><li>Then we add a timestamp when the scan was completed.&nbsp;<\/li><li>Finally, we sort the result by RSSI value before printing it out on screen.<\/li><li>&#8216;Scan again&#8217; button will do the whole process again.<\/li><\/ul>\n\n\n\n<p>Here is the final script file.\u00a0<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Gjort av William \r\n# 2022-06-16 \r\n# Smart Sensors Devices AB\r\n# \r\n# libraries that is necessary for tkinter to work\r\nimport tkinter as tk\r\nfrom tkinter import  ttk\r\n\r\n# this is imported for the dongle and also for the \"time.sleep()\" commands\r\nimport serial\r\nimport time\r\n\r\n# this is the library that is uesd to check the current time \r\nimport datetime\r\nnow = datetime.datetime.now()\r\n\r\n# this is what creates the main window\r\nmain_window = tk.Tk()\r\n\r\n#changes the titel of the window\r\nmain_window.title('Scan for nearby Bluetooth devices')\r\n\r\n\r\n# sets your port for the dongle\r\nyour_com_port = \"COM18\"  \r\nconnecting_to_dongle = True\r\n\r\n#changes the size of the screens window\r\nwindow_width = 900\r\nwindow_height = 500\r\n\r\n# get the screen dimension\r\nscreen_width = main_window.winfo_screenwidth()\r\nscreen_height = main_window.winfo_screenheight()\r\n# find the center point\r\ncenter_x = int(screen_width\/2 - window_width \/ 2)\r\ncenter_y = int(screen_height\/2 - window_height \/ 2)\r\n# set the position of the window to the center of the screen\r\nmain_window.geometry(f'{window_width}x{window_height}+{center_x}+{center_y}')\r\n\r\n# apply the grid layout\r\nmain_window.grid_columnconfigure(1, weight=1)\r\nmain_window.grid_rowconfigure(1, weight=1)\r\n\r\n\r\n# create the text widget\r\ntext = tk.Text(main_window, height=30, width=30)\r\ntext.grid(row=1, column=1, sticky=tk.EW)\r\n\r\n\r\n# this is the part of the code that communicates whit the dongle\r\nprint(\"Connecting to dongle...\")\r\nwhile connecting_to_dongle:\r\n    try:\r\n        console = serial.Serial(\r\n            port=your_com_port,\r\n            baudrate=57600,\r\n            parity=\"N\",\r\n            stopbits=1,\r\n            bytesize=8,\r\n            timeout=0,\r\n        )\r\n        if console.is_open.__bool__():\r\n            connecting_to_dongle = False\r\n    except:\r\n        print(\"Dongle not connected. Please reconnect Dongle.\")\r\n        time.sleep(5)\r\nprint(\"Connected to Dongle.\")\r\n\r\nconsole.write(str.encode(\"AT+CENTRAL\"))\r\nconsole.write(\"\\r\".encode())\r\nprint(\"Putting dongle in Central role.\")\r\ntime.sleep(0.1)\r\n\r\nconsole.write(str.encode(\"AT+GAPSCAN=3\"))\r\nconsole.write(\"\\r\".encode())\r\ntime.sleep(0.1)\r\nprint(\"Looking for nearby Bluetooth devices ...\")\r\ndongle_output2 = console.read(console.in_waiting)\r\ntime.sleep(3)\r\nprint(\"Scan Complete!\")\r\nfiltered = &#91;]\r\n\r\nfor dev in dongle_output2.decode().splitlines():\r\n    if len(dev)>20:\r\n        filtered.append(dev.split(maxsplit=1)&#91;1])\r\n\r\nseen = set()\r\nout = &#91;]\r\nfor elem in filtered:\r\n    prefix = elem.split(' ')&#91;1]\r\n    if prefix not in seen:\r\n        seen.add(prefix)\r\n        out.append(elem)\r\n\r\n# sort list \r\nout.sort(key=lambda x:int(x.split()&#91;3]), reverse=True)\r\n\r\n# writes out the amount of bluetooth devices found on the main screen\r\ntext.insert('0.5', 'Amount of devices found: ' + str(len(out)) + '\\n\\n')\r\n\r\n# funktion to get the current time\r\ndef get_time():\r\n    return now.strftime('%H:%M:%S')\r\n\r\n# prints out the time of the scan on the main screen\r\ntext.insert('1.0','The time of the scan: ' + str(get_time()) + '\\n\\n')\r\n\r\n# writes out the results on the main screen\r\nfor i in range(0,len(out)):\r\n    position = f'{i+5}.{len(out&#91;i])}'\r\n    tempStr = out&#91;i] + \"\\n\"\r\n    text.insert(position,f' {tempStr}')\r\n\r\n# is supposed to delet everyting on the list\r\nout.clear()\r\n\r\n#the funktion for the scan button\r\ndef button_clicked():\r\n    # enables the programe to change the results on the main screen to the new ones after the user presses the scan button\r\n    text&#91;'state'] = 'normal'\r\n    # update the current time.\r\n    now = datetime.datetime.now()\r\n    # funktion to get the current time\r\n    def get_time():\r\n        return now.strftime('%H:%M:%S')\r\n    # this simply puts a emty row betwen the results and the rest of the output on kommandotolken\r\n    print()\r\n    # this delets the previous output that is on the main screen\r\n    text.delete('0.0', tk.END)\r\n\r\n    # this is the part of the code that communicates whit the dongle \r\n    console.write(str.encode(\"AT+GAPSCAN=3\"))\r\n    console.write(\"\\r\".encode())\r\n    time.sleep(0.1)\r\n    \r\n    dongle_output2 = console.read(console.in_waiting)\r\n    time.sleep(3)\r\n    filtered = &#91;]\r\n\r\n    for dev in dongle_output2.decode().splitlines():\r\n        if len(dev)>20:\r\n            filtered.append(dev.split(maxsplit=1)&#91;1])\r\n\r\n    seen = set()\r\n    out = &#91;]\r\n    for elem in filtered:\r\n        prefix = elem.split(' ')&#91;1]\r\n        if prefix not in seen:\r\n            seen.add(prefix)\r\n            out.append(elem)\r\n\r\n    # sort list \r\n    out.sort(key=lambda x:int(x.split()&#91;3]), reverse=True)\r\n\r\n    \r\n    #writes out the time of the scan on the main screen\r\n    text.insert('1.0','The time of the scan: ' + str(get_time()) + '\\n\\n')\r\n\r\n     # writes out the amount of bluetooth devices found on the main screen\r\n    text.insert('0.0', 'Amount of devices found: ' + str(len(out)) + '\\n\\n')\r\n\r\n    # writes out the results on the main screen\r\n    for i in range(0,len(out)):\r\n        position = f'{i+5}.{len(out&#91;i])}'\r\n        tempStr = out&#91;i] + \"\\n\" \r\n        text.insert(position,f' {tempStr}')\r\n\r\n    # makes it so that you cant edite the results on the main screen\r\n    text&#91;'state'] = 'disabled'\r\n\r\n#what calls the function for the scan button. also fixes what the user will see as the buttons name.\r\nmain_button = ttk.Button(\r\n    main_window,\r\n    text='Scan again',\r\n    command=lambda: button_clicked()\r\n)\r\n# creat the scan button \r\nmain_button.grid(row=0, column=1, sticky=tk.EW)\r\n\r\n# just an exit button.\r\nexit_button = ttk.Button(\r\n    main_window,\r\n    text='Exit',\r\n    command=lambda: main_window.quit()\r\n)\r\n# this determens were the exit button is located \r\nexit_button.grid(row=2, column=1, sticky=tk.EW)\r\n\r\n# makes it so that you cant edite the results on the main screen\r\ntext&#91;'state'] = 'disabled'\r\n\r\n# keeps the main window open\r\nmain_window.mainloop()\r\n\r\ntime.sleep(1)\r\nconsole.close()<\/code><\/pre>\n\n\n\n<p>Source code is available at https:\/\/github.com\/smart-sensor-devices-ab\/python_gui_tkinter_bluetooth.git<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Run the script<\/h3>\n\n\n\n<p>To run the script we use start<\/p>\n\n\n\n<p><strong><code> pythonw Scan_ble.pyw<\/code><\/strong><\/p>\n\n\n\n<p>Note : Scan_ble.pyw is the file name<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Output<\/h3>\n\n\n\n<p>After running the script, we see a total 25 devices found nearby. We can scan again using the &#8216;Scan again&#8217; button<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"806\" src=\"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2022\/07\/image-1024x806.png\" alt=\"\" class=\"wp-image-380\" srcset=\"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2022\/07\/image-1024x806.png 1024w, https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2022\/07\/image-300x236.png 300w, https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2022\/07\/image-768x604.png 768w, https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2022\/07\/image.png 1066w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Python has a lot of&nbsp;GUI frameworks, but&nbsp;Tkinter&nbsp;is the only framework that\u2019s built into the Python standard library. Tkinter has several strengths. It\u2019s&nbsp;cross-platform, so the same code works on Windows, macOS, and Linux. Visual elements are rendered using native operating system elements, so applications built with Tkinter look like they belong on the platform where they\u2019re [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":381,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,2],"tags":[],"class_list":["post-379","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bleuio","category-bleuio-tutorial"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Python GUI Bluetooth Programming With Tkinter - BleuIO - Create Bluetooth Low Energy application<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.bleuio.com\/blog\/python-gui-bluetooth-programming-with-tkinter\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python GUI Bluetooth Programming With Tkinter - BleuIO - Create Bluetooth Low Energy application\" \/>\n<meta property=\"og:description\" content=\"Python has a lot of&nbsp;GUI frameworks, but&nbsp;Tkinter&nbsp;is the only framework that\u2019s built into the Python standard library. Tkinter has several strengths. It\u2019s&nbsp;cross-platform, so the same code works on Windows, macOS, and Linux. Visual elements are rendered using native operating system elements, so applications built with Tkinter look like they belong on the platform where they\u2019re [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.bleuio.com\/blog\/python-gui-bluetooth-programming-with-tkinter\/\" \/>\n<meta property=\"og:site_name\" content=\"BleuIO - Create Bluetooth Low Energy application\" \/>\n<meta property=\"article:published_time\" content=\"2022-07-04T09:43:39+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-07-04T09:47:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2022\/07\/python-tkinter-bluetooth-programming.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"644\" \/>\n\t<meta property=\"og:image:height\" content=\"425\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"BleuIO\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/python-gui-bluetooth-programming-with-tkinter\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/python-gui-bluetooth-programming-with-tkinter\\\/\"},\"author\":{\"name\":\"BleuIO\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/#\\\/schema\\\/person\\\/89bc581382d5964043f96efc54b75b80\"},\"headline\":\"Python GUI Bluetooth Programming With Tkinter\",\"datePublished\":\"2022-07-04T09:43:39+00:00\",\"dateModified\":\"2022-07-04T09:47:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/python-gui-bluetooth-programming-with-tkinter\\\/\"},\"wordCount\":355,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/python-gui-bluetooth-programming-with-tkinter\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/07\\\/python-tkinter-bluetooth-programming.jpg\",\"articleSection\":[\"BleuIO\",\"BleuIO tutorial\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/python-gui-bluetooth-programming-with-tkinter\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/python-gui-bluetooth-programming-with-tkinter\\\/\",\"url\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/python-gui-bluetooth-programming-with-tkinter\\\/\",\"name\":\"Python GUI Bluetooth Programming With Tkinter - BleuIO - Create Bluetooth Low Energy application\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/python-gui-bluetooth-programming-with-tkinter\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/python-gui-bluetooth-programming-with-tkinter\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/07\\\/python-tkinter-bluetooth-programming.jpg\",\"datePublished\":\"2022-07-04T09:43:39+00:00\",\"dateModified\":\"2022-07-04T09:47:33+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/#\\\/schema\\\/person\\\/89bc581382d5964043f96efc54b75b80\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/python-gui-bluetooth-programming-with-tkinter\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/python-gui-bluetooth-programming-with-tkinter\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/python-gui-bluetooth-programming-with-tkinter\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/07\\\/python-tkinter-bluetooth-programming.jpg\",\"contentUrl\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/07\\\/python-tkinter-bluetooth-programming.jpg\",\"width\":644,\"height\":425,\"caption\":\"python tkinter bluetooth programming\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/python-gui-bluetooth-programming-with-tkinter\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python GUI Bluetooth Programming With Tkinter\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/\",\"name\":\"BleuIO - Create Bluetooth Low Energy application\",\"description\":\"Learn Bluetooth Low Energy programming and build Bluetooth Low Energy Application\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/#\\\/schema\\\/person\\\/89bc581382d5964043f96efc54b75b80\",\"name\":\"BleuIO\",\"sameAs\":[\"https:\\\/\\\/www.bleuio.com\\\/blog\"],\"url\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/author\\\/biadmin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Python GUI Bluetooth Programming With Tkinter - BleuIO - Create Bluetooth Low Energy application","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.bleuio.com\/blog\/python-gui-bluetooth-programming-with-tkinter\/","og_locale":"en_US","og_type":"article","og_title":"Python GUI Bluetooth Programming With Tkinter - BleuIO - Create Bluetooth Low Energy application","og_description":"Python has a lot of&nbsp;GUI frameworks, but&nbsp;Tkinter&nbsp;is the only framework that\u2019s built into the Python standard library. Tkinter has several strengths. It\u2019s&nbsp;cross-platform, so the same code works on Windows, macOS, and Linux. Visual elements are rendered using native operating system elements, so applications built with Tkinter look like they belong on the platform where they\u2019re [&hellip;]","og_url":"https:\/\/www.bleuio.com\/blog\/python-gui-bluetooth-programming-with-tkinter\/","og_site_name":"BleuIO - Create Bluetooth Low Energy application","article_published_time":"2022-07-04T09:43:39+00:00","article_modified_time":"2022-07-04T09:47:33+00:00","og_image":[{"width":644,"height":425,"url":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2022\/07\/python-tkinter-bluetooth-programming.jpg","type":"image\/jpeg"}],"author":"BleuIO","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.bleuio.com\/blog\/python-gui-bluetooth-programming-with-tkinter\/#article","isPartOf":{"@id":"https:\/\/www.bleuio.com\/blog\/python-gui-bluetooth-programming-with-tkinter\/"},"author":{"name":"BleuIO","@id":"https:\/\/www.bleuio.com\/blog\/#\/schema\/person\/89bc581382d5964043f96efc54b75b80"},"headline":"Python GUI Bluetooth Programming With Tkinter","datePublished":"2022-07-04T09:43:39+00:00","dateModified":"2022-07-04T09:47:33+00:00","mainEntityOfPage":{"@id":"https:\/\/www.bleuio.com\/blog\/python-gui-bluetooth-programming-with-tkinter\/"},"wordCount":355,"commentCount":0,"image":{"@id":"https:\/\/www.bleuio.com\/blog\/python-gui-bluetooth-programming-with-tkinter\/#primaryimage"},"thumbnailUrl":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2022\/07\/python-tkinter-bluetooth-programming.jpg","articleSection":["BleuIO","BleuIO tutorial"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.bleuio.com\/blog\/python-gui-bluetooth-programming-with-tkinter\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.bleuio.com\/blog\/python-gui-bluetooth-programming-with-tkinter\/","url":"https:\/\/www.bleuio.com\/blog\/python-gui-bluetooth-programming-with-tkinter\/","name":"Python GUI Bluetooth Programming With Tkinter - BleuIO - Create Bluetooth Low Energy application","isPartOf":{"@id":"https:\/\/www.bleuio.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.bleuio.com\/blog\/python-gui-bluetooth-programming-with-tkinter\/#primaryimage"},"image":{"@id":"https:\/\/www.bleuio.com\/blog\/python-gui-bluetooth-programming-with-tkinter\/#primaryimage"},"thumbnailUrl":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2022\/07\/python-tkinter-bluetooth-programming.jpg","datePublished":"2022-07-04T09:43:39+00:00","dateModified":"2022-07-04T09:47:33+00:00","author":{"@id":"https:\/\/www.bleuio.com\/blog\/#\/schema\/person\/89bc581382d5964043f96efc54b75b80"},"breadcrumb":{"@id":"https:\/\/www.bleuio.com\/blog\/python-gui-bluetooth-programming-with-tkinter\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.bleuio.com\/blog\/python-gui-bluetooth-programming-with-tkinter\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.bleuio.com\/blog\/python-gui-bluetooth-programming-with-tkinter\/#primaryimage","url":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2022\/07\/python-tkinter-bluetooth-programming.jpg","contentUrl":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2022\/07\/python-tkinter-bluetooth-programming.jpg","width":644,"height":425,"caption":"python tkinter bluetooth programming"},{"@type":"BreadcrumbList","@id":"https:\/\/www.bleuio.com\/blog\/python-gui-bluetooth-programming-with-tkinter\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.bleuio.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Python GUI Bluetooth Programming With Tkinter"}]},{"@type":"WebSite","@id":"https:\/\/www.bleuio.com\/blog\/#website","url":"https:\/\/www.bleuio.com\/blog\/","name":"BleuIO - Create Bluetooth Low Energy application","description":"Learn Bluetooth Low Energy programming and build Bluetooth Low Energy Application","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.bleuio.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.bleuio.com\/blog\/#\/schema\/person\/89bc581382d5964043f96efc54b75b80","name":"BleuIO","sameAs":["https:\/\/www.bleuio.com\/blog"],"url":"https:\/\/www.bleuio.com\/blog\/author\/biadmin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/posts\/379","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/comments?post=379"}],"version-history":[{"count":2,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/posts\/379\/revisions"}],"predecessor-version":[{"id":383,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/posts\/379\/revisions\/383"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/media\/381"}],"wp:attachment":[{"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/media?parent=379"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/categories?post=379"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/tags?post=379"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}