{ "info": { "author": "Anders Munch", "author_email": "ajm@jmunch.dk", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: MacOS X :: Carbon", "Environment :: Win32 (MS Windows)", "Environment :: X11 Applications :: GTK", "Intended Audience :: Developers", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3", "Topic :: Software Development :: User Interfaces" ], "description": "wxWize - a wxPython object builder library\n==========================================\n\nWhat? Why?\n+++++++++++\n\nwxWize is a GUI builder library that supplements wxPython.\nwxPython is very powerful and very flexible, but creating windows,\nsizers and events can be a bit cumbersone.\n\nThis is where wxWize comes in, providing a simple way of creating\nsophisticated wxPython designs in fewer lines of code, with vastly\nimproved readability, and without sacrifising any of the expressive\npower of programmatic GUI building.\n\nIt's a shallow wrapper, intended to be easily picked up by anyone\nwho's written wxPython applications before. Things are called the same\nas in wxPython/wxWidgets where possible.\n\nOnce frames and dialogs are created, wxWize steps out of the way, and\nthe wxPython objects are all yours. You use them exactly the same as\nyou've always done, using familiar methods like Bind, SetValue,\nGetValue, SetBackgroundColour etc.\n\n\nHow?\n++++\n\n* wxWize uses the Python ``with`` statement to express object nesting.\n* Sizers and windows are integrated in a single hierarchy, meaning that\n you no longer need to type in all those sizer.Add calls -- wxWize\n does that for you, based on relative positions in the\n with-statement hierarchy.\n* ``parent`` and ``id`` parameters are gone as required parameters for\n controls. parent is computed from the hierarchy position. They can\n still be set where needed using named parameters.\n\n\nInstallation\n++++++++++++\n\n``$ pip install wxWize``\n\nOr copy wize.py to your site-packages directory.\n\n\n\nUsage\n+++++\n\nSizers\n------\n\nUse the with statement to create sizers. Sizers and windows that are\ncreated within the scope of the with-statement, become children of the\nsizer, and automatically added.\n\n\nSimple windows\n--------------\n\n\nTo create a wx.Window control, use the identically named wize class.\nThe \\_\\_init\\_\\_ parameters are the same as for the wxPython object, except for this:\n\n* There are only a 1-2 (or an occasional 3) positional\n parameters. ``parent``, ``id``, ``pos``, ``size``\n and ``style`` have been relegated to keyword-only.\n* ``parent`` can and should be\n omitted entirely (except for the top-level item).\n* ``flag`` and ``proportion`` parameters\n provide parent sizer Add arguments.\n* ``x``, ``y``, ``xspan``\n and ``yspan`` provide additional parent sizer Add\n arguments, for when the parent sizer is a GridBagSizer.\n* ``EVT_*`` parameters provide an event binding\n shorthand.\n* ``init`` or ``cls`` are useful for subclassing.\n\n\nContainer windows\n-----------------\n\nFor windows that can have sub-windows (wize.Frame, wize.Dialog, wize.Panel,\nwize.StaticBox), use the with statement and nest other windows or sizers\nbelow it.\n\nIf needed, a BoxSizer is created automatically and passed to\nSetSizer. Use the ``orient`` parameter\nto set the direction.\n\nIf there is only one child and that child is a sizer, then\nno BoxSizer is created and the child is used instead.\n\n\nInterfacing with ordinary wxPython code\n---------------------------------------\n\nwx.Frame/wx.Dialog implemented with wxWize\n..........................................\n\nWhen implementing the whole of a top-level window using wxWize,\ndefine the wxWize hierarchy (of nested with-statements) in the\n\\_\\_init\\_\\_ of your wx.Frame/wx.Dialog subclass. Use\nthe ``init`` parameter for the top-level call to\nwize.Frame/wize.Dialog.\n\n\nNesting a wxWize hierarchy within an existing structure\n..............................................................\n\nWhen implementing only a part of the frame/dialog using wxWize,\n provide a ``parent`` argument to the top-level wxWize\n object, and the object returned from ``with .. as``\n will be ready to put into a sizer in your own plain wxPython code.\n\nNesting an wxPython window\n..........................\n\nwxPython objects - windows and sizers - can be inserted into a\nwxWize hierarchy using ordinary Sizer.Add method calls - using the\n``with .. as`` value from e.g. a wize.BoxSizer or wize.GridSizer.\nThe wize.Parent function returns a suitable parent value for\nwindows.\n\n\nFor windows, an alternative is to create a wize.Window with\na ``w`` parameter, and sizer parameters (flag,proportion)\nas needed. Then, wxWize handles the sizer Add. So you'd write e.g.:\n\n.. code-block:: python\n\n my_win = CreateWindowSomeOtherWay(parent=wize.Parent(),...)\n wize.Window(w=my_win, flag=wx.EXPAND, proportion=1)\n\n\nNesting a wxPython sizer\n........................\n\nThere's no similar setup for inserting a sizer. But you can always \n\n\nGetting at the wxPython objects\n-------------------------------\n\nThe sizers and windows created are ordinary wx.Sizer and wx.Window\nobjects. ``with wize. as *variable*`` binds the\nwrapped wxPython object to *variable*.\n\nAll the wxWize classes are intended to be used in a Python with\nstatement. The value bound with ``with .. as`` is the\nwrapped wxPython object, a wx.Window or a wx.Sizer.\n\nFor simple objects with no sub-objects -- StaticText, TextCtrl,\nChoice etc. -- the with statement can be omitted. In that case, to get\nat the wrapped wxPython object, use the ``wx`` property.\n\nE.g. instead of writing:\n\n.. code-block:: python\n\n with wize.BoxSizer(wx.HORIZONTAL):\n with wize.StaticText(u'Enter name: '): pass\n with wize.TextCtrl() as name_input: pass\n\nyou can write, to the same effect:\n\n.. code-block:: python\n\n with wize.BoxSizer(wx.HORIZONTAL):\n wize.StaticText(u'Enter name: ')\n name_input = wize.TextCtrl().wx\n\n\nMenus\n-----\n\nJust like the with statement and indentation is used to place controls into the sizer\nhierarchy, the with statement and indentation can be used to create\nmenus and submenus. See the example in ``demo_pallette.py``.\n\nStart with a ``wize.MenuBar`` or ``wize.PopupMenu`` at the top level. Nested within\nthat, use ``wize.MenuItem``'s to create simple menu entries, and ``wize.Menu``'s to\ncreate submenus.\n\nFor an application-global menu bar, use ``wize.MenuBar``, with the main\nframe of application as the parent. That is to say, either nest\n``wize.MenuBar`` within a ``wize.Frame``, or provide the ``wx.Frame`` in the\n``parent`` parameter. The immediate children must be ``wize.Menu``'s, not\nMenuItem's.\n\nFor a pop-up menu, use ``wize.PopupMenu`` as the top-level item, nesting\n``wize.MenuItem`` and ``wize.Menu`` objects as desired.\n\n``wize.MenuCheck`` and ``wize.MenuRadio`` are shortcuts for\n``wize.MenuItem`` with parameters to create a menu item with a checkbox,\nwith a radio button.\n\nAlso there's ``wize.MenuSeparator`` which adds a separate line between\nmenu items.\n\nSpecific features\n+++++++++++++++++\n\nEVT\\_\\* binding\n---------------\n\nBind an event callback by using the event name as a named parameter,\nwith the callback as its value. I.e. ``EVT_FOO=self.OnFoo``\nis a shorthand for ``.Bind(wx.EVT_FOO, self.OnFoo)``.\n\n\nMixing in a window not created using wxWize\n-------------------------------------------\n\nIf for whatever reason you don't want wxWize to create a window, but\nyou still wxWize to handle the sizers, then create the window yourself\nand pass it to the ``w`` parameter. wxWize will then use the\nw-value you provided instead of creating a new window.\n\n\nYou can do this even if there's no precise wxWize equivalent to the\n type of window created. Use a superclass such as wize.Window or wize.Panel\n instead.\n\nAutomatic wx.ALL if border>0\n-------------------------------\n\nIf ``border`` is set, and none of the border flags\n(wx.TOP,wx.BOTTOM,wx.LEFT,wx.RIGHT) are set, then wx.ALL is assumed.\n\n\nfgcolour, bgcolour and toolTip\n------------------------------\n\nPass a ``fgcolour``, ``bgcolour`` or ``toolTip`` parameter as a shorthand\nfor ``.SetForegroundColour``, ``.SetBackgroundColour`` or ``.SetToolTip``.\n\n\nwx.EXPAND and proportion=1 for sizers and panels\n------------------------------------------------\n\nSizers and panels have ``flag=wx.EXPAND`` as the default. (Controls have ``flag=0``.)\nAdditionally, panels have proportion=1 as the default.\n\nwx.EXPAND and proportion>0 help sizers and panels be neutral\nintermediaries: If you e.g have a ListCtrl on a Frame, and you change\nthat to be a ListCtrl on a Panel on a Frame, then the ListCtrl will\nresize with the frame if it did before.\n\nPanels include wize.Panel and wize.SplitterWindow. \n\nChanging defaults with Default\n------------------------------\n\nThe Default classmethod temporarily changes the default value of one or\nmore attributes. It's a with-statement expression, and takes keyword\nparameters which are the new defaults for the class for anything\ncreated within the scope of the with statement.\n\nFor example, to revert the default flag value for a BoxSizer back to 0,\ninstead of wx.EXPAND, do this:\n\n\n.. code-block:: python\n\n with wize.BoxSizer.Default(flag=0):\n ....\n\n\nGridBagSizer positioning\n------------------------\n\nGrid position in a GridBagSizer is set using\nseparate ``x`` and ``y`` parameters (which become\nthe position=wx.GBPosition(y,x) argument to wx.GridBagSizer.Add). To span over\nmore than one square, there's ``xspan``\nand ``yspan`` (which become the wx.GBSpan(yspan,xspan)\nargument to wx.GridBagSizer.Add).\n\n\nIf both ``x`` and ``y`` are omitted, then the\nitem is placed to the right of the previous item, or just below. The\nvalue of the ``orient`` attribute determines which one:\nwx.HORIZONTAL, and it's to the right, wx.VERTICAL, and it's below.\n\n\nOne or both of ``x`` and ``y`` can be\nomitted, in which case the previous value is reused. Or, the\nprevious value plus one. That happens if a new x value is provided\nthat isn't larger than the previous one, then y is incremented, and\nsimilarly, if the new y value is provided that isn't larger than the\nprevious one, then x is incremented.\n\nThis is perhaps better shown by example:\n\n .. code-block:: python\n\n with wize.GridBagSizer():\n wize.StaticText(\"First\", x=0, y=0) # (x=0, y=0)\n wize.StaticText(\"Second\", x=1) # (x=1, y=0)\n wize.StaticText(\"Third\", x=0) # (x=0, y=1)\n wize.StaticText(\"Fourth\", x=1) # (x=1, y=1)\n wize.StaticText(\"Fifth\", x=1) # (x=1, y=2)\n\nAlthough only the line number y=0 is explicitly given, \"Third\" and\n\"Fifth\" are moved to a new line, because the x value isn't to the\nright of the previous x value.\n\nNote that this could also have been written like this:\n\n .. code-block:: python\n\n with wize.GridBagSizer(wx.HORIZONTAL):\n wize.StaticText(\"First\") # (x=0, y=0) is the default\n wize.StaticText(\"Second\") # (x=1, y=0)\n wize.StaticText(\"Third\", x=0) # (x=0, y=1)\n wize.StaticText(\"Fourth\") # (x=1, y=1)\n wize.StaticText(\"Fifth\", x=1) # (x=1, y=2)\n\n\nStaticBox\n---------\n\nThe wize.StaticBox control combines wx.StaticBox and wx.StaticBoxSizer\ninto one.\n\n\nStaticLine\n----------\n\nThe default sizer flag is wx.EXPAND. A new parameter, 'thickness',\nsets the size to (-1,self.thickness) if the style is wx.LI_HORIZONTAL,\nor (self.thickness,-1) if wx.LI_VERTICAL. In combination, that means\nthat e.g. within a BoxSizer(wx.VERTICAL)\n\n.. code-block:: python\n\n wize.StaticLine(3, wx.LI_HORIZONTAL)\n\nor, since wx.LI_HORIZONTAL is already the default, shortened to:\n\n.. code-block:: python\n\n wize.StaticLine(3)\n\nputs a 3 pixels high line horisontal line across the full width.\n\n\nSplitterWindow\n--------------\n\n``SplitterWindow(wx.HORIZONTAL)`` puts the two nested windows side by side\nwith a resizing sash between. ``SplitterWindow(wx.VERTICAL)`` puts the two\nnested windows on top of one another. (Don't call ``SplitVertically`` or\n``SplitHorizontally``, it's automatic.)\n\nThe default of sashGravity=0.5 makes the subwindows equal sized, and\nthe default of minimumPaneSize=1 ensures that the second subwindow\ndoesn't disappear unexpectedly. (Use minimumPaneSize=0 to restore the\nwxWidgets default behaviour that a double\nclick on the sash hides the second window.)\n\nSubclassing\n-----------\n\nWhen defining a new subclass of a wxPython class, the new subclass\ndoes not have an implementation in wxWize. The obvious fix is to\ncreate a such a class, a wize.Control subclass to wrap your\nwx.Control subclass.\n\nThat's not at all hard to do. If you look in wize.py, you can see how\nit's done for the standard controls and do something similar.\n\nBut there are other options: For wx.Frame and wx.Dialog subclasses,\ndefine the wxWize object hierarchy by using nested with's in\n\\_\\_init\\_\\_. For the root of the with-hierarchy, use a wize.Frame or wize.Dialog\nwith init=self.\n\nFinally there's ``cls``, which is an option, if the\nsubclass \\_\\_init\\_\\_ parameter list is identical to the parent\n\\_\\_init\\_\\_.\n\nSubclassing with ``init``\n-------------------------\n\nThe ``init`` parameter provides a way to use wxWize from\nwithin the \\_\\_init\\_\\_ of a wxPython window subclass. It goes like this:\n\n\nInstead of calling parent \\_\\_init\\_\\_ from within the subclass\n\\_\\_init\\_\\_, create a wxWize object using ``init=self``\ninstead. Now wxWize will call the parent \\_\\_init\\_\\_ with the same\nparameters it would otherwise have used to create a new object.\n\nSubclassing with ``cls``\n------------------------\n\nIf the subclass \\_\\_init\\_\\_ takes the same parameters as the parent\nclass, then you can use an existing wxWize-class\nwith ``cls=MyNewSubclass``. The ``cls`` parameter\ntells wxWize to create the window using this class instead of the normal wxPython class.\n\n\n\nIsolating with ``Isolate``\n--------------------------\n\nwxWize uses global state to track the current wxWize\nparent. ``with Isolate():`` temporarily sets the wxWize\nparent to None, so that objects created in the context do not become linked into the\ncurrent hierarchy, but stand on their own.\n\n\nList of classes\n+++++++++++++++\n\n=======================\t=========================================\nClass name\t\tPositional parameters \n=======================\t========================================= \nBoxSizer\t\torient\nButton\t\t\tlabel\nCheckBox\t\tlabel\nChoice\t\t\tchoices\nComboBox\t\tvalue, choices\nCommandLinkButton\tmainLabel, note\nControl\t\t\tw\nDatePickerCtrl\t\tdt\nDialog\t\t\ttitle\nFileBrowseButton\t\nFlexGridSizer\t\trows\nFrame\t\t\ttitle\nGauge\t\t\trange\nGradientButton\t\tlabel, bitmap\nGrid\t\t\t\nGridBagSizer\t\t\nIsolate\nListBox\t\t\tchoices\nListCtrl\t\t\nMaskedNumCtrl\t\tvalue\nMaskedTextCtrl\t\tvalue\nMenu\t\t\tlabel\nMenuBar\t\t\tparent\nMenuCheck\t\ttext, callback\nMenuItem\t\ttext, callback\nMenuRadio\t\ttext, callback\nMenuSeparator\t\ttext, callback\nNotebook\t\t\nPage\t\t\ttext\nPanel\t\t\tproportion\nPopupMenu\t\tparent\nPropertyGrid\t\t\nRadioButton\t\tlabel\nScrolledPanel\t\t\nScrolledWindow\t\nShell\t\t\t\nSpacer\t\t\tsize\nSpinCtrl\t\tmin, max, initial\nSplitterWindow\t\torient, minimumPaneSize\nStaticBox\t\tlabel, orient\nStaticLine\t\tthickness, style\nStaticText\t\tlabel\nStdDialogButtonSizer\t\nTextCtrl\t\tvalue\nTopLevelWindow\t\ttitle\nWindow\t\t\tw\n=======================\t=========================================\n\n\nParameters not in the wxWidgets docs\n++++++++++++++++++++++++++++++++++++\n\nThe wxPython/wxWidgets documentation for creating objects can be\nused with wxWize as well, since all the documented \\_\\_init\\_\\_\nparameters are available.\n\nHere's an overview of the additional parameters that are specific to wxWize:\n\n\n=======================\t=================================================================================\nParameter name\t\tDescription\n=======================\t================================================================================= \nw\t\t\tPre-created wxPython object. \ncls\t\t\tSubclass of the wrapped wxPython class to use. \ninit\t\t\tinit=self if using wxWize to initialise the parent class in \\_\\_init\\_\\_ \nproportion\t\tSizer Add parameter. \nflag\t\t\tSizer Add parameter.\nborder\t\t\tSizer Add parameter.\norient\t\t\tPanels and top-level windows can also take this BoxSizer parameter.\nfgcolour\t\tTriggers a SetForegroundColour method call.\nfgcolour\t\tTriggers a SetBackgroundColour method call.\ntoolTip\t\t\tTriggers a SetToolTipString method call.\nx\t\t\tGridBagSizer column number.\ny\t\t\tGridBagSizer row number.\nxspan\t\t\tGridBagSizer column span.\nyspan\t\t\tGridBagSizer row span.\norient\t\t\tLayout of children, wx.VERTICAL or wx.HORIZONTAL\ncallback\t\tEVT_MENU action for MenuItem's\nthickness\t\tStaticLine line width.\nInterpClass_args\t\\*args for Shell to pass to InterpClass \nInterpClass_kwargs\t\\*\\*kwargs for Shell to pass to InterpClass \nsashGravity\t\tSplitterWindow.SetSashGravity parameter\nminimumPaneSize\t\tSplitterWindow.SetMinimumPaneSize parameter\nEVT\\_\\*\t\t\tSet an event callback.\n=======================\t=================================================================================\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/AndersMunch/wxWize", "keywords": "wxPython wxWidgets sizers", "license": "WTFPL", "maintainer": "", "maintainer_email": "", "name": "wxWize", "package_url": "https://pypi.org/project/wxWize/", "platform": "", "project_url": "https://pypi.org/project/wxWize/", "project_urls": { "Homepage": "https://github.com/AndersMunch/wxWize" }, "release_url": "https://pypi.org/project/wxWize/1.1.0/", "requires_dist": null, "requires_python": "", "summary": "wxPython object builder", "version": "1.1.0" }, "last_serial": 5614743, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "db33ba6d04eb96d66324392f47fd1ef5", "sha256": "46545a83bfa33fc9560dbe9e3621882b250d500266a37fab70ce6b458dcd0dd8" }, "downloads": -1, "filename": "wxWize-1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "db33ba6d04eb96d66324392f47fd1ef5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 20886, "upload_time": "2017-02-03T22:46:03", "url": "https://files.pythonhosted.org/packages/78/d8/7b3c4b5d89bbd7bf668d70ed717e995611044c2ad778102788c9fa464481/wxWize-1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8b996dc9297a765ef0619813ed1dc1f1", "sha256": "3faf996113a3710f841a5c3ce929ac2042b1828e4d76b03dfecc09cd072d89eb" }, "downloads": -1, "filename": "wxWize-1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "8b996dc9297a765ef0619813ed1dc1f1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20881, "upload_time": "2017-02-03T22:40:22", "url": "https://files.pythonhosted.org/packages/c8/7d/bbbb34a03a9fd2f430720a2c37ce87651be038201b31a2b329b8de7be573/wxWize-1.0-py3-none-any.whl" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "98582f5f4650af02516fa59a719e4a77", "sha256": "9cd2a85199173d45f32032b87d0ca4c8dce24c0eb3d7f575c14f7200c0b20860" }, "downloads": -1, "filename": "wxWize-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "98582f5f4650af02516fa59a719e4a77", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 20924, "upload_time": "2017-02-06T17:38:51", "url": "https://files.pythonhosted.org/packages/79/80/b587e5b68c01fbd9282a78dad9b505f6c4db7f84c1d701a767e86d96ccf2/wxWize-1.0.1-py2.py3-none-any.whl" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "f3c4bf0701cc74592fe76110c7e5f2f1", "sha256": "9b7a3096c03d6942b3020db0e88296cd5f34d044fb6a462bb9d55f8c77386844" }, "downloads": -1, "filename": "wxWize-1.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f3c4bf0701cc74592fe76110c7e5f2f1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21181, "upload_time": "2017-07-27T18:16:16", "url": "https://files.pythonhosted.org/packages/76/7a/87b30b1477c749b9c2283345f01f1fb42062f933cb71165abdf4ddd5cbba/wxWize-1.0.2-py2.py3-none-any.whl" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "1224e2507085b9d996920a60006ce6c8", "sha256": "ca4a6cd7170e0fa37e0a15ffaf2988f337c48148b54c10f0753a8960e0ed2048" }, "downloads": -1, "filename": "wxWize-1.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1224e2507085b9d996920a60006ce6c8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14529, "upload_time": "2018-08-19T11:26:28", "url": "https://files.pythonhosted.org/packages/1d/8b/b7360e9c60125d966c8740e63a452370702531c2841f8bba0c72a36411e6/wxWize-1.0.3-py2.py3-none-any.whl" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "f135ceba6c3d9f799d57651cb945ee4c", "sha256": "d1b128cae84efa042dde8098174c8cbadac19f01aa350fa97f20bce975dd18d2" }, "downloads": -1, "filename": "wxWize-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f135ceba6c3d9f799d57651cb945ee4c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14599, "upload_time": "2019-07-31T17:46:03", "url": "https://files.pythonhosted.org/packages/8c/fa/dc95d39f3ff7b9133c71f99de342c9e44404a0d2be1d1f140680b1650103/wxWize-1.1.0-py2.py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f135ceba6c3d9f799d57651cb945ee4c", "sha256": "d1b128cae84efa042dde8098174c8cbadac19f01aa350fa97f20bce975dd18d2" }, "downloads": -1, "filename": "wxWize-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f135ceba6c3d9f799d57651cb945ee4c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14599, "upload_time": "2019-07-31T17:46:03", "url": "https://files.pythonhosted.org/packages/8c/fa/dc95d39f3ff7b9133c71f99de342c9e44404a0d2be1d1f140680b1650103/wxWize-1.1.0-py2.py3-none-any.whl" } ] }