wxPython 4.3.2__cp315-cp315-win_arm64.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_arm64.pyd +0 -0
- wx/_aui.cp315-win_arm64.pyd +0 -0
- wx/_core.cp315-win_arm64.pyd +0 -0
- wx/_dataview.cp315-win_arm64.pyd +0 -0
- wx/_glcanvas.cp315-win_arm64.pyd +0 -0
- wx/_grid.cp315-win_arm64.pyd +0 -0
- wx/_html.cp315-win_arm64.pyd +0 -0
- wx/_html2.cp315-win_arm64.pyd +0 -0
- wx/_media.cp315-win_arm64.pyd +0 -0
- wx/_msw.cp315-win_arm64.pyd +0 -0
- wx/_propgrid.cp315-win_arm64.pyd +0 -0
- wx/_ribbon.cp315-win_arm64.pyd +0 -0
- wx/_richtext.cp315-win_arm64.pyd +0 -0
- wx/_stc.cp315-win_arm64.pyd +0 -0
- wx/_xml.cp315-win_arm64.pyd +0 -0
- wx/_xrc.cp315-win_arm64.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/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_arm64.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_arm64.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_arm64.dll +0 -0
- wx/wxbase334u_vc140_arm64.dll +0 -0
- wx/wxbase334u_xml_vc140_arm64.dll +0 -0
- wx/wxmsw334u_adv_vc140_arm64.dll +0 -0
- wx/wxmsw334u_aui_vc140_arm64.dll +0 -0
- wx/wxmsw334u_core_vc140_arm64.dll +0 -0
- wx/wxmsw334u_gl_vc140_arm64.dll +0 -0
- wx/wxmsw334u_html_vc140_arm64.dll +0 -0
- wx/wxmsw334u_media_vc140_arm64.dll +0 -0
- wx/wxmsw334u_propgrid_vc140_arm64.dll +0 -0
- wx/wxmsw334u_qa_vc140_arm64.dll +0 -0
- wx/wxmsw334u_ribbon_vc140_arm64.dll +0 -0
- wx/wxmsw334u_richtext_vc140_arm64.dll +0 -0
- wx/wxmsw334u_stc_vc140_arm64.dll +0 -0
- wx/wxmsw334u_webview_vc140_arm64.dll +0 -0
- wx/wxmsw334u_xrc_vc140_arm64.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 +471 -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,17 @@
|
|
|
1
|
+
#----------------------------------------------------------------------
|
|
2
|
+
# Name: wx.lib.mixins
|
|
3
|
+
# Purpose: A package for helpful wxPython mix-in classes
|
|
4
|
+
#
|
|
5
|
+
# Author: Robin Dunn
|
|
6
|
+
#
|
|
7
|
+
# Created: 15-May-2001
|
|
8
|
+
# Copyright: (c) 2001-2020 by Total Control Software
|
|
9
|
+
# Licence: wxWindows license
|
|
10
|
+
#----------------------------------------------------------------------
|
|
11
|
+
# 12/14/2003 - Jeff Grimmett (grimmtooth@softhome.net)
|
|
12
|
+
#
|
|
13
|
+
# o 2.5 compatibility update.
|
|
14
|
+
#
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
wx/lib/mixins/grid.py
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#----------------------------------------------------------------------------
|
|
2
|
+
# Name: wx.lib.mixins.grid
|
|
3
|
+
# Purpose: Helpful mix-in classes for wx.Grid
|
|
4
|
+
#
|
|
5
|
+
# Author: Robin Dunn
|
|
6
|
+
#
|
|
7
|
+
# Created: 5-June-2001
|
|
8
|
+
# Copyright: (c) 2001-2020 by Total Control Software
|
|
9
|
+
# Licence: wxWindows license
|
|
10
|
+
#----------------------------------------------------------------------------
|
|
11
|
+
# 12/14/2003 - Jeff Grimmett (grimmtooth@softhome.net)
|
|
12
|
+
#
|
|
13
|
+
# o 2.5 compatibility update.
|
|
14
|
+
# o Untested
|
|
15
|
+
#
|
|
16
|
+
# 12/21/2003 - Jeff Grimmett (grimmtooth@softhome.net)
|
|
17
|
+
#
|
|
18
|
+
# o wxGridAutoEditMixin -> GridAutoEditMixin
|
|
19
|
+
#
|
|
20
|
+
|
|
21
|
+
import wx
|
|
22
|
+
import wx.grid
|
|
23
|
+
|
|
24
|
+
#----------------------------------------------------------------------------
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class GridAutoEditMixin:
|
|
28
|
+
"""A mix-in class that automatically enables the grid edit control when
|
|
29
|
+
a cell is selected.
|
|
30
|
+
|
|
31
|
+
If your class hooks EVT_GRID_SELECT_CELL be sure to call event.Skip so
|
|
32
|
+
this handler will be called too.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
def __init__(self):
|
|
36
|
+
self.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.__OnSelectCell)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def __DoEnableEdit(self):
|
|
40
|
+
if self.CanEnableCellControl():
|
|
41
|
+
self.EnableCellEditControl()
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def __OnSelectCell(self, evt):
|
|
45
|
+
wx.CallAfter(self.__DoEnableEdit)
|
|
46
|
+
evt.Skip()
|
|
47
|
+
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
#----------------------------------------------------------------------
|
|
2
|
+
# Name: wx.lib.mixins.gridlabelrenderer
|
|
3
|
+
# Purpose: A Grid mixin that enables renderers to be plugged in
|
|
4
|
+
# for drawing the row and col labels, similar to how the
|
|
5
|
+
# cell renderers work.
|
|
6
|
+
#
|
|
7
|
+
# Author: Robin Dunn
|
|
8
|
+
#
|
|
9
|
+
# Created: 20-Mar-2009
|
|
10
|
+
# Copyright: (c) 2009-2020 by Total Control Software
|
|
11
|
+
# Licence: wxWindows license
|
|
12
|
+
#----------------------------------------------------------------------
|
|
13
|
+
|
|
14
|
+
"""
|
|
15
|
+
A Grid mixin that enables renderers to be plugged in for drawing the
|
|
16
|
+
row and col labels, similar to how the cell renderers work.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
import wx
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class GridWithLabelRenderersMixin(object):
|
|
23
|
+
"""
|
|
24
|
+
This class can be mixed with wx.grid.Grid to add the ability to plugin
|
|
25
|
+
label renderer objects for the row, column and corner labels, similar to
|
|
26
|
+
how the cell renderers work in the main Grid class.
|
|
27
|
+
"""
|
|
28
|
+
def __init__(self):
|
|
29
|
+
# Cache the label windows instead of relying on evt.GetEventObject() in the paint
|
|
30
|
+
# handlers below. Each handler is bound to exactly one of these windows, so the
|
|
31
|
+
# window is already known and there is no need to ask SIP to resolve the event's
|
|
32
|
+
# wxObject* back to a Python wrapper. That resolution is a lookup by C++ pointer
|
|
33
|
+
# address in SIP's object map, and the map can hand back a stale wrapper of the
|
|
34
|
+
# wrong Python type if some other, unrelated wxObject was deleted without SIP
|
|
35
|
+
# being told and a new C++ object happens to be allocated at the same freed
|
|
36
|
+
# address. Confirmed at least one concrete source of such stale wrappers: unlike
|
|
37
|
+
# wx.Frame, wx.MenuBar and wx.Menu, a wx.MenuItem's SIP wrapper is not marked
|
|
38
|
+
# deleted when the item is destroyed as part of its owning wxMenuBar's teardown
|
|
39
|
+
# (~wxMenuBase's wxClearList()) -- touching the stale wrapper afterwards
|
|
40
|
+
# dereferences freed memory and crashes the process outright. See
|
|
41
|
+
# https://discuss.wxpython.org/t/typeerror-when-using-gridwithlabelrenderersmixin/35137
|
|
42
|
+
self._rowLabelWindow = self.GetGridRowLabelWindow()
|
|
43
|
+
self._colLabelWindow = self.GetGridColLabelWindow()
|
|
44
|
+
self._cornerLabelWindow = self.GetGridCornerLabelWindow()
|
|
45
|
+
self._rowLabelWindow.Bind(wx.EVT_PAINT, self._onPaintRowLabels)
|
|
46
|
+
self._colLabelWindow.Bind(wx.EVT_PAINT, self._onPaintColLabels)
|
|
47
|
+
self._cornerLabelWindow.Bind(wx.EVT_PAINT, self._onPaintCornerLabel)
|
|
48
|
+
|
|
49
|
+
self._rowRenderers = dict()
|
|
50
|
+
self._colRenderers = dict()
|
|
51
|
+
self._cornderRenderer = None
|
|
52
|
+
self._defRowRenderer = None
|
|
53
|
+
self._defColRenderer = None
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def SetRowLabelRenderer(self, row, renderer):
|
|
57
|
+
"""
|
|
58
|
+
Register a renderer to be used for drawing the label for the
|
|
59
|
+
given row.
|
|
60
|
+
"""
|
|
61
|
+
if renderer is None:
|
|
62
|
+
if row in self._rowRenderers:
|
|
63
|
+
del self._rowRenderers[row]
|
|
64
|
+
else:
|
|
65
|
+
self._rowRenderers[row] = renderer
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def SetDefaultRowLabelRenderer(self, renderer):
|
|
69
|
+
"""
|
|
70
|
+
Set the row label renderer that should be used for any row
|
|
71
|
+
that does not have an explicitly set renderer. Defaults to
|
|
72
|
+
an instance of `GridDefaultRowLabelRenderer`.
|
|
73
|
+
"""
|
|
74
|
+
self._defRowRenderer = renderer
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def SetColLabelRenderer(self, col, renderer):
|
|
78
|
+
"""
|
|
79
|
+
Register a renderer to be used for drawing the label for the
|
|
80
|
+
given column.
|
|
81
|
+
"""
|
|
82
|
+
if renderer is None:
|
|
83
|
+
if col in self._colRenderers:
|
|
84
|
+
del self._colRenderers[col]
|
|
85
|
+
else:
|
|
86
|
+
self._colRenderers[col] = renderer
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def SetDefaultColLabelRenderer(self, renderer):
|
|
90
|
+
"""
|
|
91
|
+
Set the column label renderer that should be used for any
|
|
92
|
+
column that does not have an explicitly set renderer.
|
|
93
|
+
Defaults to an instance of `GridDefaultColLabelRenderer`.
|
|
94
|
+
"""
|
|
95
|
+
self._defColRenderer = renderer
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def SetCornerLabelRenderer(self, renderer):
|
|
100
|
+
"""
|
|
101
|
+
Sets the renderer that should be used for drawing the area in
|
|
102
|
+
the upper left corner of the Grid, between the row labels and
|
|
103
|
+
the column labels. Defaults to an instance of
|
|
104
|
+
`GridDefaultCornerLabelRenderer`
|
|
105
|
+
"""
|
|
106
|
+
self._cornderRenderer = renderer
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
#----------------------------------------------------------------
|
|
110
|
+
|
|
111
|
+
def _onPaintRowLabels(self, evt):
|
|
112
|
+
# Deliberately using the cached window instead of evt.GetEventObject(); see the
|
|
113
|
+
# comment in __init__.
|
|
114
|
+
window = self._rowLabelWindow
|
|
115
|
+
dc = wx.PaintDC(window)
|
|
116
|
+
gridWindow = self.GetGridWindow()
|
|
117
|
+
|
|
118
|
+
rows = self.CalcRowLabelsExposed(window.GetUpdateRegion(), gridWindow)
|
|
119
|
+
if rows == [-1]:
|
|
120
|
+
return
|
|
121
|
+
|
|
122
|
+
offset = self.GetGridWindowOffset(gridWindow)
|
|
123
|
+
x, y = self.CalcUnscrolledPosition(offset)
|
|
124
|
+
pt = dc.GetDeviceOrigin()
|
|
125
|
+
dc.SetDeviceOrigin(pt.x, pt.y-y)
|
|
126
|
+
for row in rows:
|
|
127
|
+
top, bottom = self._getRowTopBottom(row)
|
|
128
|
+
rect = wx.Rect()
|
|
129
|
+
rect.top = top
|
|
130
|
+
rect.bottom = bottom
|
|
131
|
+
rect.x = 0
|
|
132
|
+
rect.width = self.GetRowLabelSize()
|
|
133
|
+
|
|
134
|
+
renderer = self._rowRenderers.get(row, None) or \
|
|
135
|
+
self._defRowRenderer or GridDefaultRowLabelRenderer()
|
|
136
|
+
renderer.Draw(self, dc, rect, row)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def _onPaintColLabels(self, evt):
|
|
140
|
+
# Deliberately using the cached window instead of evt.GetEventObject(); see the
|
|
141
|
+
# comment in __init__.
|
|
142
|
+
window = self._colLabelWindow
|
|
143
|
+
dc = wx.PaintDC(window)
|
|
144
|
+
gridWindow = self.GetGridWindow()
|
|
145
|
+
|
|
146
|
+
cols = self.CalcColLabelsExposed(window.GetUpdateRegion(), gridWindow)
|
|
147
|
+
if cols == [-1]:
|
|
148
|
+
return
|
|
149
|
+
|
|
150
|
+
offset = self.GetGridWindowOffset(gridWindow)
|
|
151
|
+
x, y = self.CalcUnscrolledPosition(offset)
|
|
152
|
+
pt = dc.GetDeviceOrigin()
|
|
153
|
+
dc.SetDeviceOrigin(pt.x-x, pt.y)
|
|
154
|
+
for col in cols:
|
|
155
|
+
left, right = self._getColLeftRight(col)
|
|
156
|
+
rect = wx.Rect()
|
|
157
|
+
rect.left = left
|
|
158
|
+
rect.right = right
|
|
159
|
+
rect.y = 0
|
|
160
|
+
rect.height = self.GetColLabelSize()
|
|
161
|
+
|
|
162
|
+
renderer = self._colRenderers.get(col, None) or \
|
|
163
|
+
self._defColRenderer or GridDefaultColLabelRenderer()
|
|
164
|
+
renderer.Draw(self, dc, rect, col)
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
def _onPaintCornerLabel(self, evt):
|
|
168
|
+
# Deliberately using the cached window instead of evt.GetEventObject(); see the
|
|
169
|
+
# comment in __init__.
|
|
170
|
+
window = self._cornerLabelWindow
|
|
171
|
+
dc = wx.PaintDC(window)
|
|
172
|
+
w, h = window.GetSize()
|
|
173
|
+
rect = wx.Rect(0, 0, w, h)
|
|
174
|
+
|
|
175
|
+
renderer = self._cornderRenderer or GridDefaultCornerLabelRenderer()
|
|
176
|
+
renderer.Draw(self, dc, rect, -1)
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
# NOTE: These helpers or something like them should probably be publicly
|
|
181
|
+
# available in the C++ wxGrid class, but they are currently protected so
|
|
182
|
+
# for now we will have to calculate them ourselves.
|
|
183
|
+
def _getColLeftRight(self, col):
|
|
184
|
+
c = 0
|
|
185
|
+
left = -1
|
|
186
|
+
while c < col:
|
|
187
|
+
left += self.GetColSize(c)
|
|
188
|
+
c += 1
|
|
189
|
+
right = left + self.GetColSize(col)
|
|
190
|
+
return left, right
|
|
191
|
+
|
|
192
|
+
def _getRowTopBottom(self, row):
|
|
193
|
+
r = 0
|
|
194
|
+
top = -1
|
|
195
|
+
while r < row:
|
|
196
|
+
top += self.GetRowSize(r)
|
|
197
|
+
r += 1
|
|
198
|
+
bottom = top + self.GetRowSize(row)
|
|
199
|
+
return top, bottom
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
class GridLabelRenderer(object):
|
|
205
|
+
"""
|
|
206
|
+
Base class for row, col or corner label renderers.
|
|
207
|
+
"""
|
|
208
|
+
|
|
209
|
+
def Draw(self, grid, dc, rect, row_or_col):
|
|
210
|
+
"""
|
|
211
|
+
Override this method in derived classes to do the actual
|
|
212
|
+
drawing of the label.
|
|
213
|
+
"""
|
|
214
|
+
raise NotImplementedError
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
# These two can be used to duplicate the default wxGrid label drawing
|
|
218
|
+
def DrawBorder(self, grid, dc, rect):
|
|
219
|
+
"""
|
|
220
|
+
Draw a standard border around the label, to give a simple 3D
|
|
221
|
+
effect like the stock wx.grid.Grid labels do.
|
|
222
|
+
"""
|
|
223
|
+
top = rect.top
|
|
224
|
+
bottom = rect.bottom
|
|
225
|
+
left = rect.left
|
|
226
|
+
right = rect.right
|
|
227
|
+
dc.SetPen(wx.Pen(wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DSHADOW)))
|
|
228
|
+
dc.DrawLine(right, top, right, bottom)
|
|
229
|
+
dc.DrawLine(left, top, left, bottom)
|
|
230
|
+
dc.DrawLine(left, bottom, right, bottom)
|
|
231
|
+
dc.SetPen(wx.WHITE_PEN)
|
|
232
|
+
if top == 0:
|
|
233
|
+
dc.DrawLine(left + 1, top, left + 1, bottom)
|
|
234
|
+
dc.DrawLine(left + 1, top, right, top)
|
|
235
|
+
else:
|
|
236
|
+
dc.DrawLine(left + 1, top + 1, left + 1, bottom)
|
|
237
|
+
dc.DrawLine(left + 1, top + 1, right - 1, top + 1)
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
def DrawText(self, grid, dc, rect, text, hAlign, vAlign):
|
|
241
|
+
"""
|
|
242
|
+
Draw the label's text in the rectangle, using the alignment
|
|
243
|
+
flags, and the grid's specified label font and color.
|
|
244
|
+
"""
|
|
245
|
+
dc.SetBackgroundMode(wx.TRANSPARENT)
|
|
246
|
+
dc.SetTextForeground(grid.GetLabelTextColour())
|
|
247
|
+
dc.SetFont(grid.GetLabelFont())
|
|
248
|
+
rect = wx.Rect(*rect)
|
|
249
|
+
rect.Deflate(2,2)
|
|
250
|
+
grid.DrawTextRectangle(dc, text, rect, hAlign, vAlign)
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
# These classes draw approximately the same things that the built-in
|
|
255
|
+
# label windows do in C++, but are adapted to fit into this label
|
|
256
|
+
# renderer scheme.
|
|
257
|
+
|
|
258
|
+
class GridDefaultRowLabelRenderer(GridLabelRenderer):
|
|
259
|
+
def Draw(self, grid, dc, rect, row):
|
|
260
|
+
hAlign, vAlign = grid.GetRowLabelAlignment()
|
|
261
|
+
text = grid.GetRowLabelValue(row)
|
|
262
|
+
self.DrawBorder(grid, dc, rect)
|
|
263
|
+
self.DrawText(grid, dc, rect, text, hAlign, vAlign)
|
|
264
|
+
|
|
265
|
+
class GridDefaultColLabelRenderer(GridLabelRenderer):
|
|
266
|
+
def Draw(self, grid, dc, rect, col):
|
|
267
|
+
hAlign, vAlign = grid.GetColLabelAlignment()
|
|
268
|
+
text = grid.GetColLabelValue(col)
|
|
269
|
+
self.DrawBorder(grid, dc, rect)
|
|
270
|
+
self.DrawText(grid, dc, rect, text, hAlign, vAlign)
|
|
271
|
+
|
|
272
|
+
class GridDefaultCornerLabelRenderer(GridLabelRenderer):
|
|
273
|
+
def Draw(self, grid, dc, rect, row_or_col):
|
|
274
|
+
self.DrawBorder(grid, dc, rect)
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
#---------------------------------------------------------------------------
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
#----------------------------------------------------------------------------
|
|
2
|
+
# Name: wx.lib.mixins.imagelist
|
|
3
|
+
# Purpose: Helpful mix-in classes for using a wxImageList
|
|
4
|
+
#
|
|
5
|
+
# Author: Robin Dunn
|
|
6
|
+
#
|
|
7
|
+
# Created: 15-May-2001
|
|
8
|
+
# Copyright: (c) 2001-2020 by Total Control Software
|
|
9
|
+
# Licence: wxWindows license
|
|
10
|
+
#----------------------------------------------------------------------------
|
|
11
|
+
# 12/14/2003 - Jeff Grimmett (grimmtooth@softhome.net)
|
|
12
|
+
#
|
|
13
|
+
# o 2.5 compatibility update.
|
|
14
|
+
# o Untested.
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
import wx
|
|
18
|
+
|
|
19
|
+
#----------------------------------------------------------------------------
|
|
20
|
+
|
|
21
|
+
class MagicImageList:
|
|
22
|
+
'''
|
|
23
|
+
Mix-in to provide "magic" growing image lists
|
|
24
|
+
By Mike Fletcher
|
|
25
|
+
'''
|
|
26
|
+
|
|
27
|
+
### LAZYTREE and LISTCONTROL Methods
|
|
28
|
+
DEFAULTICONSIZE = 16
|
|
29
|
+
|
|
30
|
+
def SetupIcons(self, images=(), size=None):
|
|
31
|
+
self.__size = size or self.DEFAULTICONSIZE
|
|
32
|
+
self.__magicImageList = wx.ImageList (self.__size,self.__size)
|
|
33
|
+
self.__magicImageListMapping = {}
|
|
34
|
+
self.SetImageList (
|
|
35
|
+
self.__magicImageList, {
|
|
36
|
+
16:wx.IMAGE_LIST_SMALL,
|
|
37
|
+
32:wx.IMAGE_LIST_NORMAL,
|
|
38
|
+
}[self.__size]
|
|
39
|
+
)
|
|
40
|
+
for image in images:
|
|
41
|
+
self.AddIcon (image)
|
|
42
|
+
|
|
43
|
+
def GetIcons (self, node):
|
|
44
|
+
'''Get icon indexes for a given node, or None if no associated icon'''
|
|
45
|
+
icon = self.GetIcon( node )
|
|
46
|
+
if icon:
|
|
47
|
+
index = self.AddIcon (icon)
|
|
48
|
+
return index, index
|
|
49
|
+
return None
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
### Local methods...
|
|
53
|
+
def AddIcon(self, icon, mask = wx.NullBitmap):
|
|
54
|
+
'''Add an icon to the image list, or get the index if already there'''
|
|
55
|
+
index = self.__magicImageListMapping.get (id (icon))
|
|
56
|
+
if index is None:
|
|
57
|
+
if isinstance( icon, wxIconPtr ):
|
|
58
|
+
index = self.__magicImageList.AddIcon( icon )
|
|
59
|
+
elif isinstance( icon, wx.BitmapPtr ):
|
|
60
|
+
if isinstance( mask, wx.Colour ):
|
|
61
|
+
index = self.__magicImageList.AddWithColourMask( icon, mask )
|
|
62
|
+
else:
|
|
63
|
+
index = self.__magicImageList.Add( icon, mask )
|
|
64
|
+
else:
|
|
65
|
+
raise ValueError("Unexpected icon object %s, "
|
|
66
|
+
"expected wx.Icon or wx.Bitmap" % (icon))
|
|
67
|
+
self.__magicImageListMapping [id (icon)] = index
|
|
68
|
+
return index
|
|
69
|
+
|
|
70
|
+
### Customisation point...
|
|
71
|
+
def GetIcon( self, node ):
|
|
72
|
+
'''Get the actual icon object for a node'''
|
|
73
|
+
if hasattr (node,"DIAGRAMICON"):
|
|
74
|
+
return node.DIAGRAMICON
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
#----------------------------------------------------------------------------
|
|
2
|
+
# Name: wx.lib.mixins.inspection
|
|
3
|
+
# Purpose: A mix-in class that can add PyCrust-based inspection of the
|
|
4
|
+
# app's widgets and sizers.
|
|
5
|
+
#
|
|
6
|
+
# Author: Robin Dunn
|
|
7
|
+
#
|
|
8
|
+
# Created: 21-Nov-2006
|
|
9
|
+
# Copyright: (c) 2006-2020 by Total Control Software
|
|
10
|
+
# Licence: wxWindows license
|
|
11
|
+
#
|
|
12
|
+
# Tags: phoenix-port, documented, unittest
|
|
13
|
+
#----------------------------------------------------------------------------
|
|
14
|
+
#
|
|
15
|
+
# NOTE: This class was originally based on ideas sent to the
|
|
16
|
+
# wxPython-users mail list by Dan Eloff.
|
|
17
|
+
"""
|
|
18
|
+
This module provides the :class:`~lib.mixins.inspection.InspectableApp` and
|
|
19
|
+
:class:`~lib.mixins.inspection.InspectionMixin` which make it easy to use the Widget
|
|
20
|
+
Inspection Tool (WIT).
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
Description
|
|
24
|
+
===========
|
|
25
|
+
|
|
26
|
+
The Widget Inspection Tool (WIT) is very useful debugging tool provided with
|
|
27
|
+
wxPython, especially useful to debug layout issues when using :class:`wx.Sizer`.
|
|
28
|
+
|
|
29
|
+
The :class:`InspectableApp` is a "pre-mixed" :class:`App` and the
|
|
30
|
+
:class:`InspectionMixin` allows you to mix it with your custom :class:`App`
|
|
31
|
+
class.
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
Usage
|
|
35
|
+
=====
|
|
36
|
+
|
|
37
|
+
The following samples assume the default key sequence :kbd:`Ctrl-Alt-i` to start
|
|
38
|
+
the WIT, additional information can be found on the following wiki page.
|
|
39
|
+
|
|
40
|
+
`How to use the Widget Inspection Tool <https://wiki.wxpython.org/How%20to%20use%20Widget%20Inspection%20Tool%20-%20WIT%20%28Phoenix%29>`_
|
|
41
|
+
|
|
42
|
+
InspectableApp usage::
|
|
43
|
+
|
|
44
|
+
import wx
|
|
45
|
+
import wx.lib.sized_controls as sc
|
|
46
|
+
import wx.lib.mixins.inspection as wit
|
|
47
|
+
|
|
48
|
+
app = wit.InspectableApp()
|
|
49
|
+
|
|
50
|
+
frame = sc.SizedFrame(None, -1, "WIT InspectableApp")
|
|
51
|
+
|
|
52
|
+
pane = frame.GetContentsPane()
|
|
53
|
+
pane.SetSizerType("horizontal")
|
|
54
|
+
|
|
55
|
+
b1 = wx.Button(pane, wx.ID_ANY)
|
|
56
|
+
t1 = wx.TextCtrl(pane, -1)
|
|
57
|
+
t1.SetSizerProps(expand=True)
|
|
58
|
+
|
|
59
|
+
frame.Show()
|
|
60
|
+
|
|
61
|
+
app.MainLoop()
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
InspectionMixin usage::
|
|
65
|
+
|
|
66
|
+
import wx
|
|
67
|
+
import wx.lib.sized_controls as sc
|
|
68
|
+
import wx.lib.mixins.inspection as wit
|
|
69
|
+
|
|
70
|
+
class MyApp(wx.App, wit.InspectionMixin):
|
|
71
|
+
def OnInit(self):
|
|
72
|
+
self.Init() # initialize the inspection tool
|
|
73
|
+
return True
|
|
74
|
+
|
|
75
|
+
app = MyApp()
|
|
76
|
+
|
|
77
|
+
frame = sc.SizedFrame(None, -1, "WIT InspectionMixin")
|
|
78
|
+
|
|
79
|
+
pane = frame.GetContentsPane()
|
|
80
|
+
pane.SetSizerType("horizontal")
|
|
81
|
+
|
|
82
|
+
b1 = wx.Button(pane, wx.ID_ANY)
|
|
83
|
+
t1 = wx.TextCtrl(pane, -1)
|
|
84
|
+
t1.SetSizerProps(expand=True)
|
|
85
|
+
|
|
86
|
+
frame.Show()
|
|
87
|
+
|
|
88
|
+
app.MainLoop()
|
|
89
|
+
|
|
90
|
+
"""
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
import wx
|
|
94
|
+
from wx.lib.inspection import InspectionTool
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
#----------------------------------------------------------------------------
|
|
98
|
+
|
|
99
|
+
class InspectionMixin(object):
|
|
100
|
+
"""
|
|
101
|
+
This class is intended to be used as a mix-in with the :class:`App`.
|
|
102
|
+
When used it will add the ability to popup a
|
|
103
|
+
:class:`~lib.inspection.InspectionFrame` window
|
|
104
|
+
where the widget under the mouse cursor will be selected in the tree and
|
|
105
|
+
loaded into the shell's namespace as 'obj'. The default key sequence to
|
|
106
|
+
activate the inspector is Ctrl-Alt-I (or Cmd-Alt-I on Mac) but this can be
|
|
107
|
+
changed via parameters to the `Init` method, or the application can call
|
|
108
|
+
:meth:`~lib.mixins.inspection.InspectionMixin.ShowInspectionTool` from other
|
|
109
|
+
event handlers if desired.
|
|
110
|
+
|
|
111
|
+
To use this class simply derive a class from :class:`App` and
|
|
112
|
+
:class:`InspectionMixin` and then call the
|
|
113
|
+
:meth:`InspectionMixin.Init` method from the app's
|
|
114
|
+
:meth:`AppConsole.OnInit` method.
|
|
115
|
+
"""
|
|
116
|
+
def InitInspection(self, pos=wx.DefaultPosition, size=wx.Size(850,700),
|
|
117
|
+
config=None, locals=None,
|
|
118
|
+
alt=True, cmd=True, shift=False, keyCode=ord('I')):
|
|
119
|
+
"""
|
|
120
|
+
Make the event binding that will activate the InspectionFrame window.
|
|
121
|
+
|
|
122
|
+
:param `pos`: the control position. A value of (-1, -1) indicates a default position,
|
|
123
|
+
chosen by either the windowing system or wxPython, depending on platform;
|
|
124
|
+
:param `size`: the control size. A value of (-1, -1) indicates a default size,
|
|
125
|
+
chosen by either the windowing system or wxPython, depending on platform;
|
|
126
|
+
:param `config`: A :class:`Config` object to be used to store layout
|
|
127
|
+
and other info to when the inspection frame is closed.
|
|
128
|
+
This info will be restored the next time the inspection
|
|
129
|
+
frame is used.
|
|
130
|
+
:param `locals`: A dictionary of names to be added to the PyCrust
|
|
131
|
+
namespace.
|
|
132
|
+
:param boolean `alt`: use alt in the short cut sequence
|
|
133
|
+
:param boolean `cmd`: use ctrl/cmd in the short cut sequence
|
|
134
|
+
:param boolean `shift`: use shift in the short cut sequence
|
|
135
|
+
:param string `keyCode`: the key code for the short cut sequence
|
|
136
|
+
|
|
137
|
+
"""
|
|
138
|
+
self.Bind(wx.EVT_KEY_DOWN, self._OnKeyPress)
|
|
139
|
+
self._alt = alt
|
|
140
|
+
self._cmd = cmd
|
|
141
|
+
self._shift = shift
|
|
142
|
+
self._keyCode = keyCode
|
|
143
|
+
InspectionTool().Init(pos, size, config, locals, self)
|
|
144
|
+
|
|
145
|
+
def _OnKeyPress(self, evt):
|
|
146
|
+
"""
|
|
147
|
+
Event handler, check for our hot-key. Normally it is
|
|
148
|
+
Ctrl-Alt-I but that can be changed by what is passed to the
|
|
149
|
+
Init method.
|
|
150
|
+
"""
|
|
151
|
+
if evt.AltDown() == self._alt and \
|
|
152
|
+
evt.CmdDown() == self._cmd and \
|
|
153
|
+
evt.ShiftDown() == self._shift and \
|
|
154
|
+
evt.GetKeyCode() == self._keyCode:
|
|
155
|
+
self.ShowInspectionTool()
|
|
156
|
+
else:
|
|
157
|
+
evt.Skip()
|
|
158
|
+
|
|
159
|
+
Init = InitInspection # compatibility alias
|
|
160
|
+
|
|
161
|
+
def ShowInspectionTool(self):
|
|
162
|
+
"""
|
|
163
|
+
Show the Inspection tool, creating it if necessary, setting it
|
|
164
|
+
to display the widget under the cursor.
|
|
165
|
+
"""
|
|
166
|
+
# get the current widget under the mouse
|
|
167
|
+
wnd, pt = wx.FindWindowAtPointer()
|
|
168
|
+
InspectionTool().Show(wnd)
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
#---------------------------------------------------------------------------
|
|
172
|
+
|
|
173
|
+
class InspectableApp(wx.App, InspectionMixin):
|
|
174
|
+
"""
|
|
175
|
+
A simple mix of :class:`App` and :class:`InspectionMixin` that can be used
|
|
176
|
+
stand-alone.
|
|
177
|
+
"""
|
|
178
|
+
|
|
179
|
+
def OnInit(self):
|
|
180
|
+
self.InitInspection()
|
|
181
|
+
return True
|
|
182
|
+
|
|
183
|
+
#---------------------------------------------------------------------------
|
|
184
|
+
|