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
wx/lib/ticker.py
ADDED
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
#----------------------------------------------------------------------
|
|
2
|
+
# Name: wx.lib.ticker
|
|
3
|
+
# Purpose: A news-ticker style scrolling text control
|
|
4
|
+
#
|
|
5
|
+
# Author: Chris Mellon
|
|
6
|
+
#
|
|
7
|
+
# Created: 29-Aug-2004
|
|
8
|
+
# Copyright: (c) 2004 by Chris Mellon
|
|
9
|
+
# Licence: wxWindows license
|
|
10
|
+
# Tags: phoenix-port, unittest, documented, py3-port
|
|
11
|
+
#----------------------------------------------------------------------
|
|
12
|
+
|
|
13
|
+
"""
|
|
14
|
+
News-ticker style scrolling text control
|
|
15
|
+
|
|
16
|
+
* Can scroll from right to left or left to right.
|
|
17
|
+
|
|
18
|
+
* Speed of the ticking is controlled by two parameters:
|
|
19
|
+
|
|
20
|
+
- Frames per Second(FPS): How many times per second the ticker updates
|
|
21
|
+
|
|
22
|
+
- Pixels per Frame(PPF): How many pixels the text moves each update
|
|
23
|
+
|
|
24
|
+
Low FPS with high PPF will result in "jumpy" text, lower PPF with higher FPS
|
|
25
|
+
is smoother (but blurrier and more CPU intensive) text.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
import wx
|
|
29
|
+
|
|
30
|
+
#----------------------------------------------------------------------
|
|
31
|
+
|
|
32
|
+
class Ticker(wx.Control):
|
|
33
|
+
def __init__(self,
|
|
34
|
+
parent,
|
|
35
|
+
id=-1,
|
|
36
|
+
text=wx.EmptyString,
|
|
37
|
+
fgcolor = wx.BLACK,
|
|
38
|
+
bgcolor = wx.WHITE,
|
|
39
|
+
start=True,
|
|
40
|
+
ppf=2,
|
|
41
|
+
fps=20,
|
|
42
|
+
direction="rtl",
|
|
43
|
+
pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.NO_BORDER,
|
|
44
|
+
name="Ticker"
|
|
45
|
+
):
|
|
46
|
+
"""
|
|
47
|
+
Default class constructor.
|
|
48
|
+
|
|
49
|
+
:param wx.Window `parent`: the parent
|
|
50
|
+
:param integer `id`: an identifier for the control: a value of -1 is taken to mean a default
|
|
51
|
+
:param string `text`: text in the ticker
|
|
52
|
+
:param wx.Colour `fgcolor`: text/foreground color
|
|
53
|
+
:param wx.Colour `bgcolor`: background color
|
|
54
|
+
:param boolean `start`: if True, the ticker starts immediately
|
|
55
|
+
:param int `ppf`: pixels per frame
|
|
56
|
+
:param int `fps`: frames per second
|
|
57
|
+
:param `direction`: direction of ticking, 'rtl' or 'ltr'
|
|
58
|
+
:param wx.Point `pos`: the control position. A value of (-1, -1) indicates a default position,
|
|
59
|
+
chosen by either the windowing system or wxPython, depending on platform
|
|
60
|
+
:param `name`: the control name
|
|
61
|
+
|
|
62
|
+
"""
|
|
63
|
+
wx.Control.__init__(self, parent, id=id, pos=pos, size=size, style=style, name=name)
|
|
64
|
+
self.timer = wx.Timer(owner=self)
|
|
65
|
+
self._extent = (-1, -1) #cache value for the GetTextExtent call
|
|
66
|
+
self._offset = 0
|
|
67
|
+
self._fps = fps #frames per second
|
|
68
|
+
self._ppf = ppf #pixels per frame
|
|
69
|
+
self.SetDirection(direction)
|
|
70
|
+
self.SetText(text)
|
|
71
|
+
self.SetInitialSize(size)
|
|
72
|
+
self.SetForegroundColour(fgcolor)
|
|
73
|
+
self.SetBackgroundColour(bgcolor)
|
|
74
|
+
self.Bind(wx.EVT_TIMER, self.OnTick)
|
|
75
|
+
self.Bind(wx.EVT_PAINT, self.OnPaint)
|
|
76
|
+
self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnErase)
|
|
77
|
+
self.Bind(wx.EVT_WINDOW_DESTROY, self.OnDestroyWindow)
|
|
78
|
+
if start:
|
|
79
|
+
self.Start()
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def OnDestroyWindow(self, evt):
|
|
83
|
+
"""
|
|
84
|
+
Handles the ``wx.EVT_WINDOW_DESTROY`` event for :class:`Ticker`.
|
|
85
|
+
|
|
86
|
+
:param `evt`: a :class:`wx.WindowDestroyEvent` event to be processed.
|
|
87
|
+
|
|
88
|
+
"""
|
|
89
|
+
self.Stop()
|
|
90
|
+
evt.Skip()
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def Stop(self):
|
|
94
|
+
"""Stop moving the text"""
|
|
95
|
+
self.timer.Stop()
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def Start(self):
|
|
99
|
+
"""Starts the text moving"""
|
|
100
|
+
if not self.timer.IsRunning():
|
|
101
|
+
self.timer.Start(1000 // self._fps)
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def IsTicking(self):
|
|
105
|
+
"""Is the ticker ticking? ie, is the text moving?"""
|
|
106
|
+
return self.timer.IsRunning()
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def SetFPS(self, fps):
|
|
110
|
+
"""
|
|
111
|
+
Adjust the update speed of the ticker.
|
|
112
|
+
|
|
113
|
+
:param int `fps`: frames per second.
|
|
114
|
+
|
|
115
|
+
"""
|
|
116
|
+
self._fps = fps
|
|
117
|
+
self.Stop()
|
|
118
|
+
self.Start()
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def GetFPS(self):
|
|
122
|
+
"""
|
|
123
|
+
Get the frames per second speed of the ticker.
|
|
124
|
+
"""
|
|
125
|
+
return self._fps
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def SetPPF(self, ppf):
|
|
129
|
+
"""
|
|
130
|
+
Set the number of pixels per frame the ticker moves - ie,
|
|
131
|
+
how "jumpy" it is.
|
|
132
|
+
|
|
133
|
+
:param int `ppf`: the pixels per frame setting.
|
|
134
|
+
|
|
135
|
+
"""
|
|
136
|
+
self._ppf = ppf
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def GetPPF(self):
|
|
140
|
+
"""Get pixels per frame setting."""
|
|
141
|
+
return self._ppf
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def SetFont(self, font):
|
|
145
|
+
"""
|
|
146
|
+
Set the font for the control.
|
|
147
|
+
|
|
148
|
+
:param wx.Font `font`: the font to be used.
|
|
149
|
+
|
|
150
|
+
"""
|
|
151
|
+
self._extent = (-1, -1)
|
|
152
|
+
wx.Control.SetFont(self, font)
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def SetDirection(self, dir):
|
|
156
|
+
"""
|
|
157
|
+
Sets the direction of the ticker: right to left (rtl) or
|
|
158
|
+
left to right (ltr).
|
|
159
|
+
|
|
160
|
+
:param `dir`: the direction 'rtl' or 'ltr'
|
|
161
|
+
|
|
162
|
+
"""
|
|
163
|
+
if dir == "ltr" or dir == "rtl":
|
|
164
|
+
if self._offset != 0:
|
|
165
|
+
#Change the offset so it's correct for the new direction
|
|
166
|
+
self._offset = self._extent[0] + self.GetSize()[0] - self._offset
|
|
167
|
+
self._dir = dir
|
|
168
|
+
else:
|
|
169
|
+
raise TypeError
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
def GetDirection(self):
|
|
173
|
+
"""Get the set direction."""
|
|
174
|
+
return self._dir
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
def SetText(self, text):
|
|
178
|
+
"""
|
|
179
|
+
Set the ticker text.
|
|
180
|
+
|
|
181
|
+
:param string `text`: the ticker text
|
|
182
|
+
|
|
183
|
+
"""
|
|
184
|
+
self._text = text
|
|
185
|
+
self._extent = (-1, -1)
|
|
186
|
+
if not self._text:
|
|
187
|
+
self.Refresh() #Refresh here to clear away the old text.
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
def GetText(self):
|
|
191
|
+
"""Get the current ticker text."""
|
|
192
|
+
return self._text
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
def UpdateExtent(self, dc):
|
|
196
|
+
"""
|
|
197
|
+
Updates the cached text extent if needed.
|
|
198
|
+
|
|
199
|
+
:param wx.DC `dc`: the dc to use.
|
|
200
|
+
|
|
201
|
+
"""
|
|
202
|
+
if not self._text:
|
|
203
|
+
self._extent = (-1, -1)
|
|
204
|
+
return
|
|
205
|
+
if self._extent == (-1, -1):
|
|
206
|
+
self._extent = dc.GetTextExtent(self.GetText())
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
def DrawText(self, dc):
|
|
210
|
+
"""
|
|
211
|
+
Draws the ticker text at the current offset using the provided DC.
|
|
212
|
+
|
|
213
|
+
:param wx.DC `dc`: the dc to use.
|
|
214
|
+
|
|
215
|
+
"""
|
|
216
|
+
dc.SetTextForeground(self.GetForegroundColour())
|
|
217
|
+
dc.SetFont(self.GetFont())
|
|
218
|
+
self.UpdateExtent(dc)
|
|
219
|
+
if self._dir == "ltr":
|
|
220
|
+
offx = self._offset - self._extent[0]
|
|
221
|
+
else:
|
|
222
|
+
offx = self.GetSize()[0] - self._offset
|
|
223
|
+
offy = (self.GetSize()[1] - self._extent[1]) // 2 #centered vertically
|
|
224
|
+
dc.DrawText(self._text, offx, offy)
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
def OnTick(self, evt):
|
|
228
|
+
"""
|
|
229
|
+
Handles the ``wx.EVT_TIMER`` event for :class:`Ticker`.
|
|
230
|
+
|
|
231
|
+
:param `evt`: a :class:`TimerEvent` event to be processed.
|
|
232
|
+
|
|
233
|
+
"""
|
|
234
|
+
self._offset += self._ppf
|
|
235
|
+
w1 = self.GetSize()[0]
|
|
236
|
+
w2 = self._extent[0]
|
|
237
|
+
if self._offset >= w1+w2:
|
|
238
|
+
self._offset = 0
|
|
239
|
+
self.Refresh()
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
def OnPaint(self, evt):
|
|
243
|
+
"""
|
|
244
|
+
Handles the ``wx.EVT_PAINT`` event for :class:`Ticker`.
|
|
245
|
+
|
|
246
|
+
:param `evt`: a :class:`PaintEvent` event to be processed.
|
|
247
|
+
|
|
248
|
+
"""
|
|
249
|
+
dc = wx.BufferedPaintDC(self)
|
|
250
|
+
brush = wx.Brush(self.GetBackgroundColour())
|
|
251
|
+
dc.SetBackground(brush)
|
|
252
|
+
dc.Clear()
|
|
253
|
+
self.DrawText(dc)
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
def OnErase(self, evt):
|
|
257
|
+
"""
|
|
258
|
+
Noop because of double buffering
|
|
259
|
+
|
|
260
|
+
Handles the ``wx.EVT_ERASE_BACKGROUND`` event for :class:`Ticker`.
|
|
261
|
+
|
|
262
|
+
:param `evt`: a :class:`EraseEvent` event to be processed.
|
|
263
|
+
|
|
264
|
+
"""
|
|
265
|
+
pass
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
def AcceptsFocus(self):
|
|
269
|
+
"""Non-interactive, so don't accept focus"""
|
|
270
|
+
return False
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
def DoGetBestSize(self):
|
|
274
|
+
"""
|
|
275
|
+
Width we don't care about, height is either -1, or the character
|
|
276
|
+
height of our text with a little extra padding
|
|
277
|
+
"""
|
|
278
|
+
if self._extent == (-1, -1):
|
|
279
|
+
if not self._text:
|
|
280
|
+
h = self.GetCharHeight()
|
|
281
|
+
else:
|
|
282
|
+
h = self.GetTextExtent(self.GetText())[1]
|
|
283
|
+
else:
|
|
284
|
+
h = self._extent[1]
|
|
285
|
+
return (100, h+5)
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
def ShouldInheritColours(self):
|
|
289
|
+
"""Don't get colours from our parent."""
|
|
290
|
+
return False
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
#testcase/demo
|
|
295
|
+
if __name__ == '__main__':
|
|
296
|
+
app = wx.App()
|
|
297
|
+
f = wx.Frame(None)
|
|
298
|
+
p = wx.Panel(f)
|
|
299
|
+
t = Ticker(p, text="Some sample ticker text")
|
|
300
|
+
#set ticker properties here if you want
|
|
301
|
+
s = wx.BoxSizer(wx.VERTICAL)
|
|
302
|
+
s.Add(t, flag=wx.GROW, proportion=0)
|
|
303
|
+
p.SetSizer(s)
|
|
304
|
+
f.Show()
|
|
305
|
+
app.MainLoop()
|
|
306
|
+
|
wx/lib/ticker_xrc.py
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#----------------------------------------------------------------------
|
|
2
|
+
# Name: wx.lib.ticker_xrc
|
|
3
|
+
# Purpose: A XRC handler for wx.lib.ticker
|
|
4
|
+
#
|
|
5
|
+
# Author: Chris Mellon
|
|
6
|
+
#
|
|
7
|
+
# Created: 17-May-2005
|
|
8
|
+
# Copyright: (c) 2005 by Chris Mellon
|
|
9
|
+
# Licence: wxWindows license
|
|
10
|
+
#----------------------------------------------------------------------
|
|
11
|
+
|
|
12
|
+
import wx
|
|
13
|
+
import wx.xrc as xrc
|
|
14
|
+
from wx.lib.ticker import Ticker
|
|
15
|
+
|
|
16
|
+
class wxTickerXmlHandler(xrc.XmlResourceHandler):
|
|
17
|
+
def __init__(self):
|
|
18
|
+
xrc.XmlResourceHandler.__init__(self)
|
|
19
|
+
self.AddWindowStyles()
|
|
20
|
+
|
|
21
|
+
def CanHandle(self, node):
|
|
22
|
+
return self.IsOfClass(node, "wxTicker")
|
|
23
|
+
|
|
24
|
+
def DoCreateResource(self):
|
|
25
|
+
t = Ticker(
|
|
26
|
+
self.GetParentAsWindow(),
|
|
27
|
+
self.GetID(),
|
|
28
|
+
pos = self.GetPosition(),
|
|
29
|
+
size = self.GetSize(),
|
|
30
|
+
style=self.GetStyle()
|
|
31
|
+
)
|
|
32
|
+
if self.HasParam("text"):
|
|
33
|
+
t.SetText(self.GetText("text"))
|
|
34
|
+
if self.HasParam("start"):
|
|
35
|
+
if self.GetBool("start"):
|
|
36
|
+
t.Start()
|
|
37
|
+
else:
|
|
38
|
+
t.Stop()
|
|
39
|
+
if self.HasParam("ppf"):
|
|
40
|
+
t.SetPPF(self.GetLong("ppf"))
|
|
41
|
+
if self.HasParam("fps"):
|
|
42
|
+
t.SetFPS(self.GetLong("fps"))
|
|
43
|
+
if self.HasParam("direction"):
|
|
44
|
+
t.SetDirection(self.GetText("direction"))
|
|
45
|
+
|
|
46
|
+
self.SetupWindow(t) # handles font, bg/fg color
|
|
47
|
+
return t
|
|
48
|
+
|
wx/lib/utils.py
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
#----------------------------------------------------------------------
|
|
2
|
+
# Name: wx.lib.utils
|
|
3
|
+
# Purpose: Miscellaneous utility functions
|
|
4
|
+
#
|
|
5
|
+
# Author: Robin Dunn
|
|
6
|
+
#
|
|
7
|
+
# Created: 18-Jan-2009
|
|
8
|
+
# Copyright: (c) 2009-2020 Total Control Software
|
|
9
|
+
# Licence: wxWidgets license
|
|
10
|
+
#
|
|
11
|
+
# Tags: phoenix-port, unittest, documented
|
|
12
|
+
#
|
|
13
|
+
#----------------------------------------------------------------------
|
|
14
|
+
|
|
15
|
+
"""
|
|
16
|
+
A few useful functions. (Ok, only one so far...)
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
import wx
|
|
20
|
+
|
|
21
|
+
#---------------------------------------------------------------------------
|
|
22
|
+
|
|
23
|
+
def AdjustRectToScreen(rect, adjust=(0,0)):
|
|
24
|
+
"""
|
|
25
|
+
Compare the rect with the dimensions of the display that the rect's
|
|
26
|
+
upper left corner is positioned on. If it doesn't fit entirely on
|
|
27
|
+
screen then attempt to make it do so either by repositioning the
|
|
28
|
+
rectangle, resizing it, or both. Returns the adjusted rectangle.
|
|
29
|
+
|
|
30
|
+
If the adjustment value is given then it will be used to ensure that
|
|
31
|
+
the rectangle is at least that much smaller than the display's client
|
|
32
|
+
area.
|
|
33
|
+
|
|
34
|
+
:param wx.Rect `rect`: the rectangle to be repositioned;
|
|
35
|
+
:param tuple `adjust`: if given, it will be used to ensure that
|
|
36
|
+
the rectangle is at least that much smaller than the display's client
|
|
37
|
+
area.
|
|
38
|
+
|
|
39
|
+
:rtype: `rect`
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
assert isinstance(rect, wx.Rect)
|
|
43
|
+
if -1 in rect.Get():
|
|
44
|
+
# bail out if there are any -1's in the dimensions
|
|
45
|
+
return rect
|
|
46
|
+
|
|
47
|
+
dispidx = wx.Display.GetFromPoint(rect.Position)
|
|
48
|
+
if dispidx == wx.NOT_FOUND:
|
|
49
|
+
dispidx = 0
|
|
50
|
+
ca = wx.Display(dispidx).GetClientArea()
|
|
51
|
+
assert isinstance(ca, wx.Rect)
|
|
52
|
+
|
|
53
|
+
# is it already fully visible?
|
|
54
|
+
if ca.Contains(rect):
|
|
55
|
+
return rect
|
|
56
|
+
|
|
57
|
+
# if not then try adjusting the position
|
|
58
|
+
if not ca.Contains(rect.Position):
|
|
59
|
+
rect.Position = ca.Position
|
|
60
|
+
if ca.Contains(rect):
|
|
61
|
+
return rect
|
|
62
|
+
dx = dy = 0
|
|
63
|
+
if rect.right > ca.right:
|
|
64
|
+
dx = ca.right - rect.right
|
|
65
|
+
if rect.bottom > ca.bottom:
|
|
66
|
+
dy = ca.bottom - rect.bottom
|
|
67
|
+
rect.Offset(dx, dy)
|
|
68
|
+
|
|
69
|
+
# if the rectangle has been moved too far, then readjust the position
|
|
70
|
+
# and also adjust the size
|
|
71
|
+
if rect.left < ca.left:
|
|
72
|
+
rect.width -= (ca.left - rect.left)
|
|
73
|
+
rect.left = ca.left
|
|
74
|
+
if rect.top < ca.top:
|
|
75
|
+
rect.height -= (ca.top - rect.top)
|
|
76
|
+
rect.top = ca.top
|
|
77
|
+
|
|
78
|
+
# make final adjustments if needed
|
|
79
|
+
adjust = wx.Size(*adjust)
|
|
80
|
+
if rect.width > (ca.width - adjust.width):
|
|
81
|
+
rect.width = ca.width - adjust.width
|
|
82
|
+
if rect.height > (ca.height - adjust.height):
|
|
83
|
+
rect.height = ca.height - adjust.height
|
|
84
|
+
|
|
85
|
+
# return the result
|
|
86
|
+
return rect
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
#---------------------------------------------------------------------------
|
wx/lib/wordwrap.py
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
#----------------------------------------------------------------------
|
|
2
|
+
# Name: wx.lib.wordwrap
|
|
3
|
+
# Purpose: Contains a function to aid in word-wrapping some text
|
|
4
|
+
#
|
|
5
|
+
# Author: Robin Dunn
|
|
6
|
+
#
|
|
7
|
+
# Created: 15-Oct-2006
|
|
8
|
+
# Copyright: (c) 2006-2020 by Total Control Software
|
|
9
|
+
# Licence: wxWindows license
|
|
10
|
+
# Tags: phoenix-port
|
|
11
|
+
#----------------------------------------------------------------------
|
|
12
|
+
|
|
13
|
+
def wordwrap(text, width, dc, breakLongWords=True, margin=0):
|
|
14
|
+
"""
|
|
15
|
+
Returns a copy of text with newline characters inserted where long
|
|
16
|
+
lines should be broken such that they will fit within the given
|
|
17
|
+
width, with the given margin left and right, on the given `wx.DC`
|
|
18
|
+
using its current font settings. By default words that are wider
|
|
19
|
+
than the margin-adjusted width will be broken at the nearest
|
|
20
|
+
character boundary, but this can be disabled by passing ``False``
|
|
21
|
+
for the ``breakLongWords`` parameter.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
wrapped_lines = []
|
|
25
|
+
text = text.split('\n')
|
|
26
|
+
for line in text:
|
|
27
|
+
pte = dc.GetPartialTextExtents(line)
|
|
28
|
+
wid = ( width - (2*margin+1)*dc.GetTextExtent(' ')[0]
|
|
29
|
+
- max([0] + [pte[i]-pte[i-1] for i in range(1,len(pte))]) )
|
|
30
|
+
idx = 0
|
|
31
|
+
start = 0
|
|
32
|
+
startIdx = 0
|
|
33
|
+
spcIdx = -1
|
|
34
|
+
while idx < len(pte):
|
|
35
|
+
# remember the last seen space
|
|
36
|
+
if line[idx] == ' ':
|
|
37
|
+
spcIdx = idx
|
|
38
|
+
|
|
39
|
+
# have we reached the max width?
|
|
40
|
+
if pte[idx] - start > wid and (spcIdx != -1 or breakLongWords):
|
|
41
|
+
if spcIdx != -1:
|
|
42
|
+
idx = min(spcIdx + 1, len(pte) - 1)
|
|
43
|
+
wrapped_lines.append(' '*margin + line[startIdx : idx] + ' '*margin)
|
|
44
|
+
start = pte[idx]
|
|
45
|
+
startIdx = idx
|
|
46
|
+
spcIdx = -1
|
|
47
|
+
|
|
48
|
+
idx += 1
|
|
49
|
+
|
|
50
|
+
wrapped_lines.append(' '*margin + line[startIdx : idx] + ' '*margin)
|
|
51
|
+
|
|
52
|
+
return '\n'.join(wrapped_lines)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
if __name__ == '__main__':
|
|
57
|
+
import wx
|
|
58
|
+
class TestPanel(wx.Panel):
|
|
59
|
+
def __init__(self, parent):
|
|
60
|
+
wx.Panel.__init__(self, parent)
|
|
61
|
+
|
|
62
|
+
self.tc = wx.TextCtrl(self, -1, "", (20,20), (150,150), wx.TE_MULTILINE)
|
|
63
|
+
self.Bind(wx.EVT_TEXT, self.OnDoUpdate, self.tc)
|
|
64
|
+
self.Bind(wx.EVT_SIZE, self.OnSize)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def OnSize(self, evt):
|
|
68
|
+
wx.CallAfter(self.OnDoUpdate, None)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def OnDoUpdate(self, evt):
|
|
72
|
+
WIDTH = self.GetSize().width - 220
|
|
73
|
+
HEIGHT = 200
|
|
74
|
+
bmp = wx.Bitmap(WIDTH, HEIGHT)
|
|
75
|
+
mdc = wx.MemoryDC(bmp)
|
|
76
|
+
mdc.SetBackground(wx.Brush("white"))
|
|
77
|
+
mdc.Clear()
|
|
78
|
+
mdc.SetPen(wx.Pen("black"))
|
|
79
|
+
mdc.SetFont(wx.Font(10, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL))
|
|
80
|
+
mdc.DrawRectangle(0,0, WIDTH, HEIGHT)
|
|
81
|
+
|
|
82
|
+
text = wordwrap(self.tc.GetValue(), WIDTH-2, mdc, False)
|
|
83
|
+
#print(repr(text))
|
|
84
|
+
mdc.DrawLabel(text, (1,1, WIDTH-2, HEIGHT-2))
|
|
85
|
+
|
|
86
|
+
del mdc
|
|
87
|
+
dc = wx.ClientDC(self)
|
|
88
|
+
dc.DrawBitmap(bmp, 200, 20)
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
app = wx.App(False)
|
|
92
|
+
frm = wx.Frame(None, title="Test wordWrap")
|
|
93
|
+
pnl = TestPanel(frm)
|
|
94
|
+
frm.Show()
|
|
95
|
+
app.MainLoop()
|
|
96
|
+
|
|
97
|
+
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
#----------------------------------------------------------------------
|
|
2
|
+
# Name: wx.lib.wxcairo
|
|
3
|
+
# Purpose: Glue code to allow either the PyCairo package or the
|
|
4
|
+
# cairocffi package to be used with a wx.DC as the cairo
|
|
5
|
+
# surface.
|
|
6
|
+
#
|
|
7
|
+
# Author: Robin Dunn
|
|
8
|
+
#
|
|
9
|
+
# Created: 3-Sept-2008
|
|
10
|
+
# Copyright: (c) 2008-2020 by Total Control Software
|
|
11
|
+
# Licence: wxWindows license
|
|
12
|
+
#
|
|
13
|
+
# Tags: phoenix-port, py3-port
|
|
14
|
+
#----------------------------------------------------------------------
|
|
15
|
+
|
|
16
|
+
"""
|
|
17
|
+
This package provides some glue code that allows the Cairo library to draw
|
|
18
|
+
directly on :class:`wx.DC` objects, convert to/from :class:`wx.Bitmap`
|
|
19
|
+
objects, etc. using either the PyCairo or the newer cairocffi Cairo wrappers.
|
|
20
|
+
In Cairo terms, the DC is the drawing surface. The ``CairoContextFromDC``
|
|
21
|
+
function in this module will return an instance of the Cairo Context class
|
|
22
|
+
that is ready for drawing, using the native cairo surface type for the current
|
|
23
|
+
platform.
|
|
24
|
+
|
|
25
|
+
.. note:: Be sure to import ``wx.lib.wxcairo`` before importing the ``cairo``
|
|
26
|
+
module.
|
|
27
|
+
|
|
28
|
+
To use Cairo with wxPython you will need to have a few dependencies
|
|
29
|
+
installed. On Linux and other unix-like systems you may already have
|
|
30
|
+
them, or can easily get them with your system's package manager. Just
|
|
31
|
+
check if libcairo and either cairocffi or pycairo packages are installed.
|
|
32
|
+
|
|
33
|
+
On Mac you can get Cairo from MacPorts or similar tools. Make sure that
|
|
34
|
+
the quartz option is turned on so those Mac-specific APIs will be included in
|
|
35
|
+
the Cairo library when it is built. You can then use ``pip install cairocffi``
|
|
36
|
+
to get the Python wrappers. If your cairo shared library is in a non-standard
|
|
37
|
+
location, then you can help it be found by setting DYLD_FALLBACK_LIBRARY_PATH
|
|
38
|
+
in the environment.
|
|
39
|
+
|
|
40
|
+
On Windows a copy of the Cairo and related DLLs are included with wxPython
|
|
41
|
+
inside the wx package folder. These files were extracted from the GTK runtime
|
|
42
|
+
installers found at the following URLs. You can replace those DLLs with others
|
|
43
|
+
if you choose, or you can cause the wx_cairocffi module to use DLLs from some
|
|
44
|
+
other location by setting the CAIRO environment variable.
|
|
45
|
+
|
|
46
|
+
32bit: http://gtk-win.sourceforge.net/home/index.php/Main/Downloads
|
|
47
|
+
64bit: https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer
|
|
48
|
+
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
#----------------------------------------------------------------------------
|
|
52
|
+
|
|
53
|
+
import wx
|
|
54
|
+
|
|
55
|
+
# Import our glue functions for either cairocffi or pycairo, depending on
|
|
56
|
+
# which is installed.
|
|
57
|
+
try:
|
|
58
|
+
# Use cairocffi first if it is available
|
|
59
|
+
from .wx_cairocffi import _ContextFromDC, _FontFaceFromFont
|
|
60
|
+
import cairo
|
|
61
|
+
except ImportError:
|
|
62
|
+
try:
|
|
63
|
+
# otherwise use pycairo
|
|
64
|
+
from .wx_pycairo import _ContextFromDC, _FontFaceFromFont
|
|
65
|
+
import cairo
|
|
66
|
+
except ImportError:
|
|
67
|
+
# or provide some exception raising stubs instead
|
|
68
|
+
def _ContextFromDC(dc):
|
|
69
|
+
raise NotImplementedError("Cairo wrappers not found")
|
|
70
|
+
|
|
71
|
+
def _FontFaceFromFont(font):
|
|
72
|
+
raise NotImplementedError("Cairo wrappers not found")
|
|
73
|
+
|
|
74
|
+
#----------------------------------------------------------------------------
|
|
75
|
+
|
|
76
|
+
def ContextFromDC(dc):
|
|
77
|
+
"""
|
|
78
|
+
Creates and returns a ``cairo.Context`` object using the :class:`wx.DC` as
|
|
79
|
+
the surface. (Only window, client, paint and memory DC's are allowed at
|
|
80
|
+
this time.)
|
|
81
|
+
"""
|
|
82
|
+
return _ContextFromDC(dc)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def FontFaceFromFont(font):
|
|
86
|
+
"""
|
|
87
|
+
Creates and returns a ``cairo.FontFace`` object from the native
|
|
88
|
+
information in a :class:`wx.Font`.
|
|
89
|
+
"""
|
|
90
|
+
return _FontFaceFromFont(font)
|
|
91
|
+
|
|
92
|
+
#----------------------------------------------------------------------------
|
|
93
|
+
# wxBitmap <--> ImageSurface
|
|
94
|
+
|
|
95
|
+
def BitmapFromImageSurface(surface):
|
|
96
|
+
"""
|
|
97
|
+
Create a :class:`wx.Bitmap` from a Cairo ``ImageSurface``.
|
|
98
|
+
"""
|
|
99
|
+
format = surface.get_format()
|
|
100
|
+
if format not in [cairo.FORMAT_ARGB32, cairo.FORMAT_RGB24]:
|
|
101
|
+
raise TypeError("Unsupported format")
|
|
102
|
+
|
|
103
|
+
width = surface.get_width()
|
|
104
|
+
height = surface.get_height()
|
|
105
|
+
stride = surface.get_stride()
|
|
106
|
+
data = surface.get_data()
|
|
107
|
+
if format == cairo.FORMAT_ARGB32:
|
|
108
|
+
fmt = wx.BitmapBufferFormat_ARGB32
|
|
109
|
+
else:
|
|
110
|
+
fmt = wx.BitmapBufferFormat_RGB32
|
|
111
|
+
|
|
112
|
+
bmp = wx.Bitmap(width, height, 32)
|
|
113
|
+
bmp.CopyFromBuffer(data, fmt, stride)
|
|
114
|
+
return bmp
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def ImageSurfaceFromBitmap(bitmap):
|
|
118
|
+
"""
|
|
119
|
+
Create a Cairo ``ImageSurface`` from a :class:`wx.Bitmap`
|
|
120
|
+
"""
|
|
121
|
+
width, height = bitmap.GetSize()
|
|
122
|
+
if bitmap.ConvertToImage().HasAlpha():
|
|
123
|
+
format = cairo.FORMAT_ARGB32
|
|
124
|
+
fmt = wx.BitmapBufferFormat_ARGB32
|
|
125
|
+
else:
|
|
126
|
+
format = cairo.FORMAT_RGB24
|
|
127
|
+
fmt = wx.BitmapBufferFormat_RGB32
|
|
128
|
+
|
|
129
|
+
try:
|
|
130
|
+
stride = cairo.ImageSurface.format_stride_for_width(format, width)
|
|
131
|
+
except AttributeError:
|
|
132
|
+
stride = width * 4
|
|
133
|
+
|
|
134
|
+
surface = cairo.ImageSurface(format, width, height)
|
|
135
|
+
bitmap.CopyToBuffer(surface.get_data(), fmt, stride)
|
|
136
|
+
surface.mark_dirty()
|
|
137
|
+
return surface
|
|
138
|
+
|
|
139
|
+
#----------------------------------------------------------------------------
|