{ "info": { "author": "Bartosz Ko\u015bci\u00f3w", "author_email": "kosci1@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Topic :: Home Automation", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "LCD manager - what it is ?\n===\n\nA simple window manager for char lcd based on HD44780. It uses CharLCD package [CharLCD](https://bitbucket.org/kosci/charlcd)\nto communicate with lcd. Works with buffered lcd or buffered vlcd. \n\nImagine that you want to build simple gui, display some information from sensors or any other info. With this package\nyou are just adding widgets, its content and position, forget about manually positioning chars. You want some info on LCD and this\npackage helps you with it. \nIt makes creating GUI easier. You don't have to focus how to display something just use widgets.\n\nCurrently available widgets:\n\n - label - display text as one line or multi line\n - pane - conainer for other widgets may be uses as tabs\n - button - simple button\n - canvas - allows to draw like on pure CharLCD\n\n \nSee more on: [koscis.wordpress.com](https://koscis.wordpress.com) \n\nEach widget has its properties, shared are:\n\n - x and y - position on screen or in pane\n - width and height - it may be automode or manual mode \n - visibility\n \n## Demo\n\nIn demos directory you may find some samples.\nGood idea is to look at [Piader v2](https://bitbucket.org/kosci/piader) it is simple game based on this package. \nIt has three tabs, one for menu one for options and one for game. It shows how to use labels, buttons pane and canvas.\n\n\n## Initialize LCD Manager and flush content to display\n\nInitialisation require one parameter, an instance of CharLCD class. Manager reads size from it and prepare buffer. \nTo display content on screen you have to call two functions. First render - it gather all visible widgets and write chars to buffer. \nAnd call flush - this writes buffer content to display using CharLCD package and its drivers.\n \n lcd = buffered.CharLCD(20, 4, gp.Gpio())\n lcd.init()\n lcd_manager = manager.Manager(lcd)\n ...\n lcd_manager.render()\n lcd_manager.flush()\n\nEach widget may be created with or without name. Name is useful for getting it from manager without keeping any references \nin your code.\n \n lcd_manager.add_widget(new Label(0, 0, 'name'))\n lcd_manager.get_widget('name').label = 'hi'\n \n\nBy default widget tries to adjust automatically width and height. Auto size is disabled when you specify width or height\n\n\n label1 = Label(0, 0)\n label1.label = \"Hello !\"\n label1.width = 7\n label1.height = 1\n \n \nor you may disable autosize by\n\n label.autowidth = False\n\nDisplay server\n===\n \nTo refresh lcds automatically add them to Display class and start thread. You set fps and auto_render flag. \nIf auto_render set to True Display will do both render and flush. With false only flushes. \n\nConstructor: **Display(fps, auto_render)**\n\n\n self.display = display.Display(0.5, True)\n self.display.add(self.game_manager, 'one')\n self.display.start()\n\nRemote server\n===\n\nThis one starts a server that listen for incoming connections. If someone connect he/she may issue commands:\n\n list managers - list manager names that are in Display, string separated by ,\n get - get content of names manager , strings separated by \\n\n \nRemote connection is insecure and it is very bad idea to open server to world.\n\nTo start a server use: ```disp.start_remote(1301, '0.0.0.0')```. First parameter is port and second ip address.\n\n lcd = buffered.CharLCD(20, 4, gp.Gpio())\n lcd.init()\n lcd_manager = manager.Manager(lcd)\n\n self.display = display.Display(0.5, True)\n self.display.add(self.game_manager, 'one')\n self.display.start()\n self.display.start_remote()\n\n label1 = Label(0, 0)\n lcd_manager.add_widget(label1)\n\nIf you connect to it via telnet you may send commands. \n \nThere is an example in demos folder: **remote_read.py**\n \n \n\nWidgets\n===\n\n## Label widget\n\nSimple text display in single line or multiline. \n\nConstructor: **Label(x, y, name, visibility)**\n\nSetting content goes by **label** property. May be string or array\n \n\n- single line\n\n\n label1 = Label(0, 0)\n label1.label = \"Hello !\"\n lcd_manager.add_widget(label1)\n lcd_manager.render()\n lcd_manager.flush()\n label1.label = 'one'\n \n- multiline\n\n\n label1 = Label(0, 0)\n label1.label = \"Hello !\"\n lcd_manager.add_widget(label1)\n lcd_manager.render()\n lcd_manager.flush()\n label1.label = ['one', 'two', 'three']\n \n## Pane widget \n\nContainer for other widgets. It is easy to simulate tabs. Put few panes on each other and use\nvisibility to set active one.\n\n**add_widget** - add widget\n\n**get_widget** - retrieve widget by name\n\n**recalculate_width** - recalculate pane width while in auto-width mode.\n\n**recalculate_height** - recalculate pane height while in auto-height mode\n\nbug:\n- won't recalculate width & height when inner widget changes. Recallculation must be called manually\n\n\n label1 = Label(0, 0)\n label1.label = \"1 - Hello !\"\n label2 = Label(1, 2)\n label2.label = \"3 - Meow !\"\n label3 = Label(1, 1)\n label3.label = \"2 - Woof !\"\n\n pane1 = Pane(1, 0)\n pane1.add_widget(label1)\n pane1.add_widget(label2)\n pane1.add_widget(label3)\n lcd_manager.add_widget(pane1)\n\n## Button widget\n\nThis button react to event. Event server is not included into manager but look at Piader.\n\nWidget has three events:\n\n**focus** - called when we focus on it, it change view by adding markers\n\n**blur** - called while losing focus\n\n**action** - callback \n\nFunctions:\n\n**pointer_before** - property to set or get char that is displayed before label\n\n**pointer_after** - property to set or get char that is displayed before label\n\n**label** - property to set button label. You must leave space for pointers, \n setting like this ' click ' change during focus state to '>click<' but\n 'click' change to '>lic<'\n\n**event_focus** - call it to set this widget as active\n\n**event_blur** - sets as inactive\n\n**event_action** - this one calls callback. To callback reference to widget is passed. \n\n\nBefore and after overwrite first and last char\n\n\n btn1 = Button(0, 0)\n btn1.label = \" Start \"\n btn1.pointer_before = \"*\"\n btn1.pointer_after = \"*\"\n\n\n\ncalling focus/blur, set active and inactive state \n\n\n btn1.event_focus()\n btn1.event_blur()\n \n \n- callback, to callback current widget is passed\n\n\n def _log(widget):\n return widget.label\n btn1.callback = _log \n btn1.event_action()\n \n \n## Canvas widget\n\nSimple widget to draw any string on it. \nYou must declare its size\n\n\n c = new Canvas(0, 0, 13, 2)\n c.write('Hello')\n c.write('Hi !', 0, 1)\n c.clear()\n\n\nClass diagram\n===\n\n display.Display --> Thread\n\n server.ListenerThread --> Thread\n\n server.ReadThread --> Thread\n\n button.Button --> widget.Widget\n --> focus.Focus\n --> action.Action\n\n canvas.Canvas --> widget.Widget\n\n label.Label --> widget.Widget\n\n pane.Pane --> widget.Widget\n\n manager.Manager", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://bitbucket.org/kosci/lcdmanager.git", "keywords": "charlcd,raspberry pi,hd44780,44780,hitachi,hd 44780,lcd,char lcd", "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "LCDManager", "package_url": "https://pypi.org/project/LCDManager/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/LCDManager/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://bitbucket.org/kosci/lcdmanager.git" }, "release_url": "https://pypi.org/project/LCDManager/0.4.0/", "requires_dist": null, "requires_python": null, "summary": "Lcd window manager for char lcds (Hitachi HD44780) @ Raspberry Pi.", "version": "0.4.0" }, "last_serial": 2458154, "releases": { "0.1.5": [ { "comment_text": "", "digests": { "md5": "7edcd57dd91daa13db8a5f60343a2538", "sha256": "0da472f0367aca563ca99a377099155a1e4fd033ea2efd466e8c2dd7f48d30fa" }, "downloads": -1, "filename": "LCDManager-0.1.5.tar.gz", "has_sig": false, "md5_digest": "7edcd57dd91daa13db8a5f60343a2538", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11051, "upload_time": "2016-04-16T14:27:24", "url": "https://files.pythonhosted.org/packages/d0/f5/2463aff7811c97437f38e0e812efde66a56238a8c88b857b6c0a9f65b21c/LCDManager-0.1.5.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "fc08a87405d955436088245fda1a00e6", "sha256": "e54eefda725b524d281d3e60017c51c3f6e71014c83a96d4b437f86456e95a03" }, "downloads": -1, "filename": "LCDManager-0.2.0.tar.gz", "has_sig": false, "md5_digest": "fc08a87405d955436088245fda1a00e6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11387, "upload_time": "2016-04-17T18:11:23", "url": "https://files.pythonhosted.org/packages/b6/19/a98f56ffd45d23510de64b8bfd1f8085340994baea50d68c75d5580ab3d3/LCDManager-0.2.0.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "a264e8f379b5587e0b8ce0a93c4a618c", "sha256": "f2eb4c9b9529d32eac845952f23385fed3f93123eb1aa5730056a9934ff7263a" }, "downloads": -1, "filename": "LCDManager-0.2.2.tar.gz", "has_sig": false, "md5_digest": "a264e8f379b5587e0b8ce0a93c4a618c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13867, "upload_time": "2016-04-20T18:44:50", "url": "https://files.pythonhosted.org/packages/c1/6b/30fb00d313a9256b766d4a681d15f1ac26dd65323ea89c9dbed8a8d92432/LCDManager-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "726cb28227ced8b929285be1540f386c", "sha256": "b86d2840b407784938d69ed301130ca39a0ffe4c9b3b5d241f0888500e5355fd" }, "downloads": -1, "filename": "lcdmanager-0.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "726cb28227ced8b929285be1540f386c", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 20799, "upload_time": "2016-05-07T10:00:29", "url": "https://files.pythonhosted.org/packages/fc/35/ba82aae322046f81812390073b985e35b3e8431ac4eb7a313e9f29b3374b/lcdmanager-0.2.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "62ae93957a0c011cbe6c3d3ae9fe0981", "sha256": "e70e8947d5d5f3a4b19499cc10261fe17b64085553bda3253db4d4a7ec79e342" }, "downloads": -1, "filename": "lcdmanager-0.2.3.tar.gz", "has_sig": false, "md5_digest": "62ae93957a0c011cbe6c3d3ae9fe0981", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14361, "upload_time": "2016-05-07T10:00:21", "url": "https://files.pythonhosted.org/packages/91/c9/bac43b0737b2dc817d9649d7fd4bdb86c4065cdf6f2fcc7a6b3e8fcef743/lcdmanager-0.2.3.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "175bab53c4a64f2aa6bf247375441b18", "sha256": "3f0761e00c9cb90a6ef73a9c3701e2f10e6864f31b88b388f3b2bec60b8d3f74" }, "downloads": -1, "filename": "lcdmanager-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "175bab53c4a64f2aa6bf247375441b18", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 21282, "upload_time": "2016-11-13T18:48:45", "url": "https://files.pythonhosted.org/packages/9c/fd/62f869234b414210e28d14b555819749623cbabb77e82bcd94b451db19ce/lcdmanager-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "49e76ade170e2d9a419494de42a8f8e0", "sha256": "9c112a94b785e2bb765b8433fa4d028ab232f94d9fb65f044e3219319aa33220" }, "downloads": -1, "filename": "lcdmanager-0.4.0.tar.gz", "has_sig": false, "md5_digest": "49e76ade170e2d9a419494de42a8f8e0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14677, "upload_time": "2016-11-13T18:48:26", "url": "https://files.pythonhosted.org/packages/e8/f1/a78e1e2dbbc0c03c4c50227efaa2670ab9d95d3d0db93dca4c58700fabf8/lcdmanager-0.4.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "175bab53c4a64f2aa6bf247375441b18", "sha256": "3f0761e00c9cb90a6ef73a9c3701e2f10e6864f31b88b388f3b2bec60b8d3f74" }, "downloads": -1, "filename": "lcdmanager-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "175bab53c4a64f2aa6bf247375441b18", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 21282, "upload_time": "2016-11-13T18:48:45", "url": "https://files.pythonhosted.org/packages/9c/fd/62f869234b414210e28d14b555819749623cbabb77e82bcd94b451db19ce/lcdmanager-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "49e76ade170e2d9a419494de42a8f8e0", "sha256": "9c112a94b785e2bb765b8433fa4d028ab232f94d9fb65f044e3219319aa33220" }, "downloads": -1, "filename": "lcdmanager-0.4.0.tar.gz", "has_sig": false, "md5_digest": "49e76ade170e2d9a419494de42a8f8e0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14677, "upload_time": "2016-11-13T18:48:26", "url": "https://files.pythonhosted.org/packages/e8/f1/a78e1e2dbbc0c03c4c50227efaa2670ab9d95d3d0db93dca4c58700fabf8/lcdmanager-0.4.0.tar.gz" } ] }