{"id":21251,"date":"2022-11-12T18:06:10","date_gmt":"2022-11-12T12:36:10","guid":{"rendered":"https:\/\/jassweb.com\/solved\/solved-why-the-secondary-gui-opens-before-the-primary-gui\/"},"modified":"2022-11-12T18:06:10","modified_gmt":"2022-11-12T12:36:10","slug":"solved-why-the-secondary-gui-opens-before-the-primary-gui","status":"publish","type":"post","link":"https:\/\/jassweb.com\/solved\/solved-why-the-secondary-gui-opens-before-the-primary-gui\/","title":{"rendered":"[Solved] Why the secondary GUI opens before the primary GUI?"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div id=\"answer-64488290\" class=\"answer js-answer accepted-answer js-accepted-answer\" data-answerid=\"64488290\" data-parentid=\"64487283\" data-score=\"1\" data-position-on-page=\"1\" data-highest-scored=\"1\" data-question-has-accepted-highest-score=\"1\" itemprop=\"acceptedAnswer\" itemscope itemtype=\"https:\/\/schema.org\/Answer\">\n<div class=\"post-layout\">\n<div class=\"votecell post-layout--left\"><\/div>\n<div class=\"answercell post-layout--right\">\n<div class=\"s-prose js-post-body\" itemprop=\"text\">\n<p>So there are several red flags right away&#8230; (multiple <code>mainloop<\/code> calls, classes in classes, calling <code>root<\/code> inside <code>listbox<\/code>)<\/p>\n<p>It seems like you are missing one of the main concepts of many gui frameworks, and that is that 1 window is not 1 application. In general the &#8220;root&#8221; of the application is the controller in the background handling events from all windows the program has spawned. The processing of those events happens in the <code>mainloop<\/code> function. When you define your <code>Notepad<\/code> class, at the very end you create a class attribute by calling <code>root2 = listbox()<\/code>, assign it some properties, and then run its <code>mainloop<\/code>. This happens at the time of definition because it&#8217;s not inside a method, and blocks you from ever making it past this line.<\/p>\n<p>I also notice that you are trying to use <code>root<\/code> as if it&#8217;s a global inside <code>listbox.selection<\/code>. This causes a <code>NameError<\/code> as you have not used the <code>global<\/code> keyword. It is far more common to pass &#8220;self&#8221; to child objects at the time of creation rather than to try to access the parent via inheritance. I think this may also be related to why you defined <code>listbox<\/code> inside <code>Notebook<\/code>. This is technically valid, but very uncommon. Putting a class inside another class does not automatically make the inner class inherit anything from the parent class, and only makes it part of the namespace of the parent class. In the example of GUI&#8217;s it is more common to separate different parts of a gui by creating separate modules which are imported where needed. This way files are smaller and easier to read for large applications. In this instance, I wouldn&#8217;t bother, but I would lake <code>listbox<\/code> its own class.<\/p>\n<p>Here&#8217;s what I would do to fix your situations (please read through comments I made as well):<\/p>\n<pre><code>from tkinter import *\nfrom tkinter import messagebox as msg\nfrom tkinter.filedialog import askopenfilename, asksaveasfilename\nfrom functools import partial\nimport os\n\nclass Notepad(Tk):\n\n    \"\"\"Class for notepad \"\"\"\n#  Command for menus-\n\n    def newFile(self):\n \n        self.crfile = None\n        self.txtarea.delete(1.0, END)\n\n    def saveFile(self):\n\n        if self.crfile == None:\n            self.crfile = asksaveasfilename(initialfile=\"Untitled.txt\",\n                                            defaultextension=\".txt\", filetypes=[(\"All Files\", \"*.*\"), (\"Text Documents\", \"*.txt\")])\n            if self.crfile == \"\":\n                self.crfile = None\n            else:\n                # Save as new file\n                with open(self.crfile, \"w\") as f:\n                    f.write(self.txtarea.get(1.0, END))\n                    self.title(os.path.basename(\n                        self.crfile + \"- Tanish's Notepad\"))\n        else:\n            # Save the file\n            with open(self.crfile, \"w\") as f:\n                f.write(self.txtarea.get(1.0, END))\n                self.title(os.path.basename(\n                    self.crfile + \"- Tanish's Notepad\"))\n\n    def openFile(self):\n\n        self.crfile = askopenfilename(defaultextension=\".txt\", filetypes=[\n                                      (\"All Files\", \"*.*\"), (\"Text Documents\", \"*.txt\")])\n        if self.crfile == \"\":\n            self.crfile = None\n        else:\n            self.title(os.path.basename(self.crfile) +\n                       \"-\" + \"Tanish's Notepad\")\n            self.txtarea.delete(1.0, END)\n            with open(self.crfile, \"r\") as f:\n                self.txtarea.insert(1.0, f.read())\n\n    # commands for edit menu-\n\n    def copy(self):\n        self.txtarea.event_generate((\"&lt;&lt;Copy&gt;&gt;\"))\n\n    def paste(self):\n        self.txtarea.event_generate((\"&lt;&lt;Paste&gt;&gt;\"))\n\n    def cut(self):\n        self.txtarea.event_generate((\"&lt;&lt;Cut&gt;&gt;\"))\n\n    # commands for help menu-\n\n    def About(self):\n        msg.showinfo(\"Tanish's Notepad -Help\",\n                     \"This is a simple notepad made by Tanish Sarmah\")\n\n    def menus(self):\n\n        # TODO Menus\n        mainmenu = Menu(self, tearoff=\"0\")\n        # file menu\n        file = Menu(mainmenu, tearoff=0)\n        # Creating new file\n        file.add_command(label=\"New\", command=self.newFile)\n        # Saving the current file\n        file.add_command(label=\"Save\", command=self.saveFile)\n        # Opening a Pre-Existing file\n        file.add_command(label=\"Open\", command=self.openFile)\n        file.add_separator()\n        file.add_command(label=\"Exit\", command=self.destroy)  # Exit command\n        mainmenu.add_cascade(menu=file, label=\"File\")\n        self.config(menu=mainmenu)\n\n        # Edit menu---\n        edit = Menu(mainmenu, tearoff=0)\n        # To cut any part of the Textarea\n        edit.add_command(label=\"Cut\", command=self.cut)\n        # To copy any part of the Textarea\n        edit.add_command(label=\"Copy\", command=self.copy)\n        # To paste any cut or copied Text.\n        edit.add_command(label=\"Paste\", command=self.paste)\n        mainmenu.add_cascade(menu=edit, label=\"Edit\")\n        self.config(menu=mainmenu)\n\n        # Help menu---\n        helpm = Menu(mainmenu, tearoff=0)\n        # Displays about the notepad\n        helpm.add_command(label=\"About\", command=self.About)\n        mainmenu.add_cascade(menu=helpm, label=\"Help\")\n        self.config(menu=mainmenu)\n\n        # Window menu\n        win = Menu(mainmenu, tearoff=0)\n        win.add_command(label=\"Colour\", command=partial(listbox, self)) #we'll use a partial functino to bind self as the parent here. listbx is now called in __init__\n        mainmenu.add_cascade(menu=win, label=\"Window\")\n        self.config(menu=mainmenu)\n\n    def textwid(self):\n\n        # TODO Text widget---\n\n        self.txtarea = Text(self)\n        self.crfile = None\n        self.txtarea.pack(expand=True, fill=BOTH)\n        # TODO Scrollbar---\n        self.scbar = Scrollbar(self.txtarea)\n        self.txtarea.config(yscrollcommand=self.scbar.set)\n        self.scbar.config(command=self.txtarea.yview)\n        self.scbar.pack(side=RIGHT, fill=BOTH)\n\nclass listbox(Toplevel): \n    #listbox moved to its own class to prevent confusion of inheritance\n    #child windows should not inherit from application root, rather from \"Toplevel\"\n    def __init__(self, parent): \n        #moved window setup to __init__ method as we are creating a new window each time we want this menu\n        #calling mainloop() is not necessary, as the \"mainloop\" from if __name__ == \"__main__\": is now running\n        super().__init__()\n        self.parent = parent #we need access to the parent so we chan change its color\n        self.geometry(\"300x200\")\n        self.title(\"Window-Colour\")\n        self.listbx()\n    \n    def listbx(self):\n        self.lbx = Listbox(self)\n        colours = [\"blue\", \"red\", \"yellow\",\n                    \"grey\", \"green\", \"light blue\", \"black\"]\n        for c in colours:\n            self.lbx.insert(END, c)\n        self.lbx.pack()\n        self.lbx.bind(\"&lt;&lt;ListboxSelect&gt;&gt;\", self.selection)\n\n    def selection(self, event):\n        \"\"\"Selection of colour from the  lisbox above to apply changes\"\"\"\n        colour = self.lbx.get(ANCHOR)\n        msgselect = msg.askokcancel(\n            \"Window-Colour\", \"Confirm the colour to apply to the window\")\n        if msgselect == True:\n            self.parent.configure(bg=colour) #call the parent without a global because we inherited it earlier\n            self.destroy()\n        else:\n            self.destroy()\n        \n\nif __name__ == \"__main__\":\n    # Basic tkinter startup\n\n    root = Notepad()\n    root.geometry(\"800x700\")\n    root.title(\"Tanish's Notepad-Untitled-1\")\n    root.menus()\n    root.textwid()\n    # root.wm_iconbitmap(\"noteicon.ico\") #I didn't have this file, so I commented it out\n     \n    root.mainloop()\n<\/code><\/pre>\n<\/p><\/div>\n<div class=\"mt24\"><\/div>\n<\/div>\n<p>            <span class=\"d-none\" itemprop=\"commentCount\">2<\/span> <\/p><\/div>\n<\/div>\n<p>[ad_2]<\/p>\n<p>solved Why the secondary GUI opens before the primary GUI? <\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] So there are several red flags right away&#8230; (multiple mainloop calls, classes in classes, calling root inside listbox) It seems like you are missing one of the main concepts of many gui frameworks, and that is that 1 window is not 1 application. In general the &#8220;root&#8221; of the application is the controller in &#8230; <a title=\"[Solved] Why the secondary GUI opens before the primary GUI?\" class=\"read-more\" href=\"https:\/\/jassweb.com\/solved\/solved-why-the-secondary-gui-opens-before-the-primary-gui\/\" aria-label=\"More on [Solved] Why the secondary GUI opens before the primary GUI?\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[320],"tags":[349,482,768],"class_list":["post-21251","post","type-post","status-publish","format-standard","hentry","category-solved","tag-python","tag-python-3-x","tag-tkinter"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>[Solved] Why the secondary GUI opens before the primary GUI? - JassWeb<\/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:\/\/jassweb.com\/solved\/solved-why-the-secondary-gui-opens-before-the-primary-gui\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[Solved] Why the secondary GUI opens before the primary GUI? - JassWeb\" \/>\n<meta property=\"og:description\" content=\"[ad_1] So there are several red flags right away&#8230; (multiple mainloop calls, classes in classes, calling root inside listbox) It seems like you are missing one of the main concepts of many gui frameworks, and that is that 1 window is not 1 application. In general the &#8220;root&#8221; of the application is the controller in ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jassweb.com\/solved\/solved-why-the-secondary-gui-opens-before-the-primary-gui\/\" \/>\n<meta property=\"og:site_name\" content=\"JassWeb\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-12T12:36:10+00:00\" \/>\n<meta name=\"author\" content=\"Kirat\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kirat\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-why-the-secondary-gui-opens-before-the-primary-gui\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-why-the-secondary-gui-opens-before-the-primary-gui\/\"},\"author\":{\"name\":\"Kirat\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\"},\"headline\":\"[Solved] Why the secondary GUI opens before the primary GUI?\",\"datePublished\":\"2022-11-12T12:36:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-why-the-secondary-gui-opens-before-the-primary-gui\/\"},\"wordCount\":311,\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"keywords\":[\"python\",\"python-3.x\",\"tkinter\"],\"articleSection\":[\"Solved\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-why-the-secondary-gui-opens-before-the-primary-gui\/\",\"url\":\"https:\/\/jassweb.com\/solved\/solved-why-the-secondary-gui-opens-before-the-primary-gui\/\",\"name\":\"[Solved] Why the secondary GUI opens before the primary GUI? - JassWeb\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#website\"},\"datePublished\":\"2022-11-12T12:36:10+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-why-the-secondary-gui-opens-before-the-primary-gui\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jassweb.com\/solved\/solved-why-the-secondary-gui-opens-before-the-primary-gui\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-why-the-secondary-gui-opens-before-the-primary-gui\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jassweb.com\/solved\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[Solved] Why the secondary GUI opens before the primary GUI?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jassweb.com\/solved\/#website\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"name\":\"JassWeb\",\"description\":\"Build High-quality Websites\",\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jassweb.com\/solved\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\",\"name\":\"Jass Web\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"contentUrl\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"width\":693,\"height\":132,\"caption\":\"Jass Web\"},\"image\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\",\"name\":\"Kirat\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586\",\"contentUrl\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586\",\"caption\":\"Kirat\"},\"sameAs\":[\"http:\/\/jassweb.com\"],\"url\":\"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[Solved] Why the secondary GUI opens before the primary GUI? - JassWeb","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:\/\/jassweb.com\/solved\/solved-why-the-secondary-gui-opens-before-the-primary-gui\/","og_locale":"en_US","og_type":"article","og_title":"[Solved] Why the secondary GUI opens before the primary GUI? - JassWeb","og_description":"[ad_1] So there are several red flags right away&#8230; (multiple mainloop calls, classes in classes, calling root inside listbox) It seems like you are missing one of the main concepts of many gui frameworks, and that is that 1 window is not 1 application. In general the &#8220;root&#8221; of the application is the controller in ... Read more","og_url":"https:\/\/jassweb.com\/solved\/solved-why-the-secondary-gui-opens-before-the-primary-gui\/","og_site_name":"JassWeb","article_published_time":"2022-11-12T12:36:10+00:00","author":"Kirat","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirat","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jassweb.com\/solved\/solved-why-the-secondary-gui-opens-before-the-primary-gui\/#article","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/solved-why-the-secondary-gui-opens-before-the-primary-gui\/"},"author":{"name":"Kirat","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31"},"headline":"[Solved] Why the secondary GUI opens before the primary GUI?","datePublished":"2022-11-12T12:36:10+00:00","mainEntityOfPage":{"@id":"https:\/\/jassweb.com\/solved\/solved-why-the-secondary-gui-opens-before-the-primary-gui\/"},"wordCount":311,"publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"keywords":["python","python-3.x","tkinter"],"articleSection":["Solved"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/jassweb.com\/solved\/solved-why-the-secondary-gui-opens-before-the-primary-gui\/","url":"https:\/\/jassweb.com\/solved\/solved-why-the-secondary-gui-opens-before-the-primary-gui\/","name":"[Solved] Why the secondary GUI opens before the primary GUI? - JassWeb","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/#website"},"datePublished":"2022-11-12T12:36:10+00:00","breadcrumb":{"@id":"https:\/\/jassweb.com\/solved\/solved-why-the-secondary-gui-opens-before-the-primary-gui\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jassweb.com\/solved\/solved-why-the-secondary-gui-opens-before-the-primary-gui\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jassweb.com\/solved\/solved-why-the-secondary-gui-opens-before-the-primary-gui\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jassweb.com\/solved\/"},{"@type":"ListItem","position":2,"name":"[Solved] Why the secondary GUI opens before the primary GUI?"}]},{"@type":"WebSite","@id":"https:\/\/jassweb.com\/solved\/#website","url":"https:\/\/jassweb.com\/solved\/","name":"JassWeb","description":"Build High-quality Websites","publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jassweb.com\/solved\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/jassweb.com\/solved\/#organization","name":"Jass Web","url":"https:\/\/jassweb.com\/solved\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/","url":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","contentUrl":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","width":693,"height":132,"caption":"Jass Web"},"image":{"@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31","name":"Kirat","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/","url":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586","contentUrl":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586","caption":"Kirat"},"sameAs":["http:\/\/jassweb.com"],"url":"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/"}]}},"_links":{"self":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/21251","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/comments?post=21251"}],"version-history":[{"count":0,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/21251\/revisions"}],"wp:attachment":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/media?parent=21251"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/categories?post=21251"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/tags?post=21251"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}