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/agw/piectrl.py
ADDED
|
@@ -0,0 +1,1082 @@
|
|
|
1
|
+
# --------------------------------------------------------------------------- #
|
|
2
|
+
# PIECTRL Control wxPython IMPLEMENTATION
|
|
3
|
+
# Python Code By:
|
|
4
|
+
#
|
|
5
|
+
# Andrea Gavana, @ 31 Oct 2005
|
|
6
|
+
# Latest Revision: 16 Jul 2012, 15.00 GMT
|
|
7
|
+
#
|
|
8
|
+
#
|
|
9
|
+
# TODO List/Caveats
|
|
10
|
+
#
|
|
11
|
+
# 1. Maybe Integrate The Very Nice PyOpenGL Implementation Of A PieChart Coded
|
|
12
|
+
# By Will McGugan?
|
|
13
|
+
#
|
|
14
|
+
# 2. Not Tested On Other Platforms, Only On Windows 2000/XP, With Python 2.4.1
|
|
15
|
+
# And wxPython 2.6.1.0
|
|
16
|
+
#
|
|
17
|
+
# For All Kind Of Problems, Requests Of Enhancements And Bug Reports, Please
|
|
18
|
+
# Write To Me At:
|
|
19
|
+
#
|
|
20
|
+
# andrea.gavana@gmail.com
|
|
21
|
+
# andrea.gavana@maerskoil.com
|
|
22
|
+
#
|
|
23
|
+
# Or, Obviously, To The wxPython Mailing List!!!
|
|
24
|
+
#
|
|
25
|
+
# Tags: phoenix-port, unittest, documented, py3-port
|
|
26
|
+
#
|
|
27
|
+
# End Of Comments
|
|
28
|
+
# --------------------------------------------------------------------------- #
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
"""
|
|
32
|
+
:class:`~wx.lib.agw.piectrl.PieCtrl` and :class:`~wx.lib.agw.piectrl.ProgressPie` are simple classes that reproduce the behavior of a pie
|
|
33
|
+
chart.
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
Description
|
|
37
|
+
===========
|
|
38
|
+
|
|
39
|
+
:class:`PieCtrl` and :class:`ProgressPie` are simple classes that reproduce the behavior of a pie
|
|
40
|
+
chart. They use only pure wxPython classes/methods, without external dependencies.
|
|
41
|
+
:class:`PieCtrl` is somewhat a "static" control, that you may create in order to display
|
|
42
|
+
a simple pie chart on a :class:`Panel` or similar. :class:`ProgressPie` tries to emulate the
|
|
43
|
+
behavior of :class:`ProgressDialog`, but using a pie chart instead of a gauge.
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
Usage
|
|
47
|
+
=====
|
|
48
|
+
|
|
49
|
+
Usage example::
|
|
50
|
+
|
|
51
|
+
import wx
|
|
52
|
+
import wx.lib.agw.piectrl as PC
|
|
53
|
+
|
|
54
|
+
class MyFrame(wx.Frame):
|
|
55
|
+
|
|
56
|
+
def __init__(self, parent):
|
|
57
|
+
|
|
58
|
+
wx.Frame.__init__(self, parent, -1, "PieCtrl Demo")
|
|
59
|
+
|
|
60
|
+
panel = wx.Panel(self)
|
|
61
|
+
|
|
62
|
+
# create a simple PieCtrl with 3 sectors
|
|
63
|
+
mypie = PC.PieCtrl(panel, -1, wx.DefaultPosition, wx.Size(180,270))
|
|
64
|
+
|
|
65
|
+
part = PC.PiePart()
|
|
66
|
+
|
|
67
|
+
part.SetLabel("Label 1")
|
|
68
|
+
part.SetValue(300)
|
|
69
|
+
part.SetColour(wx.Colour(200, 50, 50))
|
|
70
|
+
mypie._series.append(part)
|
|
71
|
+
|
|
72
|
+
part = PC.PiePart()
|
|
73
|
+
|
|
74
|
+
part.SetLabel("Label 2")
|
|
75
|
+
part.SetValue(200)
|
|
76
|
+
part.SetColour(wx.Colour(50, 200, 50))
|
|
77
|
+
mypie._series.append(part)
|
|
78
|
+
|
|
79
|
+
part = PC.PiePart()
|
|
80
|
+
|
|
81
|
+
part.SetLabel("helloworld label 3")
|
|
82
|
+
part.SetValue(50)
|
|
83
|
+
part.SetColour(wx.Colour(50, 50, 200))
|
|
84
|
+
mypie._series.append(part)
|
|
85
|
+
|
|
86
|
+
# create a ProgressPie
|
|
87
|
+
progress_pie = PC.ProgressPie(panel, 100, 50, -1, wx.DefaultPosition,
|
|
88
|
+
wx.Size(180, 200), wx.SIMPLE_BORDER)
|
|
89
|
+
|
|
90
|
+
progress_pie.SetBackColour(wx.Colour(150, 200, 255))
|
|
91
|
+
progress_pie.SetFilledColour(wx.RED)
|
|
92
|
+
progress_pie.SetUnfilledColour(wx.WHITE)
|
|
93
|
+
progress_pie.SetHeight(20)
|
|
94
|
+
|
|
95
|
+
main_sizer = wx.BoxSizer(wx.HORIZONTAL)
|
|
96
|
+
|
|
97
|
+
main_sizer.Add(mypie, 1, wx.EXPAND | wx.ALL, 5)
|
|
98
|
+
main_sizer.Add(progress_pie, 1, wx.EXPAND | wx.ALL, 5)
|
|
99
|
+
|
|
100
|
+
panel.SetSizer(main_sizer)
|
|
101
|
+
main_sizer.Layout()
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
# our normal wxApp-derived class, as usual
|
|
105
|
+
|
|
106
|
+
app = wx.App(0)
|
|
107
|
+
|
|
108
|
+
frame = MyFrame(None)
|
|
109
|
+
app.SetTopWindow(frame)
|
|
110
|
+
frame.Show()
|
|
111
|
+
|
|
112
|
+
app.MainLoop()
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
Methods and Settings
|
|
117
|
+
====================
|
|
118
|
+
|
|
119
|
+
With :class:`PieCtrl` you can:
|
|
120
|
+
|
|
121
|
+
- Create a :class:`PieCtrl` with different sectors;
|
|
122
|
+
- Set the sector values, colours and labels;
|
|
123
|
+
- Assign a legend to the :class:`PieCtrl`;
|
|
124
|
+
- Use an image as the :class:`PieCtrl` background;
|
|
125
|
+
- Change the vertical rotation (perspective) of the :class:`PieCtrl`;
|
|
126
|
+
- Show/hide the segment edges.
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
Window Styles
|
|
130
|
+
=============
|
|
131
|
+
|
|
132
|
+
`No particular window styles are available for this class.`
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
Events Processing
|
|
136
|
+
=================
|
|
137
|
+
|
|
138
|
+
`No custom events are available for this class.`
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
License And Version
|
|
142
|
+
===================
|
|
143
|
+
|
|
144
|
+
:class:`PieCtrl` is distributed under the wxPython license.
|
|
145
|
+
|
|
146
|
+
Latest revision: Andrea Gavana @ 16 Jul 2012, 15.00 GMT
|
|
147
|
+
|
|
148
|
+
Version 0.3
|
|
149
|
+
|
|
150
|
+
"""
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
#----------------------------------------------------------------------
|
|
154
|
+
# Beginning Of PIECTRL wxPython Code
|
|
155
|
+
#----------------------------------------------------------------------
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
import wx
|
|
159
|
+
|
|
160
|
+
from math import pi, sin, cos
|
|
161
|
+
|
|
162
|
+
#----------------------------------------------------------------------
|
|
163
|
+
# Class PieCtrlLegend
|
|
164
|
+
# This Class Handles The Legend For The Classic PieCtrl.
|
|
165
|
+
#----------------------------------------------------------------------
|
|
166
|
+
|
|
167
|
+
class PieCtrlLegend(wx.Window):
|
|
168
|
+
"""
|
|
169
|
+
This class displays a legend window for the classic :class:`PieCtrl`.
|
|
170
|
+
"""
|
|
171
|
+
|
|
172
|
+
def __init__(self, parent, title, id=wx.ID_ANY, pos=wx.DefaultPosition,
|
|
173
|
+
size=wx.DefaultSize, style=0):
|
|
174
|
+
"""
|
|
175
|
+
Default class constructor.
|
|
176
|
+
|
|
177
|
+
:param `parent`: the :class:`PieCtrlLegend` parent;
|
|
178
|
+
:param `title`: the legend title;
|
|
179
|
+
:param `id`: window identifier. A value of -1 indicates a default value;
|
|
180
|
+
:param `pos`: the control position. A value of (-1, -1) indicates a default position,
|
|
181
|
+
chosen by either the windowing system or wxPython, depending on platform;
|
|
182
|
+
:param `size`: the control size. A value of (-1, -1) indicates a default size,
|
|
183
|
+
chosen by either the windowing system or wxPython, depending on platform;
|
|
184
|
+
:param `style`: the window style (unused).
|
|
185
|
+
"""
|
|
186
|
+
|
|
187
|
+
wx.Window.__init__(self, parent, id, pos, size, style)
|
|
188
|
+
|
|
189
|
+
self._title = title
|
|
190
|
+
self._istransparent = False
|
|
191
|
+
self._horborder = 5
|
|
192
|
+
self._verborder = 5
|
|
193
|
+
self._titlecolour = wx.Colour(0, 0, 127)
|
|
194
|
+
self._labelcolour = wx.BLACK
|
|
195
|
+
self._labelfont = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
|
|
196
|
+
self._backcolour = wx.YELLOW
|
|
197
|
+
self._backgroundDC = wx.MemoryDC()
|
|
198
|
+
self._parent = parent
|
|
199
|
+
|
|
200
|
+
self.Bind(wx.EVT_ERASE_BACKGROUND, lambda x: None)
|
|
201
|
+
self.Bind(wx.EVT_PAINT, self.OnPaint)
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def SetTransparent(self, value=False):
|
|
205
|
+
"""
|
|
206
|
+
Toggles the legend transparency (visibility).
|
|
207
|
+
|
|
208
|
+
:param `value`: ``True`` to set the legend as transparent, ``False`` otherwise.
|
|
209
|
+
"""
|
|
210
|
+
|
|
211
|
+
self._istransparent = value
|
|
212
|
+
self.Refresh()
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
def RecreateBackground(self, parentdc):
|
|
216
|
+
"""
|
|
217
|
+
Recreates the legend background.
|
|
218
|
+
|
|
219
|
+
:param `parentdc`: an instance of :class:`wx.DC`.
|
|
220
|
+
"""
|
|
221
|
+
|
|
222
|
+
w, h = self.GetSize()
|
|
223
|
+
self._background = wx.Bitmap(w, h)
|
|
224
|
+
self._backgroundDC.SelectObject(self._background)
|
|
225
|
+
|
|
226
|
+
if self.IsTransparent():
|
|
227
|
+
|
|
228
|
+
self._backgroundDC.Blit(0, 0, w, h, parentdc, self.GetPosition().x,
|
|
229
|
+
self.GetPosition().y)
|
|
230
|
+
|
|
231
|
+
else:
|
|
232
|
+
|
|
233
|
+
self._backgroundDC.SetBackground(wx.Brush(self._backcolour))
|
|
234
|
+
self._backgroundDC.Clear()
|
|
235
|
+
|
|
236
|
+
self.Refresh()
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
def SetHorizontalBorder(self, value):
|
|
240
|
+
"""
|
|
241
|
+
Sets the legend's horizontal border.
|
|
242
|
+
|
|
243
|
+
:param `value`: the horizontal border thickness, in pixels.
|
|
244
|
+
"""
|
|
245
|
+
|
|
246
|
+
self._horborder = value
|
|
247
|
+
self.Refresh()
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
def GetHorizontalBorder(self):
|
|
251
|
+
""" Returns the legend's horizontal border, in pixels. """
|
|
252
|
+
|
|
253
|
+
return self._horborder
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
def SetVerticalBorder(self, value):
|
|
257
|
+
"""
|
|
258
|
+
Sets the legend's vertical border.
|
|
259
|
+
|
|
260
|
+
:param `value`: the horizontal border thickness, in pixels.
|
|
261
|
+
"""
|
|
262
|
+
|
|
263
|
+
self._verborder = value
|
|
264
|
+
self.Refresh()
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
def GetVerticalBorder(self):
|
|
268
|
+
""" Returns the legend's vertical border, in pixels. """
|
|
269
|
+
|
|
270
|
+
return self._verborder
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
def SetLabelColour(self, colour):
|
|
274
|
+
"""
|
|
275
|
+
Sets the legend label colour.
|
|
276
|
+
|
|
277
|
+
:param `colour`: a valid :class:`wx.Colour` object.
|
|
278
|
+
"""
|
|
279
|
+
|
|
280
|
+
self._labelcolour = colour
|
|
281
|
+
self.Refresh()
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
def GetLabelColour(self):
|
|
285
|
+
""" Returns the legend label colour. """
|
|
286
|
+
|
|
287
|
+
return self._labelcolour
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
def SetLabelFont(self, font):
|
|
291
|
+
"""
|
|
292
|
+
Sets the legend label font.
|
|
293
|
+
|
|
294
|
+
:param `font`: a valid :class:`wx.Font` object.
|
|
295
|
+
"""
|
|
296
|
+
|
|
297
|
+
self._labelfont = font
|
|
298
|
+
self.Refresh()
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
def GetLabelFont(self):
|
|
302
|
+
""" Returns the legend label font. """
|
|
303
|
+
|
|
304
|
+
return self._labelfont
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
def SetBackColour(self, colour):
|
|
308
|
+
"""
|
|
309
|
+
Sets the legend background colour.
|
|
310
|
+
|
|
311
|
+
:param `colour`: a valid :class:`wx.Colour` object.
|
|
312
|
+
"""
|
|
313
|
+
|
|
314
|
+
self._backcolour = colour
|
|
315
|
+
self.Refresh()
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
def GetBackColour(self):
|
|
319
|
+
""" Returns the legend background colour. """
|
|
320
|
+
|
|
321
|
+
return self._backcolour
|
|
322
|
+
|
|
323
|
+
|
|
324
|
+
def IsTransparent(self):
|
|
325
|
+
""" Returns whether the legend background is transparent or not. """
|
|
326
|
+
|
|
327
|
+
return self._istransparent
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
def OnPaint(self, event):
|
|
331
|
+
"""
|
|
332
|
+
Handles the ``wx.EVT_PAINT`` event for :class:`PieCtrlLegend`.
|
|
333
|
+
|
|
334
|
+
:param `event`: a :class:`PaintEvent` event to be processed.
|
|
335
|
+
"""
|
|
336
|
+
|
|
337
|
+
pdc = wx.PaintDC(self)
|
|
338
|
+
|
|
339
|
+
w, h = self.GetSize()
|
|
340
|
+
bmp = wx.Bitmap(w, h)
|
|
341
|
+
mdc = wx.MemoryDC()
|
|
342
|
+
mdc.SelectObject(bmp)
|
|
343
|
+
|
|
344
|
+
if self.IsTransparent():
|
|
345
|
+
|
|
346
|
+
parentdc = wx.ClientDC(self.GetParent())
|
|
347
|
+
mdc.Blit(0, 0, w, h, self._backgroundDC, 0, 0)
|
|
348
|
+
|
|
349
|
+
else:
|
|
350
|
+
|
|
351
|
+
mdc.SetBackground(wx.Brush(self._backcolour))
|
|
352
|
+
mdc.Clear()
|
|
353
|
+
|
|
354
|
+
dy = self._verborder
|
|
355
|
+
mdc.SetFont(self._labelfont)
|
|
356
|
+
mdc.SetTextForeground(self._labelcolour)
|
|
357
|
+
maxwidth = 0
|
|
358
|
+
|
|
359
|
+
# local opts
|
|
360
|
+
wxBrush = wx.Brush
|
|
361
|
+
_parent_series = self._parent._series
|
|
362
|
+
_horborder = self._horborder
|
|
363
|
+
mdc_GetTextExtent = mdc.GetTextExtent
|
|
364
|
+
mdc_SetBrush = mdc.SetBrush
|
|
365
|
+
mdc_DrawCircle = mdc.DrawCircle
|
|
366
|
+
mdc_DrawText = mdc.DrawText
|
|
367
|
+
|
|
368
|
+
for ii in range(len(_parent_series)):
|
|
369
|
+
|
|
370
|
+
tw, th = mdc_GetTextExtent(_parent_series[ii].GetLabel())
|
|
371
|
+
mdc_SetBrush(wxBrush(_parent_series[ii].GetColour()))
|
|
372
|
+
mdc_DrawCircle(_horborder+5, dy+th//2, 5)
|
|
373
|
+
mdc_DrawText(_parent_series[ii].GetLabel(), _horborder+15, dy)
|
|
374
|
+
dy = dy + th + 3
|
|
375
|
+
maxwidth = max(maxwidth, int(2*_horborder+tw+15))
|
|
376
|
+
|
|
377
|
+
dy = dy + self._verborder
|
|
378
|
+
if w != maxwidth or h != dy:
|
|
379
|
+
self.SetSize((maxwidth, dy))
|
|
380
|
+
|
|
381
|
+
pdc.Blit(0, 0, w, h, mdc, 0, 0)
|
|
382
|
+
|
|
383
|
+
|
|
384
|
+
#----------------------------------------------------------------------
|
|
385
|
+
# Class PiePart
|
|
386
|
+
# This Class Handles The Legend Segments Properties, Such As Value,
|
|
387
|
+
# Colour And Label.
|
|
388
|
+
#----------------------------------------------------------------------
|
|
389
|
+
|
|
390
|
+
class PiePart(object):
|
|
391
|
+
"""
|
|
392
|
+
This class handles the legend segments properties, such as value,
|
|
393
|
+
colour and label.
|
|
394
|
+
"""
|
|
395
|
+
|
|
396
|
+
def __init__(self, value=0, colour=wx.BLACK, label=""):
|
|
397
|
+
"""
|
|
398
|
+
Default class constructor.
|
|
399
|
+
|
|
400
|
+
:param `value`: the pie part value;
|
|
401
|
+
:param `colour`: the pie part colour;
|
|
402
|
+
:param `label`: the pie part text label.
|
|
403
|
+
"""
|
|
404
|
+
|
|
405
|
+
self._value = value
|
|
406
|
+
self._colour = colour
|
|
407
|
+
self._label = label
|
|
408
|
+
|
|
409
|
+
|
|
410
|
+
def SetValue(self, value):
|
|
411
|
+
"""
|
|
412
|
+
Sets the segment absolute value.
|
|
413
|
+
|
|
414
|
+
:param `value`: a floating point number representing the :class:`PiePart` value.
|
|
415
|
+
"""
|
|
416
|
+
|
|
417
|
+
self._value = value
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
def GetValue(self):
|
|
421
|
+
""" Returns the segment absolute value. """
|
|
422
|
+
|
|
423
|
+
return self._value
|
|
424
|
+
|
|
425
|
+
|
|
426
|
+
def SetColour(self, colour):
|
|
427
|
+
"""
|
|
428
|
+
Sets the segment colour.
|
|
429
|
+
|
|
430
|
+
:param `colour`: a valid :class:`wx.Colour` object.
|
|
431
|
+
"""
|
|
432
|
+
|
|
433
|
+
self._colour = colour
|
|
434
|
+
|
|
435
|
+
|
|
436
|
+
def GetColour(self):
|
|
437
|
+
""" Returns the segment colour. """
|
|
438
|
+
|
|
439
|
+
return self._colour
|
|
440
|
+
|
|
441
|
+
|
|
442
|
+
def SetLabel(self, label):
|
|
443
|
+
"""
|
|
444
|
+
Sets the segment label.
|
|
445
|
+
|
|
446
|
+
:param `label`: the pie part text label.
|
|
447
|
+
"""
|
|
448
|
+
|
|
449
|
+
self._label = label
|
|
450
|
+
|
|
451
|
+
|
|
452
|
+
def GetLabel(self):
|
|
453
|
+
""" Returns the segment label. """
|
|
454
|
+
|
|
455
|
+
return self._label
|
|
456
|
+
|
|
457
|
+
|
|
458
|
+
#----------------------------------------------------------------------
|
|
459
|
+
# Class PieCtrl
|
|
460
|
+
# This Is The Main PieCtrl Implementation, Used Also By ProgressPie.
|
|
461
|
+
#----------------------------------------------------------------------
|
|
462
|
+
|
|
463
|
+
class PieCtrl(wx.Window):
|
|
464
|
+
"""
|
|
465
|
+
:class:`PieCtrl` is somewhat a "static" control, that you may create in order to display
|
|
466
|
+
a simple pie chart on a :class:`Panel` or similar.
|
|
467
|
+
"""
|
|
468
|
+
|
|
469
|
+
def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition,
|
|
470
|
+
size=wx.DefaultSize, style=0, name="PieCtrl"):
|
|
471
|
+
"""
|
|
472
|
+
Default class constructor.
|
|
473
|
+
|
|
474
|
+
:param `parent`: the :class:`PieCtrl` parent. Must not be ``None``;
|
|
475
|
+
:param `id`: window identifier. A value of -1 indicates a default value;
|
|
476
|
+
:param `pos`: the control position. A value of (-1, -1) indicates a default position,
|
|
477
|
+
chosen by either the windowing system or wxPython, depending on platform;
|
|
478
|
+
:param `size`: the control size. A value of (-1, -1) indicates a default size,
|
|
479
|
+
chosen by either the windowing system or wxPython, depending on platform;
|
|
480
|
+
:param `style`: the window style (unused);
|
|
481
|
+
:param `name`: the window name.
|
|
482
|
+
"""
|
|
483
|
+
|
|
484
|
+
wx.Window.__init__(self, parent, id, pos, size, style, name)
|
|
485
|
+
|
|
486
|
+
self._angle = pi/12.0
|
|
487
|
+
self._rotationangle = 0
|
|
488
|
+
self._height = 10
|
|
489
|
+
self._background = wx.NullBitmap
|
|
490
|
+
self._canvasbitmap = wx.Bitmap(1, 1)
|
|
491
|
+
self._canvasDC = wx.MemoryDC()
|
|
492
|
+
self._backcolour = wx.WHITE
|
|
493
|
+
self._showedges = True
|
|
494
|
+
self._series = []
|
|
495
|
+
|
|
496
|
+
self.Bind(wx.EVT_ERASE_BACKGROUND, lambda x: None)
|
|
497
|
+
self.Bind(wx.EVT_SIZE, self.OnSize)
|
|
498
|
+
self.Bind(wx.EVT_PAINT, self.OnPaint)
|
|
499
|
+
|
|
500
|
+
self.RecreateCanvas()
|
|
501
|
+
self._legend = PieCtrlLegend(self, "PieCtrl", -1, wx.Point(10,10), wx.Size(100,75))
|
|
502
|
+
|
|
503
|
+
|
|
504
|
+
def SetBackground(self, bmp):
|
|
505
|
+
"""
|
|
506
|
+
Sets the :class:`PieCtrl` background image.
|
|
507
|
+
|
|
508
|
+
:param `bmp`: a valid :class:`wx.Bitmap` object.
|
|
509
|
+
"""
|
|
510
|
+
|
|
511
|
+
self._background = bmp
|
|
512
|
+
self.Refresh()
|
|
513
|
+
|
|
514
|
+
|
|
515
|
+
def GetBackground(self):
|
|
516
|
+
""" Returns the :class:`PieCtrl` background image. """
|
|
517
|
+
|
|
518
|
+
return self._background
|
|
519
|
+
|
|
520
|
+
|
|
521
|
+
def OnSize(self, event):
|
|
522
|
+
"""
|
|
523
|
+
Handles the ``wx.EVT_SIZE`` event for :class:`PieCtrl`.
|
|
524
|
+
|
|
525
|
+
:param `event`: a :class:`wx.SizeEvent` event to be processed.
|
|
526
|
+
"""
|
|
527
|
+
|
|
528
|
+
self.RecreateCanvas()
|
|
529
|
+
self.Refresh()
|
|
530
|
+
event.Skip()
|
|
531
|
+
|
|
532
|
+
|
|
533
|
+
def RecreateCanvas(self):
|
|
534
|
+
""" Recreates the :class:`PieCtrl` container (canvas). """
|
|
535
|
+
|
|
536
|
+
self._canvasbitmap = wx.Bitmap(max(1, self.GetSize().GetWidth()),
|
|
537
|
+
max(1, self.GetSize().GetHeight()))
|
|
538
|
+
self._canvasDC.SelectObject(self._canvasbitmap)
|
|
539
|
+
|
|
540
|
+
|
|
541
|
+
def GetPartAngles(self):
|
|
542
|
+
""" Returns the angles associated to all segments. """
|
|
543
|
+
|
|
544
|
+
angles = []
|
|
545
|
+
total = 0.0
|
|
546
|
+
|
|
547
|
+
_series = self._series # local opt
|
|
548
|
+
|
|
549
|
+
for ii in range(len(_series)):
|
|
550
|
+
total = total + _series[ii].GetValue()
|
|
551
|
+
|
|
552
|
+
current = 0.0
|
|
553
|
+
angles.append(current)
|
|
554
|
+
|
|
555
|
+
for ii in range(len(_series)):
|
|
556
|
+
|
|
557
|
+
current = current + _series[ii].GetValue()
|
|
558
|
+
angles.append(360.0*current/total)
|
|
559
|
+
|
|
560
|
+
return angles
|
|
561
|
+
|
|
562
|
+
|
|
563
|
+
def SetAngle(self, angle):
|
|
564
|
+
"""
|
|
565
|
+
Sets the orientation angle for :class:`PieCtrl`.
|
|
566
|
+
|
|
567
|
+
:param `angle`: the orientation angle for :class:`PieCtrl`, in radians.
|
|
568
|
+
"""
|
|
569
|
+
if angle < 0:
|
|
570
|
+
angle = 0
|
|
571
|
+
if angle > pi/2:
|
|
572
|
+
angle = pi/2
|
|
573
|
+
|
|
574
|
+
self._angle = angle
|
|
575
|
+
self.Refresh()
|
|
576
|
+
|
|
577
|
+
|
|
578
|
+
def GetAngle(self):
|
|
579
|
+
""" Returns the orientation angle for :class:`PieCtrl`, in radians. """
|
|
580
|
+
|
|
581
|
+
return self._angle
|
|
582
|
+
|
|
583
|
+
|
|
584
|
+
def SetRotationAngle(self, angle):
|
|
585
|
+
"""
|
|
586
|
+
Sets the angle at which the first sector starts.
|
|
587
|
+
|
|
588
|
+
:param `angle`: the first sector angle, in radians.
|
|
589
|
+
"""
|
|
590
|
+
|
|
591
|
+
if angle < 0:
|
|
592
|
+
angle = 0
|
|
593
|
+
if angle > 2*pi:
|
|
594
|
+
angle = 2*pi
|
|
595
|
+
|
|
596
|
+
self._rotationangle = angle
|
|
597
|
+
self.Refresh()
|
|
598
|
+
|
|
599
|
+
|
|
600
|
+
def GetRotationAngle(self):
|
|
601
|
+
""" Returns the angle at which the first sector starts, in radians. """
|
|
602
|
+
|
|
603
|
+
return self._rotationangle
|
|
604
|
+
|
|
605
|
+
|
|
606
|
+
def SetShowEdges(self, value=True):
|
|
607
|
+
"""
|
|
608
|
+
Sets whether the :class:`PieCtrl` edges are visible or not.
|
|
609
|
+
|
|
610
|
+
:param `value`: ``True`` to show the edges, ``False`` to hide them.
|
|
611
|
+
"""
|
|
612
|
+
|
|
613
|
+
self._showedges = value
|
|
614
|
+
self.Refresh()
|
|
615
|
+
|
|
616
|
+
|
|
617
|
+
def GetShowEdges(self):
|
|
618
|
+
""" Returns whether the :class:`PieCtrl` edges are visible or not. """
|
|
619
|
+
|
|
620
|
+
return self._showedges
|
|
621
|
+
|
|
622
|
+
|
|
623
|
+
def SetBackColour(self, colour):
|
|
624
|
+
"""
|
|
625
|
+
Sets the :class:`PieCtrl` background colour.
|
|
626
|
+
|
|
627
|
+
:param `colour`: a valid :class:`wx.Colour` object.
|
|
628
|
+
"""
|
|
629
|
+
|
|
630
|
+
self._backcolour = colour
|
|
631
|
+
self.Refresh()
|
|
632
|
+
|
|
633
|
+
|
|
634
|
+
def GetBackColour(self):
|
|
635
|
+
""" Returns the :class:`PieCtrl` background colour. """
|
|
636
|
+
|
|
637
|
+
return self._backcolour
|
|
638
|
+
|
|
639
|
+
|
|
640
|
+
def SetHeight(self, value):
|
|
641
|
+
"""
|
|
642
|
+
Sets the height (in pixels) of the :class:`PieCtrl`.
|
|
643
|
+
|
|
644
|
+
:param `value`: the new height of the widget, in pixels.
|
|
645
|
+
"""
|
|
646
|
+
|
|
647
|
+
self._height = value
|
|
648
|
+
|
|
649
|
+
|
|
650
|
+
def GetHeight(self):
|
|
651
|
+
""" Returns the height (in pixels) of the :class:`PieCtrl`. """
|
|
652
|
+
|
|
653
|
+
return self._height
|
|
654
|
+
|
|
655
|
+
|
|
656
|
+
def GetLegend(self):
|
|
657
|
+
""" Returns the :class:`PieCtrl` legend. """
|
|
658
|
+
|
|
659
|
+
return self._legend
|
|
660
|
+
|
|
661
|
+
|
|
662
|
+
def DrawParts(self, dc, cx, cy, w, h):
|
|
663
|
+
"""
|
|
664
|
+
Draws the :class:`PieCtrl` external edges.
|
|
665
|
+
|
|
666
|
+
:param `dc`: an instance of :class:`wx.DC`;
|
|
667
|
+
:param `cx`: the part `x` coordinate;
|
|
668
|
+
:param `cy`: the part `y` coordinate;
|
|
669
|
+
:param `w`: the control's width;
|
|
670
|
+
:param `h`: the control's height.
|
|
671
|
+
"""
|
|
672
|
+
|
|
673
|
+
# local opts
|
|
674
|
+
_angle = self._angle
|
|
675
|
+
_rotationangle = self._rotationangle
|
|
676
|
+
wxPen = wx.Pen
|
|
677
|
+
wxBrush = wx.Brush
|
|
678
|
+
dc_SetPen = dc.SetPen
|
|
679
|
+
dc_SetBrush = dc.SetBrush
|
|
680
|
+
dc_DrawEllipticArc = dc.DrawEllipticArc
|
|
681
|
+
|
|
682
|
+
angles = self.GetPartAngles()
|
|
683
|
+
oldpen = dc.GetPen()
|
|
684
|
+
|
|
685
|
+
if self._showedges:
|
|
686
|
+
dc_SetPen(wx.BLACK_PEN)
|
|
687
|
+
|
|
688
|
+
for ii in range(len(angles)):
|
|
689
|
+
if ii > 0:
|
|
690
|
+
if not self._showedges:
|
|
691
|
+
dc_SetPen(wxPen(self._series[ii-1].GetColour()))
|
|
692
|
+
|
|
693
|
+
dc_SetBrush(wxBrush(self._series[ii-1].GetColour()))
|
|
694
|
+
|
|
695
|
+
if angles[ii-1] != angles[ii]:
|
|
696
|
+
height = int(h*sin(_angle))
|
|
697
|
+
if height > 0:
|
|
698
|
+
dc_DrawEllipticArc(0, int((1-sin(_angle))*(h//2)+cy),
|
|
699
|
+
w, height,
|
|
700
|
+
angles[ii-1]+_rotationangle/pi*180,
|
|
701
|
+
angles[ii]+_rotationangle/pi*180)
|
|
702
|
+
|
|
703
|
+
if len(self._series) == 1:
|
|
704
|
+
height = int(h*sin(_angle))
|
|
705
|
+
if height > 0:
|
|
706
|
+
dc_SetBrush(wxBrush(self._series[0].GetColour()))
|
|
707
|
+
dc_DrawEllipticArc(0, int((1-sin(_angle))*(h//2)+cy),
|
|
708
|
+
w, height, 0, 360)
|
|
709
|
+
|
|
710
|
+
dc_SetPen(oldpen)
|
|
711
|
+
|
|
712
|
+
|
|
713
|
+
def Draw(self, dc):
|
|
714
|
+
"""
|
|
715
|
+
Draws all the sectors of :class:`PieCtrl`.
|
|
716
|
+
|
|
717
|
+
:param `dc`: an instance of :class:`wx.DC`.
|
|
718
|
+
"""
|
|
719
|
+
|
|
720
|
+
w, h = self.GetSize()
|
|
721
|
+
|
|
722
|
+
# local opts
|
|
723
|
+
_angle = self._angle
|
|
724
|
+
_rotationangle = self._rotationangle
|
|
725
|
+
_height = self._height
|
|
726
|
+
_canvasDC = self._canvasDC
|
|
727
|
+
wxBrush = wx.Brush
|
|
728
|
+
wxPen = wx.Pen
|
|
729
|
+
wxColour = wx.Colour
|
|
730
|
+
_canvasDC_SetBrush = _canvasDC.SetBrush
|
|
731
|
+
_canvasDC_SetPen = _canvasDC.SetPen
|
|
732
|
+
_canvasDC_GetPen = _canvasDC.GetPen
|
|
733
|
+
_canvasDC_DrawPolygon = _canvasDC.DrawPolygon
|
|
734
|
+
tau = pi * 2
|
|
735
|
+
|
|
736
|
+
_canvasDC.SetBackground(wx.WHITE_BRUSH)
|
|
737
|
+
_canvasDC.Clear()
|
|
738
|
+
|
|
739
|
+
if self._background != wx.NullBitmap:
|
|
740
|
+
## for ii in range(0, w, self._background.GetWidth()):
|
|
741
|
+
## for jj in range(0, h, self._background.GetHeight()):
|
|
742
|
+
## _canvasDC.DrawBitmap(self._background, ii, jj)
|
|
743
|
+
_background = self._background
|
|
744
|
+
bw, bh = _background.GetSize()
|
|
745
|
+
_canvasDC_DrawBitmap = _canvasDC.DrawBitmap
|
|
746
|
+
[_canvasDC_DrawBitmap(_background, ii, jj)
|
|
747
|
+
for jj in range(0, h, bh)
|
|
748
|
+
for ii in range(0, w, bw)]
|
|
749
|
+
else:
|
|
750
|
+
_canvasDC.SetBackground(wxBrush(self._backcolour))
|
|
751
|
+
_canvasDC.Clear()
|
|
752
|
+
|
|
753
|
+
if len(self._series) > 0:
|
|
754
|
+
_series = self._series # local opt
|
|
755
|
+
|
|
756
|
+
if _angle <= pi/2:
|
|
757
|
+
self.DrawParts(_canvasDC, 0, int(_height*cos(_angle)), w, h)
|
|
758
|
+
else:
|
|
759
|
+
self.DrawParts(_canvasDC, 0, 0, w, h)
|
|
760
|
+
|
|
761
|
+
points = [[0, 0]]*4
|
|
762
|
+
triangle = [[0, 0]]*3
|
|
763
|
+
_canvasDC_SetPen(wx.BLACK_PEN)
|
|
764
|
+
angles = self.GetPartAngles()
|
|
765
|
+
angleindex = 0
|
|
766
|
+
c = _series[angleindex].GetColour()
|
|
767
|
+
_canvasDC_SetBrush(wxBrush(wxColour(c.red, c.green, c.blue)))
|
|
768
|
+
changeangle = False
|
|
769
|
+
x = 0.0
|
|
770
|
+
|
|
771
|
+
while x <= tau:
|
|
772
|
+
|
|
773
|
+
changeangle = False
|
|
774
|
+
|
|
775
|
+
if angleindex < len(angles):
|
|
776
|
+
|
|
777
|
+
if x/pi*180.0 >= angles[angleindex+1]:
|
|
778
|
+
|
|
779
|
+
changeangle = True
|
|
780
|
+
x = angles[angleindex+1]*pi/180.0
|
|
781
|
+
|
|
782
|
+
points[0] = points[1]
|
|
783
|
+
px = int(w/2.0*(1+cos(x+_rotationangle)))
|
|
784
|
+
py = int(h/2.0-sin(_angle)*h/2.0*sin(x+_rotationangle)-1)
|
|
785
|
+
points[1] = [px, py]
|
|
786
|
+
triangle[0] = [w // 2, h // 2]
|
|
787
|
+
triangle[1] = points[0]
|
|
788
|
+
triangle[2] = points[1]
|
|
789
|
+
|
|
790
|
+
if x > 0:
|
|
791
|
+
|
|
792
|
+
_canvasDC_SetBrush(wxBrush(_series[angleindex].GetColour()))
|
|
793
|
+
oldPen = _canvasDC_GetPen()
|
|
794
|
+
_canvasDC_SetPen(wxPen(_series[angleindex].GetColour()))
|
|
795
|
+
_canvasDC_DrawPolygon(triangle)
|
|
796
|
+
_canvasDC_SetPen(oldPen)
|
|
797
|
+
|
|
798
|
+
if changeangle:
|
|
799
|
+
|
|
800
|
+
angleindex = angleindex + 1
|
|
801
|
+
|
|
802
|
+
x = x + 0.05
|
|
803
|
+
|
|
804
|
+
points[0] = points[1]
|
|
805
|
+
px = int(w/2.0 * (1+cos(tau+_rotationangle)))
|
|
806
|
+
py = int(h/2.0-sin(_angle)*h/2.0*sin(tau+_rotationangle)-1)
|
|
807
|
+
points[1] = [px, py]
|
|
808
|
+
triangle[0] = [w // 2, h // 2]
|
|
809
|
+
triangle[1] = points[0]
|
|
810
|
+
triangle[2] = points[1]
|
|
811
|
+
|
|
812
|
+
_canvasDC_SetBrush(wxBrush(_series[angleindex].GetColour()))
|
|
813
|
+
oldPen = _canvasDC_GetPen()
|
|
814
|
+
_canvasDC_SetPen(wxPen(_series[angleindex].GetColour()))
|
|
815
|
+
_canvasDC_DrawPolygon(triangle)
|
|
816
|
+
|
|
817
|
+
_canvasDC_SetPen(oldPen)
|
|
818
|
+
angleindex = 0
|
|
819
|
+
|
|
820
|
+
x = 0.0
|
|
821
|
+
|
|
822
|
+
while x <= tau:
|
|
823
|
+
|
|
824
|
+
changeangle = False
|
|
825
|
+
if angleindex < len(angles):
|
|
826
|
+
|
|
827
|
+
if x/pi*180 >= angles[angleindex+1]:
|
|
828
|
+
|
|
829
|
+
changeangle = True
|
|
830
|
+
x = angles[angleindex+1]*pi/180
|
|
831
|
+
|
|
832
|
+
points[0] = points[1]
|
|
833
|
+
points[3] = points[2]
|
|
834
|
+
px = int(w/2.0 * (1+cos(x+_rotationangle)))
|
|
835
|
+
py = int(h/2.0-sin(_angle)*h/2.0*sin(x+_rotationangle)-1)
|
|
836
|
+
points[1] = [px, py]
|
|
837
|
+
points[2] = [px, int(py+_height*cos(_angle))]
|
|
838
|
+
|
|
839
|
+
if w > 0:
|
|
840
|
+
c = _series[angleindex].GetColour()
|
|
841
|
+
v = 1.0-float(px)/w
|
|
842
|
+
curColour = wxColour(int(c.red*v), int(c.green*v), int(c.blue*v))
|
|
843
|
+
|
|
844
|
+
if not self._showedges:
|
|
845
|
+
_canvasDC_SetPen(wxPen(curColour))
|
|
846
|
+
|
|
847
|
+
_canvasDC_SetBrush(wxBrush(curColour))
|
|
848
|
+
|
|
849
|
+
if sin(x+_rotationangle) < 0 and sin(x-0.05+_rotationangle) <= 0 and x > 0:
|
|
850
|
+
_canvasDC_DrawPolygon(points)
|
|
851
|
+
|
|
852
|
+
if changeangle:
|
|
853
|
+
|
|
854
|
+
angleindex = angleindex + 1
|
|
855
|
+
|
|
856
|
+
x = x + 0.05
|
|
857
|
+
|
|
858
|
+
points[0] = points[1]
|
|
859
|
+
points[3] = points[2]
|
|
860
|
+
px = int(w/2.0 * (1+cos(tau+_rotationangle)))
|
|
861
|
+
py = int(h/2.0-sin(_angle)*h/2.0*sin(tau+_rotationangle)-1)
|
|
862
|
+
points[1] = [px, py]
|
|
863
|
+
points[2] = [px, int(py+_height*cos(_angle))]
|
|
864
|
+
|
|
865
|
+
if w > 0:
|
|
866
|
+
c = _series[angleindex].GetColour()
|
|
867
|
+
v = 1.0-float(px)/w
|
|
868
|
+
curColour = wxColour(int(c.red*v), int(c.green*v), int(c.blue*v))
|
|
869
|
+
|
|
870
|
+
if not self._showedges:
|
|
871
|
+
_canvasDC_SetPen(wxPen(curColour))
|
|
872
|
+
|
|
873
|
+
_canvasDC_SetBrush(wxBrush(curColour))
|
|
874
|
+
|
|
875
|
+
if sin(x+_rotationangle) < 0 and sin(x-0.05+_rotationangle) <= 0:
|
|
876
|
+
_canvasDC_DrawPolygon(points)
|
|
877
|
+
|
|
878
|
+
if _angle <= pi/2:
|
|
879
|
+
self.DrawParts(_canvasDC, 0, 0, w, h)
|
|
880
|
+
else:
|
|
881
|
+
self.DrawParts(_canvasDC, 0, int(_height*cos(_angle)), w, h)
|
|
882
|
+
|
|
883
|
+
dc.Blit(0, 0, w, h, _canvasDC, 0, 0)
|
|
884
|
+
self._legend.RecreateBackground(_canvasDC)
|
|
885
|
+
|
|
886
|
+
|
|
887
|
+
def OnPaint(self, event):
|
|
888
|
+
"""
|
|
889
|
+
Handles the ``wx.EVT_PAINT`` event for :class:`PieCtrl`.
|
|
890
|
+
|
|
891
|
+
:param `event`: a :class:`PaintEvent` event to be processed.
|
|
892
|
+
"""
|
|
893
|
+
|
|
894
|
+
pdc = wx.PaintDC(self)
|
|
895
|
+
self.Draw(pdc)
|
|
896
|
+
|
|
897
|
+
|
|
898
|
+
#----------------------------------------------------------------------
|
|
899
|
+
# Class ProgressPie
|
|
900
|
+
# This Is The Main ProgressPie Implementation. Is Is A Subclassing Of
|
|
901
|
+
# PieCtrl, With 2 Sectors.
|
|
902
|
+
#----------------------------------------------------------------------
|
|
903
|
+
|
|
904
|
+
class ProgressPie(PieCtrl):
|
|
905
|
+
"""
|
|
906
|
+
:class:`ProgressPie` tries to emulate the behavior of :class:`ProgressDialog`, but
|
|
907
|
+
using a pie chart instead of a gauge.
|
|
908
|
+
"""
|
|
909
|
+
|
|
910
|
+
def __init__(self, parent, maxvalue, value, id=wx.ID_ANY,
|
|
911
|
+
pos=wx.DefaultPosition, size=wx.DefaultSize, style=0):
|
|
912
|
+
"""
|
|
913
|
+
Default class constructor.
|
|
914
|
+
|
|
915
|
+
:param `parent`: the :class:`PieCtrl` parent. Must not be ``None``;
|
|
916
|
+
:param `id`: window identifier. A value of -1 indicates a default value;
|
|
917
|
+
:param `pos`: the control position. A value of (-1, -1) indicates a default position,
|
|
918
|
+
chosen by either the windowing system or wxPython, depending on platform;
|
|
919
|
+
:param `size`: the control size. A value of (-1, -1) indicates a default size,
|
|
920
|
+
chosen by either the windowing system or wxPython, depending on platform;
|
|
921
|
+
:param `style`: the window style (unused);
|
|
922
|
+
:param `name`: the window name.
|
|
923
|
+
"""
|
|
924
|
+
|
|
925
|
+
PieCtrl.__init__(self, parent, id, pos, size, style)
|
|
926
|
+
|
|
927
|
+
self._maxvalue = maxvalue
|
|
928
|
+
self._value = value
|
|
929
|
+
self.GetLegend().Hide()
|
|
930
|
+
|
|
931
|
+
self._filledcolour = wx.Colour(0, 0, 127)
|
|
932
|
+
self._unfilledcolour = wx.WHITE
|
|
933
|
+
part = PiePart()
|
|
934
|
+
part.SetColour(self._filledcolour)
|
|
935
|
+
a = min(float(value), maxvalue)
|
|
936
|
+
part.SetValue(max(a, 0.0))
|
|
937
|
+
self._series.append(part)
|
|
938
|
+
part = PiePart()
|
|
939
|
+
part.SetColour(self._unfilledcolour)
|
|
940
|
+
part.SetValue(max(0.0, maxvalue-part.GetValue()))
|
|
941
|
+
self._series.append(part)
|
|
942
|
+
|
|
943
|
+
|
|
944
|
+
def SetValue(self, value):
|
|
945
|
+
"""
|
|
946
|
+
Sets the :class:`ProgressPie` value.
|
|
947
|
+
|
|
948
|
+
:param `value`: a floating point number representing the new value.
|
|
949
|
+
"""
|
|
950
|
+
|
|
951
|
+
self._value = min(value, self._maxvalue)
|
|
952
|
+
self._series[0].SetValue(max(self._value, 0.0))
|
|
953
|
+
self._series[1].SetValue(max(self._maxvalue-self._value, 0.0))
|
|
954
|
+
self.Refresh()
|
|
955
|
+
|
|
956
|
+
|
|
957
|
+
def GetValue(self):
|
|
958
|
+
""" Returns the :class:`ProgressPie` value. """
|
|
959
|
+
|
|
960
|
+
return self._value
|
|
961
|
+
|
|
962
|
+
|
|
963
|
+
def SetMaxValue(self, value):
|
|
964
|
+
"""
|
|
965
|
+
Sets the :class:`ProgressPie` maximum value.
|
|
966
|
+
|
|
967
|
+
:param `value`: a floating point number representing the maximum value.
|
|
968
|
+
"""
|
|
969
|
+
|
|
970
|
+
self._maxvalue = value
|
|
971
|
+
self._value = min(self._value, self._maxvalue)
|
|
972
|
+
self._series[0].SetValue(max(self._value, 0.0))
|
|
973
|
+
self._series[1].SetValue(max(self._maxvalue-self._value, 0.0))
|
|
974
|
+
self.Refresh()
|
|
975
|
+
|
|
976
|
+
|
|
977
|
+
def GetMaxValue(self):
|
|
978
|
+
""" Returns the :class:`ProgressPie` maximum value. """
|
|
979
|
+
|
|
980
|
+
return self._maxvalue
|
|
981
|
+
|
|
982
|
+
|
|
983
|
+
def SetFilledColour(self, colour):
|
|
984
|
+
"""
|
|
985
|
+
Sets the colour that progressively fills the :class:`ProgressPie` .
|
|
986
|
+
|
|
987
|
+
:param `colour`: a valid :class:`wx.Colour` object.
|
|
988
|
+
"""
|
|
989
|
+
|
|
990
|
+
self._filledcolour = colour
|
|
991
|
+
self._series[0].SetColour(self._filledcolour)
|
|
992
|
+
self.Refresh()
|
|
993
|
+
|
|
994
|
+
|
|
995
|
+
def SetUnfilledColour(self, colour):
|
|
996
|
+
"""
|
|
997
|
+
Sets the colour that is filled.
|
|
998
|
+
|
|
999
|
+
:param `colour`: a valid :class:`wx.Colour` object.
|
|
1000
|
+
"""
|
|
1001
|
+
|
|
1002
|
+
self._unfilledcolour= colour
|
|
1003
|
+
self._series[1].SetColour(self._unfilledcolour)
|
|
1004
|
+
self.Refresh()
|
|
1005
|
+
|
|
1006
|
+
|
|
1007
|
+
def GetFilledColour(self):
|
|
1008
|
+
""" Returns the colour that progressively fills the :class:`ProgressPie`. """
|
|
1009
|
+
|
|
1010
|
+
return self._filledcolour
|
|
1011
|
+
|
|
1012
|
+
|
|
1013
|
+
def GetUnfilledColour(self):
|
|
1014
|
+
""" Returns the colour that is filled. """
|
|
1015
|
+
|
|
1016
|
+
return self._unfilledcolour
|
|
1017
|
+
|
|
1018
|
+
|
|
1019
|
+
|
|
1020
|
+
if __name__ == '__main__':
|
|
1021
|
+
|
|
1022
|
+
import wx
|
|
1023
|
+
|
|
1024
|
+
class MyFrame(wx.Frame):
|
|
1025
|
+
|
|
1026
|
+
def __init__(self, parent):
|
|
1027
|
+
|
|
1028
|
+
wx.Frame.__init__(self, parent, -1, "PieCtrl Demo")
|
|
1029
|
+
|
|
1030
|
+
panel = wx.Panel(self)
|
|
1031
|
+
|
|
1032
|
+
# create a simple PieCtrl with 3 sectors
|
|
1033
|
+
mypie = PieCtrl(panel, -1, wx.DefaultPosition, wx.Size(180,270))
|
|
1034
|
+
|
|
1035
|
+
part = PiePart()
|
|
1036
|
+
|
|
1037
|
+
part.SetLabel("Label 1")
|
|
1038
|
+
part.SetValue(300)
|
|
1039
|
+
part.SetColour(wx.Colour(200, 50, 50))
|
|
1040
|
+
mypie._series.append(part)
|
|
1041
|
+
|
|
1042
|
+
part = PiePart()
|
|
1043
|
+
|
|
1044
|
+
part.SetLabel("Label 2")
|
|
1045
|
+
part.SetValue(200)
|
|
1046
|
+
part.SetColour(wx.Colour(50, 200, 50))
|
|
1047
|
+
mypie._series.append(part)
|
|
1048
|
+
|
|
1049
|
+
part = PiePart()
|
|
1050
|
+
|
|
1051
|
+
part.SetLabel("helloworld label 3")
|
|
1052
|
+
part.SetValue(50)
|
|
1053
|
+
part.SetColour(wx.Colour(50, 50, 200))
|
|
1054
|
+
mypie._series.append(part)
|
|
1055
|
+
|
|
1056
|
+
# create a ProgressPie
|
|
1057
|
+
progress_pie = ProgressPie(panel, 100, 50, -1, wx.DefaultPosition,
|
|
1058
|
+
wx.Size(180, 200), wx.SIMPLE_BORDER)
|
|
1059
|
+
|
|
1060
|
+
progress_pie.SetBackColour(wx.Colour(150, 200, 255))
|
|
1061
|
+
progress_pie.SetFilledColour(wx.RED)
|
|
1062
|
+
progress_pie.SetUnfilledColour(wx.WHITE)
|
|
1063
|
+
progress_pie.SetHeight(20)
|
|
1064
|
+
|
|
1065
|
+
main_sizer = wx.BoxSizer(wx.HORIZONTAL)
|
|
1066
|
+
|
|
1067
|
+
main_sizer.Add(mypie, 1, wx.EXPAND | wx.ALL, 5)
|
|
1068
|
+
main_sizer.Add(progress_pie, 1, wx.EXPAND | wx.ALL, 5)
|
|
1069
|
+
|
|
1070
|
+
panel.SetSizer(main_sizer)
|
|
1071
|
+
main_sizer.Layout()
|
|
1072
|
+
|
|
1073
|
+
|
|
1074
|
+
# our normal wxApp-derived class, as usual
|
|
1075
|
+
|
|
1076
|
+
app = wx.App(0)
|
|
1077
|
+
|
|
1078
|
+
frame = MyFrame(None)
|
|
1079
|
+
app.SetTopWindow(frame)
|
|
1080
|
+
frame.Show()
|
|
1081
|
+
|
|
1082
|
+
app.MainLoop()
|