{"componentChunkName":"component---src-pages-mdx-fields-path-tsx","path":"/2018/04/04/python-scrivere-terminal-gui/","result":{"data":{"post":{"frontmatter":{"title":"Divertiamoci sviluppando UI da terminale con ASCIIMATICS","date":"4th April, 2018","description":"Le UI da terminale fanno molto anni '80, però sono sempre diventerti da implementare. Oggi vi voglio introdurre ad una semplice libreria per creare questo tipo di applicazione.","headerImage":true,"author":{"name":"Ludovico Russo"},"image":{"childImageSharp":{"resize":{"src":"/static/b152e90c1097821d8ae79d0fd5eceff2/2a4de/main.png"},"gatsbyImageData":{"layout":"constrained","backgroundColor":"#183838","images":{"fallback":{"src":"/static/b152e90c1097821d8ae79d0fd5eceff2/59f85/main.png","srcSet":"/static/b152e90c1097821d8ae79d0fd5eceff2/dfb17/main.png 225w,\n/static/b152e90c1097821d8ae79d0fd5eceff2/fe46a/main.png 450w,\n/static/b152e90c1097821d8ae79d0fd5eceff2/59f85/main.png 900w,\n/static/b152e90c1097821d8ae79d0fd5eceff2/5b615/main.png 1800w","sizes":"(min-width: 900px) 900px, 100vw"},"sources":[{"srcSet":"/static/b152e90c1097821d8ae79d0fd5eceff2/3f066/main.webp 225w,\n/static/b152e90c1097821d8ae79d0fd5eceff2/45d9f/main.webp 450w,\n/static/b152e90c1097821d8ae79d0fd5eceff2/77dc6/main.webp 900w,\n/static/b152e90c1097821d8ae79d0fd5eceff2/75d5b/main.webp 1800w","type":"image/webp","sizes":"(min-width: 900px) 900px, 100vw"}]},"width":900,"height":474}}}},"timeToRead":2,"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Divertiamoci sviluppando UI da terminale con ASCIIMATICS\",\n  \"layout\": \"post\",\n  \"date\": \"2018-04-04T00:00:00.000Z\",\n  \"headerImage\": true,\n  \"read-time\": true,\n  \"tag\": [\"Python\", \"Asciimatics\", \"Terminal UI\"],\n  \"category\": \"blog\",\n  \"author\": \"ludusrusso\",\n  \"description\": \"Le UI da terminale fanno molto anni '80, però sono sempre diventerti da implementare. Oggi vi voglio introdurre ad una semplice libreria per creare questo tipo di applicazione.\",\n  \"path\": \"/2018/04/04/python-scrivere-terminal-gui/\",\n  \"image\": \"./main.png\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Le UI da terminale sono molto retr\\xF2, ma \\xE8 sempre divertente sviluppare programmi che le utilizzano, e possono\\nessere molto utili su progetti da adottare su un Raspberry Pi.\"), mdx(\"p\", null, \"In questa guida, vi voglio introdurre alla libreria Python \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/peterbrittain/asciimatics\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"a\"\n  }, \"Asciimatics\")), \", un tool open source e multipiattaforma che sviluppare UI per terminale in modo semplice e veloce!\"), mdx(\"h2\", null, \"Primi test con la libreria\"), mdx(\"p\", null, \"Per prima cosa, installiamo la libreria, meglio se all'interno di un \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"\"\n  }, \"ambiente virtuale\"), \", con il comando\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"(env) pip install asciimatics\\n\")), mdx(\"p\", null, \"Questo \\xE8 abbastanza per utilizzare la libreria! Andiamo ad implementare ora un semplice esempio per vedere come funziona sviluppando uno screen automatico che gira su terminale.\"), mdx(\"p\", null, \"Prendendo spunto dal un esempio di test, ho realizzato questo semplice programma\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"from asciimatics.effects import Cycle, Stars\\nfrom asciimatics.renderers import FigletText\\nfrom asciimatics.scene import Scene\\nfrom asciimatics.screen import Screen\\n\\ndef demo(screen):\\n    effects = [\\n        Cycle(\\n            screen,\\n            FigletText(\\\"ludusrusso.cc\\\", font='big'),\\n            int(screen.height / 2 - 8)),\\n        Cycle(\\n            screen,\\n            FigletText(\\\"Impara asciimatics!\\\", font='small'),\\n            int(screen.height / 2 + 3)),\\n        Stars(screen, 500)\\n    ]\\n    screen.play([Scene(effects, 500)])\\n\\nScreen.wrapper(demo)\\n\")), mdx(\"p\", null, \"Che, una volta lanciato, genera questa bellissima animazione\"), mdx(\"p\", null, mdx(\"img\", {\n    parentName: \"p\",\n    \"src\": \"./1.gif\",\n    \"alt\": \"Primo esempio\"\n  })), mdx(\"p\", null, \"Il codice \\xE8 anche molto semplice.\\nPer prima cosa, creiamo una funzione \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"demo\"), \" che prende un oggetto chiamato \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"screen\"), \". Questa funzione\\nsi occuper\\xE0 di renderizzare la nostra schermata, tramite la sua ultima riga: \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"screen.play([Scene(effects, 500)])\"), \".\"), mdx(\"p\", null, mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"effects\"), \" non \\xE8 altro che un vettore contenente i vari \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"effetti\"), \" che vogliamo aggiungere al nostro screen. In questo caso ne ho inseriti tre:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Il primo e il secondo sono un effetto \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Cycle\"), \", che non fa altro che ciclare il colore del testo che gli viene passato. Si noti che con \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"FigletText\"), \" possiamo utilizzare diversi \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"http://www.figlet.org/\"\n  }, \"fliglet font\"), \"! Fate un po' di prove.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Il terzo effetto \\xE8 \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Stars\"), \", che non fa altro che disegnare \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"500\"), \" (o il numero che volete voi) stelle luccicanti sullo sfondo!\")), mdx(\"p\", null, \"Per finire, basta passare la funzione a \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Screen.wrapper\"), \" per lanciare l'applicazione!\"), mdx(\"h2\", null, \"Conclusioni\"), mdx(\"p\", null, \"La libreria \\xE8 davvero divertente, e si possono anche fare alcune cose interessanti!\\nVoi avete idee o suggermenti in che modo poterla usare? Se si, scrivetela nei commenti qui sotto!!\"), mdx(\"h2\", null, \"Aiutatemi\"), mdx(\"p\", null, \"Vi chiedo un piccolo aiuto da parte di voi lettori: infatti, ho sempre meno tempo per mantere e migliorare questo blog, che al momento faccio senza nessuna retribuzione, e quindi nel tempo libero nel weekend.\\nVi chiedo perci\\xF2 di fare alcune, per aiutarmi a far crescere il blog per permettermi di dedicarci sempre pi\\xF9 tempo:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Iscrivetevi alla newsletter (trovate form nel footer di questo blog),\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Lasciate dei commenti sotto questo post (e sotto i vari post che ritenete utili). Vorrei sapere da voi come credete possa migliorare il blog, e se avete idee per futuri articoli o qualcosa che vorreste approndire, \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"questo \\xE8 uno dei migliori modi con cui potete aiutarmi\"), \"!\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Mettete un Like alla mia \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://www.facebook.com/ludusrusso.cc\"\n  }, \"pagina facebook\"), \", aggiungetemi \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://www.linkedin.com/in/ludusrusso/\"\n  }, \"su linkedin\"), \" e seguitemi su \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://twitter.com/ludusrusso\"\n  }, \"twitter\"), \" e \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://github.com/ludusrusso\"\n  }, \"github\"), \".\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Condividete i miei post!\")));\n}\n;\nMDXContent.isMDXComponent = true;"}},"pageContext":{"id":"cbd5bcc1-e7a0-537a-a85a-99380387bf6f","fields__path":"/2018/04/04/python-scrivere-terminal-gui/","__params":{"fields__path":"2018"}}},"staticQueryHashes":["2958666869","3649515864"]}