wxPython 4.3.2__cp315-cp315-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- wx/WebView2Loader.dll +0 -0
- wx/__init__.py +22 -0
- wx/__init__.pyi +10 -0
- wx/__version__.py +9 -0
- wx/__version__.pyi +15 -0
- wx/_adv.cp315-win_amd64.pyd +0 -0
- wx/_aui.cp315-win_amd64.pyd +0 -0
- wx/_core.cp315-win_amd64.pyd +0 -0
- wx/_dataview.cp315-win_amd64.pyd +0 -0
- wx/_glcanvas.cp315-win_amd64.pyd +0 -0
- wx/_grid.cp315-win_amd64.pyd +0 -0
- wx/_html.cp315-win_amd64.pyd +0 -0
- wx/_html2.cp315-win_amd64.pyd +0 -0
- wx/_media.cp315-win_amd64.pyd +0 -0
- wx/_msw.cp315-win_amd64.pyd +0 -0
- wx/_propgrid.cp315-win_amd64.pyd +0 -0
- wx/_ribbon.cp315-win_amd64.pyd +0 -0
- wx/_richtext.cp315-win_amd64.pyd +0 -0
- wx/_stc.cp315-win_amd64.pyd +0 -0
- wx/_xml.cp315-win_amd64.pyd +0 -0
- wx/_xrc.cp315-win_amd64.pyd +0 -0
- wx/adv.py +127 -0
- wx/adv.pyi +5931 -0
- wx/aui.py +70 -0
- wx/aui.pyi +4805 -0
- wx/core.py +3417 -0
- wx/core.pyi +62949 -0
- wx/dataview.py +176 -0
- wx/dataview.pyi +3828 -0
- wx/gizmos.py +18 -0
- wx/glcanvas.py +13 -0
- wx/glcanvas.pyi +544 -0
- wx/grid.py +237 -0
- wx/grid.pyi +5678 -0
- wx/html.py +38 -0
- wx/html.pyi +3283 -0
- wx/html2.py +46 -0
- wx/html2.pyi +1301 -0
- wx/include/wxPython/sip.h +1938 -0
- wx/include/wxPython/wxpy_api.h +418 -0
- wx/lib/CDate.py +201 -0
- wx/lib/ClickableHtmlWindow.py +57 -0
- wx/lib/__init__.py +0 -0
- wx/lib/activex.py +178 -0
- wx/lib/activexwrapper.py +153 -0
- wx/lib/agw/__init__.py +128 -0
- wx/lib/agw/advancedsplash.py +563 -0
- wx/lib/agw/aquabutton.py +1127 -0
- wx/lib/agw/artmanager.py +2110 -0
- wx/lib/agw/aui/__init__.py +295 -0
- wx/lib/agw/aui/aui_constants.py +2616 -0
- wx/lib/agw/aui/aui_switcherdialog.py +1232 -0
- wx/lib/agw/aui/aui_utilities.py +648 -0
- wx/lib/agw/aui/auibar.py +4045 -0
- wx/lib/agw/aui/auibook.py +6288 -0
- wx/lib/agw/aui/dockart.py +1198 -0
- wx/lib/agw/aui/framemanager.py +10485 -0
- wx/lib/agw/aui/tabart.py +2749 -0
- wx/lib/agw/aui/tabmdi.py +679 -0
- wx/lib/agw/balloontip.py +1157 -0
- wx/lib/agw/buttonpanel.py +2787 -0
- wx/lib/agw/cubecolourdialog.py +3529 -0
- wx/lib/agw/customtreectrl.py +9908 -0
- wx/lib/agw/data/ShortcutEditor_1.png +0 -0
- wx/lib/agw/data/ShortcutEditor_1_thumb.png +0 -0
- wx/lib/agw/data/ShortcutEditor_2.png +0 -0
- wx/lib/agw/data/ShortcutEditor_2_thumb.png +0 -0
- wx/lib/agw/data/ShortcutEditor_3.png +0 -0
- wx/lib/agw/data/ShortcutEditor_3_thumb.png +0 -0
- wx/lib/agw/data/ShortcutEditor_4.png +0 -0
- wx/lib/agw/data/ShortcutEditor_4_thumb.png +0 -0
- wx/lib/agw/data/default_help_text.html +105 -0
- wx/lib/agw/flatmenu.py +7392 -0
- wx/lib/agw/flatnotebook.py +6669 -0
- wx/lib/agw/floatspin.py +1820 -0
- wx/lib/agw/fmcustomizedlg.py +535 -0
- wx/lib/agw/fmresources.py +407 -0
- wx/lib/agw/foldpanelbar.py +2282 -0
- wx/lib/agw/fourwaysplitter.py +1130 -0
- wx/lib/agw/genericmessagedialog.py +1549 -0
- wx/lib/agw/gradientbutton.py +731 -0
- wx/lib/agw/hyperlink.py +664 -0
- wx/lib/agw/hypertreelist.py +5756 -0
- wx/lib/agw/infobar.py +885 -0
- wx/lib/agw/knobctrl.py +944 -0
- wx/lib/agw/labelbook.py +3028 -0
- wx/lib/agw/multidirdialog.py +581 -0
- wx/lib/agw/peakmeter.py +1028 -0
- wx/lib/agw/persist/__init__.py +188 -0
- wx/lib/agw/persist/persist_constants.py +283 -0
- wx/lib/agw/persist/persist_handlers.py +2614 -0
- wx/lib/agw/persist/persistencemanager.py +863 -0
- wx/lib/agw/piectrl.py +1082 -0
- wx/lib/agw/pybusyinfo.py +399 -0
- wx/lib/agw/pycollapsiblepane.py +940 -0
- wx/lib/agw/pygauge.py +570 -0
- wx/lib/agw/pyprogress.py +916 -0
- wx/lib/agw/ribbon/__init__.py +198 -0
- wx/lib/agw/ribbon/art.py +219 -0
- wx/lib/agw/ribbon/art_aui.py +1283 -0
- wx/lib/agw/ribbon/art_default.py +81 -0
- wx/lib/agw/ribbon/art_internal.py +248 -0
- wx/lib/agw/ribbon/art_msw.py +2735 -0
- wx/lib/agw/ribbon/art_osx.py +52 -0
- wx/lib/agw/ribbon/bar.py +1259 -0
- wx/lib/agw/ribbon/buttonbar.py +1317 -0
- wx/lib/agw/ribbon/control.py +205 -0
- wx/lib/agw/ribbon/gallery.py +973 -0
- wx/lib/agw/ribbon/page.py +946 -0
- wx/lib/agw/ribbon/panel.py +1170 -0
- wx/lib/agw/ribbon/toolbar.py +1441 -0
- wx/lib/agw/rulerctrl.py +1885 -0
- wx/lib/agw/scrolledthumbnail.py +2116 -0
- wx/lib/agw/shapedbutton.py +1809 -0
- wx/lib/agw/shortcuteditor.py +2642 -0
- wx/lib/agw/speedmeter.py +1800 -0
- wx/lib/agw/supertooltip.py +1443 -0
- wx/lib/agw/thumbnailctrl.py +529 -0
- wx/lib/agw/toasterbox.py +1327 -0
- wx/lib/agw/ultimatelistctrl.py +13671 -0
- wx/lib/agw/xlsgrid.py +2111 -0
- wx/lib/agw/zoombar.py +1336 -0
- wx/lib/analogclock/__init__.py +140 -0
- wx/lib/analogclock/analogclock.py +630 -0
- wx/lib/analogclock/helpers.py +986 -0
- wx/lib/analogclock/lib_setup/__init__.py +0 -0
- wx/lib/analogclock/lib_setup/buttontreectrlpanel.py +297 -0
- wx/lib/analogclock/lib_setup/fontselect.py +57 -0
- wx/lib/analogclock/setup.py +490 -0
- wx/lib/analogclock/styles.py +47 -0
- wx/lib/anchors.py +103 -0
- wx/lib/art/__init__.py +4 -0
- wx/lib/art/flagart.py +1583 -0
- wx/lib/art/img2pyartprov.py +56 -0
- wx/lib/busy.py +152 -0
- wx/lib/buttons.py +1140 -0
- wx/lib/calendar.py +1596 -0
- wx/lib/checkbox.py +837 -0
- wx/lib/colourchooser/__init__.py +36 -0
- wx/lib/colourchooser/canvas.py +145 -0
- wx/lib/colourchooser/intl.py +24 -0
- wx/lib/colourchooser/pycolourbox.py +89 -0
- wx/lib/colourchooser/pycolourchooser.py +626 -0
- wx/lib/colourchooser/pycolourslider.py +98 -0
- wx/lib/colourchooser/pypalette.py +208 -0
- wx/lib/colourdb.py +740 -0
- wx/lib/colourselect.py +385 -0
- wx/lib/colourutils.py +118 -0
- wx/lib/combotreebox.py +944 -0
- wx/lib/delayedresult.py +420 -0
- wx/lib/dialogs.py +510 -0
- wx/lib/docview.py +3210 -0
- wx/lib/dragscroller.py +79 -0
- wx/lib/editor/README.txt +77 -0
- wx/lib/editor/__init__.py +24 -0
- wx/lib/editor/editor.py +974 -0
- wx/lib/editor/images.py +15 -0
- wx/lib/editor/selection.py +44 -0
- wx/lib/embeddedimage.py +76 -0
- wx/lib/eventStack.py +136 -0
- wx/lib/eventwatcher.py +440 -0
- wx/lib/evtmgr.py +521 -0
- wx/lib/expando.py +393 -0
- wx/lib/fancytext.py +494 -0
- wx/lib/filebrowsebutton.py +461 -0
- wx/lib/flashwin.py +262 -0
- wx/lib/flashwin_old.py +651 -0
- wx/lib/floatcanvas/FCEvents.py +53 -0
- wx/lib/floatcanvas/FCObjects.py +2910 -0
- wx/lib/floatcanvas/FloatCanvas.py +1025 -0
- wx/lib/floatcanvas/GUIMode.py +396 -0
- wx/lib/floatcanvas/NavCanvas.py +162 -0
- wx/lib/floatcanvas/Resources.py +319 -0
- wx/lib/floatcanvas/ScreenShot.py +1788 -0
- wx/lib/floatcanvas/Utilities/BBox.py +313 -0
- wx/lib/floatcanvas/Utilities/Colors.py +137 -0
- wx/lib/floatcanvas/Utilities/GUI.py +91 -0
- wx/lib/floatcanvas/Utilities/__init__.py +7 -0
- wx/lib/floatcanvas/__init__.py +124 -0
- wx/lib/foldmenu.py +89 -0
- wx/lib/gestures.py +310 -0
- wx/lib/gizmos/__init__.py +18 -0
- wx/lib/gizmos/dynamicsash.py +1202 -0
- wx/lib/gizmos/ledctrl.py +299 -0
- wx/lib/gizmos/treelistctrl.py +87 -0
- wx/lib/graphics.py +1942 -0
- wx/lib/gridmovers.py +516 -0
- wx/lib/iewin.py +249 -0
- wx/lib/iewin_old.py +894 -0
- wx/lib/imagebrowser.py +853 -0
- wx/lib/imageutils.py +163 -0
- wx/lib/infoframe.py +490 -0
- wx/lib/inspection.py +1254 -0
- wx/lib/intctrl.py +990 -0
- wx/lib/itemspicker.py +256 -0
- wx/lib/langlistctrl.py +480 -0
- wx/lib/layoutf.py +271 -0
- wx/lib/masked/__init__.py +27 -0
- wx/lib/masked/combobox.py +839 -0
- wx/lib/masked/ctrl.py +108 -0
- wx/lib/masked/ipaddrctrl.py +241 -0
- wx/lib/masked/maskededit.py +7262 -0
- wx/lib/masked/numctrl.py +2000 -0
- wx/lib/masked/textctrl.py +465 -0
- wx/lib/masked/timectrl.py +1465 -0
- wx/lib/mixins/__init__.py +17 -0
- wx/lib/mixins/grid.py +47 -0
- wx/lib/mixins/gridlabelrenderer.py +277 -0
- wx/lib/mixins/imagelist.py +77 -0
- wx/lib/mixins/inspection.py +184 -0
- wx/lib/mixins/listctrl.py +893 -0
- wx/lib/mixins/rubberband.py +403 -0
- wx/lib/mixins/treemixin.py +678 -0
- wx/lib/msgpanel.py +95 -0
- wx/lib/multisash.py +746 -0
- wx/lib/myole4ax.idl +178 -0
- wx/lib/myole4ax.tlb +0 -0
- wx/lib/newevent.py +229 -0
- wx/lib/newevent.pyi +25 -0
- wx/lib/nvdlg.py +156 -0
- wx/lib/ogl/__init__.py +13 -0
- wx/lib/ogl/basic.py +3989 -0
- wx/lib/ogl/bmpshape.py +86 -0
- wx/lib/ogl/canvas.py +467 -0
- wx/lib/ogl/composit.py +1576 -0
- wx/lib/ogl/diagram.py +230 -0
- wx/lib/ogl/divided.py +482 -0
- wx/lib/ogl/drawn.py +898 -0
- wx/lib/ogl/lines.py +1809 -0
- wx/lib/ogl/oglmisc.py +607 -0
- wx/lib/pdfviewer/__init__.py +113 -0
- wx/lib/pdfviewer/bitmaps/ArrowLeft.png +0 -0
- wx/lib/pdfviewer/bitmaps/ArrowRight.png +0 -0
- wx/lib/pdfviewer/bitmaps/DirectionH.png +0 -0
- wx/lib/pdfviewer/bitmaps/DirectionV.png +0 -0
- wx/lib/pdfviewer/bitmaps/PlayerFirst.png +0 -0
- wx/lib/pdfviewer/bitmaps/PlayerLast.png +0 -0
- wx/lib/pdfviewer/bitmaps/PlayerNext.png +0 -0
- wx/lib/pdfviewer/bitmaps/PlayerPrev.png +0 -0
- wx/lib/pdfviewer/bitmaps/Printer.png +0 -0
- wx/lib/pdfviewer/bitmaps/ReadMe.txt +28 -0
- wx/lib/pdfviewer/bitmaps/Save.png +0 -0
- wx/lib/pdfviewer/bitmaps/ZoomIn.png +0 -0
- wx/lib/pdfviewer/bitmaps/ZoomOut.png +0 -0
- wx/lib/pdfviewer/bitmaps/encode_bitmaps.py +37 -0
- wx/lib/pdfviewer/buttonpanel.py +285 -0
- wx/lib/pdfviewer/images.py +240 -0
- wx/lib/pdfviewer/viewer.py +1118 -0
- wx/lib/pdfwin.py +295 -0
- wx/lib/pdfwin_old.py +789 -0
- wx/lib/platebtn.py +789 -0
- wx/lib/plot/CHANGELOG.md +150 -0
- wx/lib/plot/README.md +16 -0
- wx/lib/plot/__init__.py +46 -0
- wx/lib/plot/__main__.py +5 -0
- wx/lib/plot/examples/__init__.py +0 -0
- wx/lib/plot/examples/demo.py +1010 -0
- wx/lib/plot/examples/simple_example.py +56 -0
- wx/lib/plot/plotcanvas.py +2985 -0
- wx/lib/plot/polyobjects.py +1524 -0
- wx/lib/plot/utils.py +334 -0
- wx/lib/popupctl.py +251 -0
- wx/lib/printout.py +1155 -0
- wx/lib/progressindicator.py +151 -0
- wx/lib/pubsub/LICENSE_BSD_Simple.txt +23 -0
- wx/lib/pubsub/README_WxPython.txt +22 -0
- wx/lib/pubsub/RELEASE_NOTES.txt +71 -0
- wx/lib/pubsub/__init__.py +25 -0
- wx/lib/pubsub/core/__init__.py +92 -0
- wx/lib/pubsub/core/arg1/__init__.py +16 -0
- wx/lib/pubsub/core/arg1/listenerimpl.py +97 -0
- wx/lib/pubsub/core/arg1/publisher.py +40 -0
- wx/lib/pubsub/core/arg1/publishermixin.py +34 -0
- wx/lib/pubsub/core/arg1/topicargspecimpl.py +66 -0
- wx/lib/pubsub/core/arg1/topicmgrimpl.py +19 -0
- wx/lib/pubsub/core/callables.py +198 -0
- wx/lib/pubsub/core/imp2.py +62 -0
- wx/lib/pubsub/core/itopicdefnprovider.py +0 -0
- wx/lib/pubsub/core/kwargs/__init__.py +16 -0
- wx/lib/pubsub/core/kwargs/datamsg.py +27 -0
- wx/lib/pubsub/core/kwargs/listenerimpl.py +93 -0
- wx/lib/pubsub/core/kwargs/publisher.py +77 -0
- wx/lib/pubsub/core/kwargs/publishermixin.py +65 -0
- wx/lib/pubsub/core/kwargs/topicargspecimpl.py +216 -0
- wx/lib/pubsub/core/kwargs/topicmgrimpl.py +13 -0
- wx/lib/pubsub/core/listener.py +40 -0
- wx/lib/pubsub/core/listenerbase.py +185 -0
- wx/lib/pubsub/core/notificationmgr.py +185 -0
- wx/lib/pubsub/core/publisherbase.py +189 -0
- wx/lib/pubsub/core/topicargspec.py +77 -0
- wx/lib/pubsub/core/topicdefnprovider.py +631 -0
- wx/lib/pubsub/core/topicexc.py +72 -0
- wx/lib/pubsub/core/topicmgr.py +454 -0
- wx/lib/pubsub/core/topicobj.py +472 -0
- wx/lib/pubsub/core/topictreetraverser.py +143 -0
- wx/lib/pubsub/core/topicutils.py +119 -0
- wx/lib/pubsub/core/treeconfig.py +21 -0
- wx/lib/pubsub/core/validatedefnargs.py +29 -0
- wx/lib/pubsub/core/weakmethod.py +102 -0
- wx/lib/pubsub/policies.py +24 -0
- wx/lib/pubsub/pub.py +199 -0
- wx/lib/pubsub/setuparg1.py +47 -0
- wx/lib/pubsub/setupkwargs.py +29 -0
- wx/lib/pubsub/utils/__init__.py +27 -0
- wx/lib/pubsub/utils/exchandling.py +100 -0
- wx/lib/pubsub/utils/misc.py +99 -0
- wx/lib/pubsub/utils/notification.py +331 -0
- wx/lib/pubsub/utils/topictreeprinter.py +195 -0
- wx/lib/pubsub/utils/xmltopicdefnprovider.py +286 -0
- wx/lib/pydocview.py +3300 -0
- wx/lib/rcsizer.py +227 -0
- wx/lib/resizewidget.py +357 -0
- wx/lib/scrolledpanel.py +243 -0
- wx/lib/sheet.py +350 -0
- wx/lib/sized_controls.py +691 -0
- wx/lib/softwareupdate.py +355 -0
- wx/lib/splitter.py +925 -0
- wx/lib/statbmp.py +199 -0
- wx/lib/stattext.py +321 -0
- wx/lib/throbber.py +424 -0
- wx/lib/ticker.py +306 -0
- wx/lib/ticker_xrc.py +48 -0
- wx/lib/utils.py +89 -0
- wx/lib/wordwrap.py +97 -0
- wx/lib/wxcairo/__init__.py +139 -0
- wx/lib/wxcairo/wx_cairocffi.py +200 -0
- wx/lib/wxcairo/wx_pycairo.py +455 -0
- wx/lib/wxpTag.py +274 -0
- wx/libcairo-2.dll +0 -0
- wx/locale/af/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/an/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ar/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ca/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ca@valencia/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/co/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/cs/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/da/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/de/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/el/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/es/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/eu/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/fa_IR/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/fi/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/fr/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/gl_ES/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/hi/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/hr/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/hu/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/id/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/it/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ja/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ka/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ko_KR/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/lt/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/lv/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ms/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/nb/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ne/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/nl/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/pl/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/pt/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/pt_BR/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ro/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ru/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/sk/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/sl/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/sq/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/sr/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/sv/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ta/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/tr/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/uk/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/vi/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/zh_CN/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/zh_TW/LC_MESSAGES/wxstd.mo +0 -0
- wx/media.py +30 -0
- wx/media.pyi +272 -0
- wx/msw.py +16 -0
- wx/msw.pyi +91 -0
- wx/propgrid.py +498 -0
- wx/propgrid.pyi +7427 -0
- wx/py/CHANGES.txt +796 -0
- wx/py/Py.ico +0 -0
- wx/py/PyAlaCarte.py +34 -0
- wx/py/PyAlaMode.py +34 -0
- wx/py/PyAlaModeTest.py +33 -0
- wx/py/PyCrust.ico +0 -0
- wx/py/PyCrust.py +78 -0
- wx/py/PyCrust_16.png +0 -0
- wx/py/PyCrust_32.png +0 -0
- wx/py/PyFilling.py +35 -0
- wx/py/PyShell.py +78 -0
- wx/py/PySlices.ico +0 -0
- wx/py/PySlices.py +98 -0
- wx/py/PySlicesShell.py +94 -0
- wx/py/PySlices_16.png +0 -0
- wx/py/PySlices_32.png +0 -0
- wx/py/PyWrap.py +52 -0
- wx/py/README.txt +77 -0
- wx/py/__init__.py +20 -0
- wx/py/buffer.py +136 -0
- wx/py/crust.py +403 -0
- wx/py/crustslices.py +403 -0
- wx/py/dispatcher.py +259 -0
- wx/py/document.py +37 -0
- wx/py/editor.py +844 -0
- wx/py/editwindow.py +316 -0
- wx/py/filling.py +358 -0
- wx/py/frame.py +976 -0
- wx/py/images.py +212 -0
- wx/py/interpreter.py +161 -0
- wx/py/introspect.py +402 -0
- wx/py/magic.py +98 -0
- wx/py/parse.py +134 -0
- wx/py/path.py +36 -0
- wx/py/pseudo.py +99 -0
- wx/py/shell.py +1579 -0
- wx/py/sliceshell.py +3805 -0
- wx/py/tests/test_interpreter.py +71 -0
- wx/py/tests/test_introspect.py +810 -0
- wx/py/tests/test_pseudo.py +70 -0
- wx/py/tests/test_version.py +36 -0
- wx/py/tests/testall.py +22 -0
- wx/py/version.py +7 -0
- wx/py.typed +0 -0
- wx/ribbon.py +48 -0
- wx/ribbon.pyi +3099 -0
- wx/richtext.py +141 -0
- wx/richtext.pyi +13581 -0
- wx/siplib.cp315-win_amd64.pyd +0 -0
- wx/siplib.pyi +19 -0
- wx/stc.py +59 -0
- wx/stc.pyi +9918 -0
- wx/svg/__init__.py +363 -0
- wx/svg/_nanosvg.cp315-win_amd64.pyd +0 -0
- wx/tools/__init__.py +18 -0
- wx/tools/dbg.py +268 -0
- wx/tools/genaxmodule.py +50 -0
- wx/tools/helpviewer.py +92 -0
- wx/tools/img2img.py +85 -0
- wx/tools/img2png.py +54 -0
- wx/tools/img2py.py +306 -0
- wx/tools/img2xpm.py +54 -0
- wx/tools/pywxrc.py +951 -0
- wx/tools/wxget.py +254 -0
- wx/tools/wxget_docs_demo.py +183 -0
- wx/wxbase334u_net_vc140_x64.dll +0 -0
- wx/wxbase334u_vc140_x64.dll +0 -0
- wx/wxbase334u_xml_vc140_x64.dll +0 -0
- wx/wxmsw334u_adv_vc140_x64.dll +0 -0
- wx/wxmsw334u_aui_vc140_x64.dll +0 -0
- wx/wxmsw334u_core_vc140_x64.dll +0 -0
- wx/wxmsw334u_gl_vc140_x64.dll +0 -0
- wx/wxmsw334u_html_vc140_x64.dll +0 -0
- wx/wxmsw334u_media_vc140_x64.dll +0 -0
- wx/wxmsw334u_propgrid_vc140_x64.dll +0 -0
- wx/wxmsw334u_qa_vc140_x64.dll +0 -0
- wx/wxmsw334u_ribbon_vc140_x64.dll +0 -0
- wx/wxmsw334u_richtext_vc140_x64.dll +0 -0
- wx/wxmsw334u_stc_vc140_x64.dll +0 -0
- wx/wxmsw334u_webview_vc140_x64.dll +0 -0
- wx/wxmsw334u_xrc_vc140_x64.dll +0 -0
- wx/xml.py +18 -0
- wx/xml.pyi +728 -0
- wx/xrc.py +68 -0
- wx/xrc.pyi +896 -0
- wxpython-4.3.2.dist-info/METADATA +71 -0
- wxpython-4.3.2.dist-info/RECORD +472 -0
- wxpython-4.3.2.dist-info/WHEEL +5 -0
- wxpython-4.3.2.dist-info/entry_points.txt +13 -0
- wxpython-4.3.2.dist-info/licenses/LICENSE.txt +610 -0
- wxpython-4.3.2.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
#---------------------------------------------------------------------------
|
|
2
|
+
# Name: wx.lib.mixins.rubberband
|
|
3
|
+
# Purpose: A mixin class for doing "RubberBand"-ing on a window.
|
|
4
|
+
#
|
|
5
|
+
# Author: Robb Shecter and members of wxPython-users
|
|
6
|
+
#
|
|
7
|
+
# Created: 11-September-2002
|
|
8
|
+
# Copyright: (c) 2002 by db-X Corporation
|
|
9
|
+
# Licence: wxWindows license
|
|
10
|
+
# Tags: phoenix-port
|
|
11
|
+
#---------------------------------------------------------------------------
|
|
12
|
+
# 12/14/2003 - Jeff Grimmett (grimmtooth@softhome.net)
|
|
13
|
+
#
|
|
14
|
+
# o 2.5 compatibility update.
|
|
15
|
+
# o Tested, but there is an anomaly between first use and subsequent uses.
|
|
16
|
+
# First use is odd, subsequent uses seem to be OK. Init error?
|
|
17
|
+
# -- No, the first time it uses an aspect ratio, but after the reset it doesn't.
|
|
18
|
+
#
|
|
19
|
+
|
|
20
|
+
"""
|
|
21
|
+
A mixin class for doing "RubberBand"-ing on a window.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
import wx
|
|
25
|
+
|
|
26
|
+
#
|
|
27
|
+
# Some miscellaneous mathematical and geometrical functions
|
|
28
|
+
#
|
|
29
|
+
|
|
30
|
+
def isNegative(aNumber):
|
|
31
|
+
"""
|
|
32
|
+
x < 0: 1
|
|
33
|
+
else: 0
|
|
34
|
+
"""
|
|
35
|
+
return aNumber < 0
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def normalizeBox(box):
|
|
39
|
+
"""
|
|
40
|
+
Convert any negative measurements in the current
|
|
41
|
+
box to positive, and adjust the origin.
|
|
42
|
+
"""
|
|
43
|
+
x, y, w, h = box
|
|
44
|
+
if w < 0:
|
|
45
|
+
x += (w+1)
|
|
46
|
+
w *= -1
|
|
47
|
+
if h < 0:
|
|
48
|
+
y += (h+1)
|
|
49
|
+
h *= -1
|
|
50
|
+
return (x, y, w, h)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def boxToExtent(box):
|
|
54
|
+
"""
|
|
55
|
+
Convert a box specification to an extent specification.
|
|
56
|
+
I put this into a separate function after I realized that
|
|
57
|
+
I had been implementing it wrong in several places.
|
|
58
|
+
"""
|
|
59
|
+
b = normalizeBox(box)
|
|
60
|
+
return (b[0], b[1], b[0]+b[2]-1, b[1]+b[3]-1)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def pointInBox(x, y, box):
|
|
64
|
+
"""
|
|
65
|
+
Return True if the given point is contained in the box.
|
|
66
|
+
"""
|
|
67
|
+
e = boxToExtent(box)
|
|
68
|
+
return x >= e[0] and x <= e[2] and y >= e[1] and y <= e[3]
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def pointOnBox(x, y, box, thickness=1):
|
|
72
|
+
"""
|
|
73
|
+
Return True if the point is on the outside edge
|
|
74
|
+
of the box. The thickness defines how thick the
|
|
75
|
+
edge should be. This is necessary for HCI reasons:
|
|
76
|
+
For example, it's normally very difficult for a user
|
|
77
|
+
to maneuver the mouse onto a one pixel border.
|
|
78
|
+
"""
|
|
79
|
+
outerBox = box
|
|
80
|
+
innerBox = (box[0]+thickness, box[1]+thickness, box[2]-(thickness*2), box[3]-(thickness*2))
|
|
81
|
+
return pointInBox(x, y, outerBox) and not pointInBox(x, y, innerBox)
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def getCursorPosition(x, y, box, thickness=1):
|
|
85
|
+
"""
|
|
86
|
+
Return a position number in the range 0 .. 7 to indicate
|
|
87
|
+
where on the box border the point is. The layout is:
|
|
88
|
+
|
|
89
|
+
0 1 2
|
|
90
|
+
7 3
|
|
91
|
+
6 5 4
|
|
92
|
+
"""
|
|
93
|
+
x0, y0, x1, y1 = boxToExtent(box)
|
|
94
|
+
w, h = box[2], box[3]
|
|
95
|
+
delta = thickness - 1
|
|
96
|
+
p = None
|
|
97
|
+
|
|
98
|
+
if pointInBox(x, y, (x0, y0, thickness, thickness)):
|
|
99
|
+
p = 0
|
|
100
|
+
elif pointInBox(x, y, (x1-delta, y0, thickness, thickness)):
|
|
101
|
+
p = 2
|
|
102
|
+
elif pointInBox(x, y, (x1-delta, y1-delta, thickness, thickness)):
|
|
103
|
+
p = 4
|
|
104
|
+
elif pointInBox(x, y, (x0, y1-delta, thickness, thickness)):
|
|
105
|
+
p = 6
|
|
106
|
+
elif pointInBox(x, y, (x0+thickness, y0, w-(thickness*2), thickness)):
|
|
107
|
+
p = 1
|
|
108
|
+
elif pointInBox(x, y, (x1-delta, y0+thickness, thickness, h-(thickness*2))):
|
|
109
|
+
p = 3
|
|
110
|
+
elif pointInBox(x, y, (x0+thickness, y1-delta, w-(thickness*2), thickness)):
|
|
111
|
+
p = 5
|
|
112
|
+
elif pointInBox(x, y, (x0, y0+thickness, thickness, h-(thickness*2))):
|
|
113
|
+
p = 7
|
|
114
|
+
|
|
115
|
+
return p
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
class RubberBand:
|
|
121
|
+
"""
|
|
122
|
+
A stretchable border which is drawn on top of an
|
|
123
|
+
image to define an area.
|
|
124
|
+
"""
|
|
125
|
+
def __init__(self, drawingSurface, aspectRatio=None):
|
|
126
|
+
self.__THICKNESS = 5
|
|
127
|
+
self.drawingSurface = drawingSurface
|
|
128
|
+
self.aspectRatio = aspectRatio
|
|
129
|
+
self.hasLetUp = 0
|
|
130
|
+
self.currentlyMoving = None
|
|
131
|
+
self.currentBox = None
|
|
132
|
+
self.__enabled = 1
|
|
133
|
+
self.__currentCursor = None
|
|
134
|
+
|
|
135
|
+
drawingSurface.Bind(wx.EVT_MOUSE_EVENTS, self.__handleMouseEvents)
|
|
136
|
+
drawingSurface.Bind(wx.EVT_PAINT, self.__handleOnPaint)
|
|
137
|
+
|
|
138
|
+
def __setEnabled(self, enabled):
|
|
139
|
+
self.__enabled = enabled
|
|
140
|
+
|
|
141
|
+
def __isEnabled(self):
|
|
142
|
+
return self.__enabled
|
|
143
|
+
|
|
144
|
+
def __handleOnPaint(self, event):
|
|
145
|
+
#print('paint')
|
|
146
|
+
event.Skip()
|
|
147
|
+
|
|
148
|
+
def __isMovingCursor(self):
|
|
149
|
+
"""
|
|
150
|
+
Return True if the current cursor is one used to
|
|
151
|
+
mean moving the rubberband.
|
|
152
|
+
"""
|
|
153
|
+
return self.__currentCursor == wx.CURSOR_HAND
|
|
154
|
+
|
|
155
|
+
def __isSizingCursor(self):
|
|
156
|
+
"""
|
|
157
|
+
Return True if the current cursor is one of the ones
|
|
158
|
+
I may use to signify sizing.
|
|
159
|
+
"""
|
|
160
|
+
sizingCursors = [wx.CURSOR_SIZENESW,
|
|
161
|
+
wx.CURSOR_SIZENS,
|
|
162
|
+
wx.CURSOR_SIZENWSE,
|
|
163
|
+
wx.CURSOR_SIZEWE,
|
|
164
|
+
wx.CURSOR_SIZING,
|
|
165
|
+
wx.CURSOR_CROSS]
|
|
166
|
+
try:
|
|
167
|
+
sizingCursors.index(self.__currentCursor)
|
|
168
|
+
return 1
|
|
169
|
+
except ValueError:
|
|
170
|
+
return 0
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
def __handleMouseEvents(self, event):
|
|
174
|
+
"""
|
|
175
|
+
React according to the new event. This is the main
|
|
176
|
+
entry point into the class. This method contains the
|
|
177
|
+
logic for the class's behavior.
|
|
178
|
+
"""
|
|
179
|
+
if not self.enabled:
|
|
180
|
+
return
|
|
181
|
+
|
|
182
|
+
x, y = event.GetPosition()
|
|
183
|
+
|
|
184
|
+
# First make sure we have started a box.
|
|
185
|
+
if self.currentBox is None and not event.LeftDown():
|
|
186
|
+
# No box started yet. Set cursor to the initial kind.
|
|
187
|
+
self.__setCursor(wx.CURSOR_CROSS)
|
|
188
|
+
return
|
|
189
|
+
|
|
190
|
+
if event.LeftDown():
|
|
191
|
+
if self.currentBox is None:
|
|
192
|
+
# No RB Box, so start a new one.
|
|
193
|
+
self.currentBox = (x, y, 0, 0)
|
|
194
|
+
self.hasLetUp = 0
|
|
195
|
+
elif self.__isSizingCursor():
|
|
196
|
+
# Starting a sizing operation. Change the origin.
|
|
197
|
+
position = getCursorPosition(x, y, self.currentBox, thickness=self.__THICKNESS)
|
|
198
|
+
self.currentBox = self.__denormalizeBox(position, self.currentBox)
|
|
199
|
+
|
|
200
|
+
elif event.Dragging() and event.LeftIsDown():
|
|
201
|
+
# Use the cursor type to determine operation
|
|
202
|
+
if self.__isMovingCursor():
|
|
203
|
+
if self.currentlyMoving or pointInBox(x, y, self.currentBox):
|
|
204
|
+
if not self.currentlyMoving:
|
|
205
|
+
self.currentlyMoving = (x - self.currentBox[0], y - self.currentBox[1])
|
|
206
|
+
self.__moveTo(x - self.currentlyMoving[0], y - self.currentlyMoving[1])
|
|
207
|
+
elif self.__isSizingCursor():
|
|
208
|
+
self.__resizeBox(x, y)
|
|
209
|
+
|
|
210
|
+
elif event.LeftUp():
|
|
211
|
+
self.hasLetUp = 1
|
|
212
|
+
self.currentlyMoving = None
|
|
213
|
+
self.__normalizeBox()
|
|
214
|
+
|
|
215
|
+
elif event.Moving() and not event.Dragging():
|
|
216
|
+
# Simple mouse movement event
|
|
217
|
+
self.__mouseMoved(x,y)
|
|
218
|
+
|
|
219
|
+
def __denormalizeBox(self, position, box):
|
|
220
|
+
x, y, w, h = box
|
|
221
|
+
b = box
|
|
222
|
+
if position == 2 or position == 3:
|
|
223
|
+
b = (x, y + (h-1), w, h * -1)
|
|
224
|
+
elif position == 0 or position == 1 or position == 7:
|
|
225
|
+
b = (x + (w-1), y + (h-1), w * -1, h * -1)
|
|
226
|
+
elif position == 6:
|
|
227
|
+
b = (x + (w-1), y, w * -1, h)
|
|
228
|
+
return b
|
|
229
|
+
|
|
230
|
+
def __resizeBox(self, x, y):
|
|
231
|
+
"""
|
|
232
|
+
Resize and repaint the box based on the given mouse
|
|
233
|
+
coordinates.
|
|
234
|
+
"""
|
|
235
|
+
# Implement the correct behavior for dragging a side
|
|
236
|
+
# of the box: Only change one dimension.
|
|
237
|
+
if not self.aspectRatio:
|
|
238
|
+
if self.__currentCursor == wx.CURSOR_SIZENS:
|
|
239
|
+
x = None
|
|
240
|
+
elif self.__currentCursor == wx.CURSOR_SIZEWE:
|
|
241
|
+
y = None
|
|
242
|
+
|
|
243
|
+
x0,y0,w0,h0 = self.currentBox
|
|
244
|
+
currentExtent = boxToExtent(self.currentBox)
|
|
245
|
+
if x is None:
|
|
246
|
+
if w0 < 1:
|
|
247
|
+
w0 += 1
|
|
248
|
+
else:
|
|
249
|
+
w0 -= 1
|
|
250
|
+
x = x0 + w0
|
|
251
|
+
if y is None:
|
|
252
|
+
if h0 < 1:
|
|
253
|
+
h0 += 1
|
|
254
|
+
else:
|
|
255
|
+
h0 -= 1
|
|
256
|
+
y = y0 + h0
|
|
257
|
+
x1,y1 = x, y
|
|
258
|
+
w, h = abs(x1-x0)+1, abs(y1-y0)+1
|
|
259
|
+
if self.aspectRatio:
|
|
260
|
+
w = max(w, int(h * self.aspectRatio))
|
|
261
|
+
h = int(w / self.aspectRatio)
|
|
262
|
+
w *= [1,-1][isNegative(x1-x0)]
|
|
263
|
+
h *= [1,-1][isNegative(y1-y0)]
|
|
264
|
+
newbox = (x0, y0, w, h)
|
|
265
|
+
self.__drawAndErase(boxToDraw=normalizeBox(newbox), boxToErase=normalizeBox(self.currentBox))
|
|
266
|
+
self.currentBox = (x0, y0, w, h)
|
|
267
|
+
|
|
268
|
+
def __normalizeBox(self):
|
|
269
|
+
"""
|
|
270
|
+
Convert any negative measurements in the current
|
|
271
|
+
box to positive, and adjust the origin.
|
|
272
|
+
"""
|
|
273
|
+
self.currentBox = normalizeBox(self.currentBox)
|
|
274
|
+
|
|
275
|
+
def __mouseMoved(self, x, y):
|
|
276
|
+
"""
|
|
277
|
+
Called when the mouse moved without any buttons pressed
|
|
278
|
+
or dragging being done.
|
|
279
|
+
"""
|
|
280
|
+
# Are we on the bounding box?
|
|
281
|
+
if pointOnBox(x, y, self.currentBox, thickness=self.__THICKNESS):
|
|
282
|
+
position = getCursorPosition(x, y, self.currentBox, thickness=self.__THICKNESS)
|
|
283
|
+
cursor = [
|
|
284
|
+
wx.CURSOR_SIZENWSE,
|
|
285
|
+
wx.CURSOR_SIZENS,
|
|
286
|
+
wx.CURSOR_SIZENESW,
|
|
287
|
+
wx.CURSOR_SIZEWE,
|
|
288
|
+
wx.CURSOR_SIZENWSE,
|
|
289
|
+
wx.CURSOR_SIZENS,
|
|
290
|
+
wx.CURSOR_SIZENESW,
|
|
291
|
+
wx.CURSOR_SIZEWE
|
|
292
|
+
] [position]
|
|
293
|
+
self.__setCursor(cursor)
|
|
294
|
+
elif pointInBox(x, y, self.currentBox):
|
|
295
|
+
self.__setCursor(wx.CURSOR_HAND)
|
|
296
|
+
else:
|
|
297
|
+
self.__setCursor()
|
|
298
|
+
|
|
299
|
+
def __setCursor(self, id=None):
|
|
300
|
+
"""
|
|
301
|
+
Set the mouse cursor to the given id.
|
|
302
|
+
"""
|
|
303
|
+
if self.__currentCursor != id: # Avoid redundant calls
|
|
304
|
+
if id:
|
|
305
|
+
self.drawingSurface.SetCursor(wx.Cursor(id))
|
|
306
|
+
else:
|
|
307
|
+
self.drawingSurface.SetCursor(wx.NullCursor)
|
|
308
|
+
self.__currentCursor = id
|
|
309
|
+
|
|
310
|
+
def __moveCenterTo(self, x, y):
|
|
311
|
+
"""
|
|
312
|
+
Move the rubber band so that its center is at (x,y).
|
|
313
|
+
"""
|
|
314
|
+
x0, y0, w, h = self.currentBox
|
|
315
|
+
x2, y2 = x - (w/2), y - (h/2)
|
|
316
|
+
self.__moveTo(x2, y2)
|
|
317
|
+
|
|
318
|
+
def __moveTo(self, x, y):
|
|
319
|
+
"""
|
|
320
|
+
Move the rubber band so that its origin is at (x,y).
|
|
321
|
+
"""
|
|
322
|
+
newbox = (x, y, self.currentBox[2], self.currentBox[3])
|
|
323
|
+
self.__drawAndErase(boxToDraw=newbox, boxToErase=self.currentBox)
|
|
324
|
+
self.currentBox = newbox
|
|
325
|
+
|
|
326
|
+
def __drawAndErase(self, boxToDraw, boxToErase=None):
|
|
327
|
+
"""
|
|
328
|
+
Draw one box shape and possibly erase another.
|
|
329
|
+
"""
|
|
330
|
+
dc = wx.ClientDC(self.drawingSurface)
|
|
331
|
+
dc.SetPen(wx.Pen(wx.WHITE, 1, wx.PENSTYLE_DOT))
|
|
332
|
+
dc.SetBrush(wx.TRANSPARENT_BRUSH)
|
|
333
|
+
dc.SetLogicalFunction(wx.XOR)
|
|
334
|
+
if boxToErase:
|
|
335
|
+
dc.Clear()
|
|
336
|
+
|
|
337
|
+
r = wx.Rect(*boxToDraw)
|
|
338
|
+
dc.DrawRectangle(r)
|
|
339
|
+
|
|
340
|
+
def __dumpMouseEvent(self, event):
|
|
341
|
+
print('Moving: ',event.Moving())
|
|
342
|
+
print('Dragging: ',event.Dragging())
|
|
343
|
+
print('LeftDown: ',event.LeftDown())
|
|
344
|
+
print('LeftisDown: ',event.LeftIsDown())
|
|
345
|
+
print('LeftUp: ',event.LeftUp())
|
|
346
|
+
print('Position: ',event.GetPosition())
|
|
347
|
+
print('x,y: ',event.GetX(),event.GetY())
|
|
348
|
+
print()
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
#
|
|
352
|
+
# The public API:
|
|
353
|
+
#
|
|
354
|
+
|
|
355
|
+
def reset(self, aspectRatio=None):
|
|
356
|
+
"""
|
|
357
|
+
Clear the existing rubberband
|
|
358
|
+
"""
|
|
359
|
+
self.currentBox = None
|
|
360
|
+
self.aspectRatio = aspectRatio
|
|
361
|
+
self.drawingSurface.Refresh()
|
|
362
|
+
|
|
363
|
+
def getCurrentExtent(self):
|
|
364
|
+
"""
|
|
365
|
+
Return (x0, y0, x1, y1) or None if
|
|
366
|
+
no drawing has yet been done.
|
|
367
|
+
"""
|
|
368
|
+
if not self.currentBox:
|
|
369
|
+
extent = None
|
|
370
|
+
else:
|
|
371
|
+
extent = boxToExtent(self.currentBox)
|
|
372
|
+
return extent
|
|
373
|
+
|
|
374
|
+
enabled = property(__isEnabled, __setEnabled, None, 'True if I am responding to mouse events')
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
if __name__ == '__main__':
|
|
379
|
+
app = wx.App()
|
|
380
|
+
frame = wx.Frame(None, -1, title='RubberBand Test', size=(300,300))
|
|
381
|
+
|
|
382
|
+
# Add a panel that the rubberband will work on.
|
|
383
|
+
panel = wx.Panel(frame, -1)
|
|
384
|
+
panel.SetBackgroundColour(wx.BLUE)
|
|
385
|
+
|
|
386
|
+
# Create the rubberband
|
|
387
|
+
frame.rubberBand = RubberBand(drawingSurface=panel)
|
|
388
|
+
frame.rubberBand.reset(aspectRatio=0.5)
|
|
389
|
+
|
|
390
|
+
# Add a button that creates a new rubberband
|
|
391
|
+
def __newRubberBand(event):
|
|
392
|
+
frame.rubberBand.reset()
|
|
393
|
+
button = wx.Button(frame, 100, 'Reset Rubberband')
|
|
394
|
+
frame.Bind(wx.EVT_BUTTON, __newRubberBand, button)
|
|
395
|
+
|
|
396
|
+
# Layout the frame
|
|
397
|
+
sizer = wx.BoxSizer(wx.VERTICAL)
|
|
398
|
+
sizer.Add(panel, 1, wx.EXPAND | wx.ALL, 5)
|
|
399
|
+
sizer.Add(button, 0, wx.ALIGN_CENTER | wx.ALL, 5)
|
|
400
|
+
frame.SetAutoLayout(1)
|
|
401
|
+
frame.SetSizer(sizer)
|
|
402
|
+
frame.Show(1)
|
|
403
|
+
app.MainLoop()
|