{"id":5311,"date":"2020-03-02T09:46:11","date_gmt":"2020-03-02T08:46:11","guid":{"rendered":"https:\/\/pythonprogramming.altervista.org\/?p=5311"},"modified":"2023-03-05T16:15:21","modified_gmt":"2023-03-05T15:15:21","slug":"tkinter-python-site-launcher","status":"publish","type":"post","link":"https:\/\/pythonprogramming.altervista.org\/tkinter-python-site-launcher\/","title":{"rendered":"How to create an app to launch sites and local files with python"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">A site <strong>launcher<\/strong> with <strong>python<\/strong> easy to make.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I am going back to my <strong>pylauncher<\/strong> app to make it <strong>easier<\/strong> to <strong>modify<\/strong> for your purpose. This app creates a <strong>GUI<\/strong> with <strong>buttons<\/strong> that opens <strong>links<\/strong> on the web or other stuffs, simply writing the text, the address and the <strong>png<\/strong> file for the button in an external file called <strong>sites.site<\/strong> and saving the <strong>png<\/strong> file in a <strong>folder<\/strong> called <strong>icons<\/strong>.<br>Its <strong>goal<\/strong> make a nice <strong>GUI<\/strong> to remind you of sites and stuffs you&#8217;re working on and to make it with <strong>less<\/strong> <strong>code<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here you can find <a href=\"https:\/\/github.com\/formazione\/tkinter_tutorial\">the repository on Github in the folder py_site_launcher<\/a> (in the same repository there are other tkinter examples).<a href=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2020\/03\/buttonscomic.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5319\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2020\/03\/buttonscomic.png\" alt=\"\" width=\"922\" height=\"463\" srcset=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2020\/03\/buttonscomic.png 922w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2020\/03\/buttonscomic-320x161.png 320w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2020\/03\/buttonscomic-768x386.png 768w\" sizes=\"auto, (max-width: 922px) 100vw, 922px\" \/><\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This program lets you create a GUI with tkinter that automatically creates buttons with images, from an external file with the data written like this<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">mysite #https:\/\/formazione.github.io # site.png\ngoogle #https:\/\/google.com #google.png<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The &#8216;<strong>mysite<\/strong>&#8216; or &#8216;<strong>google<\/strong>&#8216; names are the text for the buttons, then there is the link that will be opened when you click the button and at last there is the image that will be on the button.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/03\/image-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"623\" height=\"500\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/03\/image-1.png\" alt=\"\" class=\"wp-image-12485\" srcset=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/03\/image-1.png 623w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/03\/image-1-320x257.png 320w\" sizes=\"auto, (max-width: 623px) 100vw, 623px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The code, that is very similar to the launcher app we saw on this blog some days ago, is re-thinked to make the things faster and to write less code for this app that is an utility. Later we will make another version to open other apps made in python or any other file on our computer. Think to it as an app launcher, that helps you to remind of your favourite sites or apps, all made with python.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2020\/03\/buttons.png\"><img loading=\"lazy\" decoding=\"async\" width=\"339\" height=\"145\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2020\/03\/buttons.png\" alt=\"window tkinter\" class=\"wp-image-5317\" srcset=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2020\/03\/buttons.png 339w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2020\/03\/buttons-320x137.png 320w\" sizes=\"auto, (max-width: 339px) 100vw, 339px\" \/><\/a><figcaption>How looks like the window with buttons<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">This is the full code. You can find the images on the repository at this link here.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import tkinter as tk\nimport tkinter.ttk as ttk\nimport os\n\nroot = tk.Tk()\nroot.title(\"My launcher\")\n\n\nclass Button:\n\n    row = 0\n    column = 0\n\n    def __init__(self, text, func, arg, image=\"\"):\n        if image != \"\":\n            image = tk.PhotoImage(file=image)\n        root.rowconfigure(Button.row, weight=1, minsize=40)\n        root.columnconfigure(Button.column, weight=1, minsize=40)\n        self.button = ttk.Button(\n            root,\n            text=text,\n            image=image,\n            compound=tk.LEFT,\n            command=lambda: func(arg))\n\n        self.button.grid(\n            row=Button.row,\n            column=Button.column,\n            sticky=\"nsew\", padx=0)\n        self.button.image = image\n        if Button.column &lt; 5:\n            Button.column += 1\n        else:\n            Button.column = 0\n            Button.row += 1\n\n\nwith open(\"sites.site\") as file:\n    file = file.readlines()\nfor line in file:\n    x = line.strip()\n    x = [f.strip() for f in x.split(\"#\")]\n    title, address, image = x\n    Button(title, os.startfile, address, image=\"icons\/\" + image)\n\nroot.mainloop()\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Remember to save a sites.site file with the data (for example):<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">mysite #https:\/\/formazione.github.io # site.png\ngoogle #https:\/\/google.com #google.png<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You can add or substitute the data at your will.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Live coding video for py_site_launcher app<\/h2>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Python \/ tkinter Site Launcher app\" width=\"747\" height=\"420\" src=\"https:\/\/www.youtube.com\/embed\/HM6R1LCyqAQ?feature=oembed&amp;enablejsapi=1\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In case of problems with the code, contact me on @pythonprogrammi on twitter.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Some code changes<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import tkinter as tk\nimport tkinter.ttk as ttk\nfrom glob import glob\nimport os\nimport subprocess\n\n\nroot = tk.Tk()\nroot.title(\"My launcher\")\n\nclass Button:\n\n    row = 0\n    column = 0\n    def __init__(self, text, func, arg, image=\"\"):\n        if image!= \"\":\n            image = tk.PhotoImage(file=image)\n        root.rowconfigure(Button.row, weight=1, minsize=40)\n        root.columnconfigure(Button.column, weight=1, minsize=40)\n        self.button = ttk.Button(\n                root,\n                text=text,\n                image=image,\n                compound=tk.LEFT,\n                command=lambda: subprocess.Popen([\"C:\\\\Program Files\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe\", arg]))\n                # command=lambda: func(f\"start  {arg}\"))\n\n        self.button.grid(row=Button.row, column=Button.column, sticky=\"nsew\", padx=0)\n        self.button.image = image\n        if Button.column &lt; 5:\n            Button.column += 1\n        else:\n            Button.column = 0\n            Button.row += 1\n\nsites = glob(\"*.site\")\nprint(sites)\nif sites != []:\n    with open(sites[0]) as file:\n        file = file.readlines()\n    for line in file:\n        x = line.strip()\n        x = [f.strip() for f in x.split(\"#\")]\n        title, address, image = x\n        Button(title, os.system, address, image=\"icons\/\" + image)\n\nroot.mainloop()\n<\/pre>\n\n\n<!-- se vuoi mettere un testo scorrevole\r\n[hoops name=\"typeWriterGen\"]\r\n\r\npoi metti un id diverso per ogni testo nella stessa pagina\r\n\r\n<div id=\"div01\">\r\n<script>\r\n\r\ntypeWriterGen(\"div01\",\"Esempio di testo scorrevole\");\r\n<\/script>\r\n\r\n-->\r\n<style>\r\n.avatar {\r\n  vertical-align: middle;\r\n  width: 100px;\r\n  height: 100px;\r\n  border-radius: 50%;\r\n}\r\n<\/style>\r\n\r\n<hr>\r\n\r\n<!-- NEWSLETTER LINK -->\r\n<a href=\"https:\/\/docs.google.com\/forms\/d\/e\/1FAIpQLSf7TniIPCWHDzCSGh2dYZaCwDvi9yLKS5ovFdKuK1sdfOvwEg\/viewform\">\r\n<img decoding=\"async\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/08\/image-13.png\" class=\"avatar\">\r\nSubscribe to the <b>newsletter<\/b> for updates<\/a><br>\r\n\r\n<!-- TKINTER TEMPLATE LINK -->\r\n<a href=\"https:\/\/pythonprogramming.altervista.org\/tkinter-templates\/\">\r\n<img decoding=\"async\" src=\"https:\/\/i0.wp.com\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/07\/image-26.png\" class=\"avatar\">\r\nTkinter templates<\/a><br>\r\n\r\n<!-- MY AVATAR PUT A LINK TO YOUTUBE CHANNEL-->\r\n<iframe loading=\"lazy\" frameborder=\"0\" src=\"https:\/\/itch.io\/embed\/711828\" width=\"552\" height=\"167\"><a href=\"https:\/\/pythonprogrammi.itch.io\/pysnake\">PySnake by PythonProgrammi<\/a><\/iframe>\r\n<br>\r\n<style>\r\n.avatar {\r\n  vertical-align: middle;\r\n  width: 100px;\r\n  height: 100px;\r\n  border-radius: 50%;\r\n}\r\n<\/style>\r\n\r\n\r\n<a href=\"https:\/\/www.youtube.com\/channel\/UCzbxq5e9gLiY-je2-br1rvg\">\r\n\t<img decoding=\"async\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2020\/10\/avatar64x64.png\" alt=\"Avatar\" class=\"avatar\">\r\n\t My youtube channel<\/a><br>\r\n\r\n<br>\r\n\r\nTwitter: <a href=\"https:\/\/twitter.com\/pythonprogrammi\">@pythonprogrammi - python_pygame<\/a>\r\n<h3>Claude's Games<\/h3>\r\n<p><a href=\"https:\/\/pythonprogramming.altervista.org\/random-daily-game-1-arkanoid\/\">Arkanoid<\/a><br>\r\n<a href=\"https:\/\/pythonprogramming.altervista.org\/platform-2d-with-pygame-made-with-claude\/\">Platform 2d<\/a><\/p> <!-- videogames made with claude -->\r\n<a href=\"https:\/\/pythonprogramming.altervista.org\/artifacts-games-day-1-memory-game\/\">1. Memory game<\/a>\r\n<h4>Videos<\/h4>\r\n<a href=\"https:\/\/youtu.be\/ciLjWWw5pLY\">Speech recognition game<\/a>\r\n<h3>Pygame's Platform Game<\/h3>\r\n\r\n<a href=\"https:\/\/pythonprogramming.altervista.org\/pygame-platform-game-5-sounds-and-mixer\/\"><img decoding=\"async\" src=\"https:\/\/i1.wp.com\/pythonprogramming.altervista.org\/wp-content\/uploads\/2020\/01\/climbercover.png?w=557&ssl=1\"\/ width=\"50%\"><\/a>\r\n<script>\r\nvar title = \"Platform Pygame\";\r\n\t\tvar links = [\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-animation-of-a-sprite-v-1-3\/\",\"Animation 1.3\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-sprite-animation-v-2-better-coding-test-it-checking-fps-on-the-screen\/\",\"Animation 1.2\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-how-to-display-the-frame-rate-fps-on-the-screen\/\",\"Display Frame rate\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-sprite-animation-update\/\",\"Animation 1.1\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-platformer-1\/\",\"Pygame Platform Game 1\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/python-platform-game-2\/\",\"Pygame Platform 2\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-platform-game-3-recap-cheatsheet\/\",\"Pygame PLatform 3 - recap and some Cheat Sheet\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-platform-game-4-background-and-stuffs\/\",\"Pygame Platform 4 - Background & organizing code\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-platform-game-5-sounds-and-mixer\/\",\"Pygame Platform 5 - Sounds\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/platform-game-in-detail-part-1\/\",\"Game in detail part 1\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/map-maker-1-2\/\", \"Map maker 1.2\"]\r\n\t\t];\r\n\t\t<\/script>\r\n<script>\r\n\t\r\nif (typeof next2 != \"undefined\"){let next2 = 0;}\r\n\t\r\nnext2 = 0;\r\n\thtml = \"\";\/\/<b style='color:coral;font-size:1.2em'>Other posts about \" + title + \"<\/b><br>\";\r\nfor (address of links) \r\n{\r\n\r\n\tif (next2 == 1){\r\n\t\thtml += \"<div style='background:coral'>\";\r\n\t\thtml += \"Next link => <a href='\" + address[0] + \"'>\" + address[1] + \"<\/a>\";\r\n\t\thtml += \"<\/div><br>\";\r\n\t\tnext2 = 0;\r\n\t}\r\n\tif (address[0] == document.URL) {\r\n\t\tnext2 = 1;\r\n\t}\r\n}\r\n\r\nif (typeof next != \"undefined\") {let next = 0;}\r\nif (typeof addressStart != \"undefined\") {let addressStart = \"\";}\r\nnext = 0;\r\naddressStart = \"<a href='\";\r\nfor (address of links) {\r\n\tif (next == 1){\r\n\t\thtml += \">>>\" + addressStart + address[0] + \"'>\" + address[1] + \"<\/a><br>\";\r\n\t\tnext = 0;\r\n\t}\r\n\telse if (addressStart + address[0] != document.URL)\r\n\t{\r\n\t\thtml += addressStart + address[0] + \"'>\" + address[1] + \"<\/a><br>\";\r\n\t}\r\n\telse\r\n\t{\r\n\t\tnext = 1;\r\n\t\tnext_address = address[0]\r\n\t\tnext_title = address[1]\r\n\t\thtml += \"<span style='color:gray'>\" + address[1] + \"<\/span><br>\";\r\n\t}\r\n\r\n}\r\n\r\n\thtml += `<span style=\"font-size:8px\">Powered by <a href=\"https:\/\/pythonprogramming.altervista.org\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2673\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/06\/altervista2.png\" alt=\"\" width=\"70\" height=\"25\" srcset=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/06\/altervista2.png 156w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/06\/altervista2-150x56.png 150w\" sizes=\"auto, (max-width: 70px) 100vw, 70px\" \/>pythonprogramming.altervista.org<\/a><\/span>`\r\n\thtml = \"<div style='background:yellow'>\" + html + \"<\/div>\";\r\n\tdocument.write(html)\r\n<\/script>\r\n\r\n<h3>Other Pygame's posts<\/h3>\r\n\r\n<script>\r\nvar title = \"Pygame's Posts\"\r\nvar links = [\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-platformer-1\/\",\"Platform game 1\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/make-a-platform-game-with-pygame-dafluffypotato\/\",\"DaFluffyPotato Platform Tutorials\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/python-and-classic-arcade-games-pong\/\",\"Pong Game Full\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/python-draws-in-colors-app-to-draw-with-pygame\/\",\"PyGameGIF 2\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-draw-app-with-animation\/\",\"PyGameGIF 1\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pydraw-2-0-app-to-draw-gif\/\",\"PyDraw 2.0\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-drawing-2\/\",\"Draw with Pygame\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/animation-with-pygame\",\"Sprite animation 1\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/animation-on-pygame-2-free-characters-and-more-actions\/\",\"Sprite animation 2\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/starting-with-pygame\/\",\"Starting movements with Pygame\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-3-move-sprite\/\", \"Move a Sprite\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-4-fonts\/\",\"Text and Fonts\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-animate-a-sprite\/\", \"Animate a sprite\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-and-mouse-events\/\",\"Mouse events\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pgp-aka-pygamepresentation-project\/\",\"Pygame presentation\"],\r\n\t[\"https:\/\/pythonprogramming.altervista.org\/moving-the-player-in-pygame-with-key-get_pressed\/\",\"How to use key.get_pressed()\"]\r\n]\r\n<\/script>\r\n\r\n\r\n<script>\r\n\t\r\nif (typeof next2 != \"undefined\"){let next2 = 0;}\r\n\t\r\nnext2 = 0;\r\n\thtml = \"\";\/\/<b style='color:coral;font-size:1.2em'>Other posts about \" + title + \"<\/b><br>\";\r\nfor (address of links) \r\n{\r\n\r\n\tif (next2 == 1){\r\n\t\thtml += \"<div style='background:coral'>\";\r\n\t\thtml += \"Next link => <a href='\" + address[0] + \"'>\" + address[1] + \"<\/a>\";\r\n\t\thtml += \"<\/div><br>\";\r\n\t\tnext2 = 0;\r\n\t}\r\n\tif (address[0] == document.URL) {\r\n\t\tnext2 = 1;\r\n\t}\r\n}\r\n\r\nif (typeof next != \"undefined\") {let next = 0;}\r\nif (typeof addressStart != \"undefined\") {let addressStart = \"\";}\r\nnext = 0;\r\naddressStart = \"<a href='\";\r\nfor (address of links) {\r\n\tif (next == 1){\r\n\t\thtml += \">>>\" + addressStart + address[0] + \"'>\" + address[1] + \"<\/a><br>\";\r\n\t\tnext = 0;\r\n\t}\r\n\telse if (addressStart + address[0] != document.URL)\r\n\t{\r\n\t\thtml += addressStart + address[0] + \"'>\" + address[1] + \"<\/a><br>\";\r\n\t}\r\n\telse\r\n\t{\r\n\t\tnext = 1;\r\n\t\tnext_address = address[0]\r\n\t\tnext_title = address[1]\r\n\t\thtml += \"<span style='color:gray'>\" + address[1] + \"<\/span><br>\";\r\n\t}\r\n\r\n}\r\n\r\n\thtml += `<span style=\"font-size:8px\">Powered by <a href=\"https:\/\/pythonprogramming.altervista.org\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2673\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/06\/altervista2.png\" alt=\"\" width=\"70\" height=\"25\" srcset=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/06\/altervista2.png 156w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/06\/altervista2-150x56.png 150w\" sizes=\"auto, (max-width: 70px) 100vw, 70px\" \/>pythonprogramming.altervista.org<\/a><\/span>`\r\n\thtml = \"<div style='background:yellow'>\" + html + \"<\/div>\";\r\n\tdocument.write(html)\r\n<\/script>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"Magically create a GUI with buttons that launches sites or apps withou even having to struggle with all thos tkinter code, but letting the code itself to buil it\n<a class=\"moretag\" href=\"https:\/\/pythonprogramming.altervista.org\/tkinter-python-site-launcher\/\"> [...]<\/a>","protected":false},"author":1,"featured_media":5315,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","footnotes":""},"categories":[1,49],"tags":[124,108,722,4,745,51],"class_list":["post-5311","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-examples","category-tkinter","tag-app","tag-buttons","tag-launcher","tag-python","tag-sites","tag-tkinter"],"avopt_banners_inside_post":true,"avopt_banners_on_page":true,"av_copy_from":"","av_sharing_message":"","av_sharing_allowed":true,"av_sharing_on":{"fb":[],"tw":[]},"av_allow_affiliate_banner":false,"av_allow_affiliate_multi_banner":false,"av_show_affiliation_buy_button":false,"av_post_rating":true,"av_have_post_rating_value":false,"av_is_artificial_intelligence_content":false,"_links":{"self":[{"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/posts\/5311","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/comments?post=5311"}],"version-history":[{"count":8,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/posts\/5311\/revisions"}],"predecessor-version":[{"id":12490,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/posts\/5311\/revisions\/12490"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/media\/5315"}],"wp:attachment":[{"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/media?parent=5311"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/categories?post=5311"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/tags?post=5311"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}