wxPython 4.3.2__cp315-cp315-win_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (471) hide show
  1. wx/WebView2Loader.dll +0 -0
  2. wx/__init__.py +22 -0
  3. wx/__init__.pyi +10 -0
  4. wx/__version__.py +9 -0
  5. wx/__version__.pyi +15 -0
  6. wx/_adv.cp315-win_arm64.pyd +0 -0
  7. wx/_aui.cp315-win_arm64.pyd +0 -0
  8. wx/_core.cp315-win_arm64.pyd +0 -0
  9. wx/_dataview.cp315-win_arm64.pyd +0 -0
  10. wx/_glcanvas.cp315-win_arm64.pyd +0 -0
  11. wx/_grid.cp315-win_arm64.pyd +0 -0
  12. wx/_html.cp315-win_arm64.pyd +0 -0
  13. wx/_html2.cp315-win_arm64.pyd +0 -0
  14. wx/_media.cp315-win_arm64.pyd +0 -0
  15. wx/_msw.cp315-win_arm64.pyd +0 -0
  16. wx/_propgrid.cp315-win_arm64.pyd +0 -0
  17. wx/_ribbon.cp315-win_arm64.pyd +0 -0
  18. wx/_richtext.cp315-win_arm64.pyd +0 -0
  19. wx/_stc.cp315-win_arm64.pyd +0 -0
  20. wx/_xml.cp315-win_arm64.pyd +0 -0
  21. wx/_xrc.cp315-win_arm64.pyd +0 -0
  22. wx/adv.py +127 -0
  23. wx/adv.pyi +5931 -0
  24. wx/aui.py +70 -0
  25. wx/aui.pyi +4805 -0
  26. wx/core.py +3417 -0
  27. wx/core.pyi +62949 -0
  28. wx/dataview.py +176 -0
  29. wx/dataview.pyi +3828 -0
  30. wx/gizmos.py +18 -0
  31. wx/glcanvas.py +13 -0
  32. wx/glcanvas.pyi +544 -0
  33. wx/grid.py +237 -0
  34. wx/grid.pyi +5678 -0
  35. wx/html.py +38 -0
  36. wx/html.pyi +3283 -0
  37. wx/html2.py +46 -0
  38. wx/html2.pyi +1301 -0
  39. wx/include/wxPython/sip.h +1938 -0
  40. wx/include/wxPython/wxpy_api.h +418 -0
  41. wx/lib/CDate.py +201 -0
  42. wx/lib/ClickableHtmlWindow.py +57 -0
  43. wx/lib/__init__.py +0 -0
  44. wx/lib/activex.py +178 -0
  45. wx/lib/activexwrapper.py +153 -0
  46. wx/lib/agw/__init__.py +128 -0
  47. wx/lib/agw/advancedsplash.py +563 -0
  48. wx/lib/agw/aquabutton.py +1127 -0
  49. wx/lib/agw/artmanager.py +2110 -0
  50. wx/lib/agw/aui/__init__.py +295 -0
  51. wx/lib/agw/aui/aui_constants.py +2616 -0
  52. wx/lib/agw/aui/aui_switcherdialog.py +1232 -0
  53. wx/lib/agw/aui/aui_utilities.py +648 -0
  54. wx/lib/agw/aui/auibar.py +4045 -0
  55. wx/lib/agw/aui/auibook.py +6288 -0
  56. wx/lib/agw/aui/dockart.py +1198 -0
  57. wx/lib/agw/aui/framemanager.py +10485 -0
  58. wx/lib/agw/aui/tabart.py +2749 -0
  59. wx/lib/agw/aui/tabmdi.py +679 -0
  60. wx/lib/agw/balloontip.py +1157 -0
  61. wx/lib/agw/buttonpanel.py +2787 -0
  62. wx/lib/agw/cubecolourdialog.py +3529 -0
  63. wx/lib/agw/customtreectrl.py +9908 -0
  64. wx/lib/agw/data/ShortcutEditor_1.png +0 -0
  65. wx/lib/agw/data/ShortcutEditor_1_thumb.png +0 -0
  66. wx/lib/agw/data/ShortcutEditor_2.png +0 -0
  67. wx/lib/agw/data/ShortcutEditor_2_thumb.png +0 -0
  68. wx/lib/agw/data/ShortcutEditor_3.png +0 -0
  69. wx/lib/agw/data/ShortcutEditor_3_thumb.png +0 -0
  70. wx/lib/agw/data/ShortcutEditor_4.png +0 -0
  71. wx/lib/agw/data/ShortcutEditor_4_thumb.png +0 -0
  72. wx/lib/agw/data/default_help_text.html +105 -0
  73. wx/lib/agw/flatmenu.py +7392 -0
  74. wx/lib/agw/flatnotebook.py +6669 -0
  75. wx/lib/agw/floatspin.py +1820 -0
  76. wx/lib/agw/fmcustomizedlg.py +535 -0
  77. wx/lib/agw/fmresources.py +407 -0
  78. wx/lib/agw/foldpanelbar.py +2282 -0
  79. wx/lib/agw/fourwaysplitter.py +1130 -0
  80. wx/lib/agw/genericmessagedialog.py +1549 -0
  81. wx/lib/agw/gradientbutton.py +731 -0
  82. wx/lib/agw/hyperlink.py +664 -0
  83. wx/lib/agw/hypertreelist.py +5756 -0
  84. wx/lib/agw/infobar.py +885 -0
  85. wx/lib/agw/knobctrl.py +944 -0
  86. wx/lib/agw/labelbook.py +3028 -0
  87. wx/lib/agw/multidirdialog.py +581 -0
  88. wx/lib/agw/peakmeter.py +1028 -0
  89. wx/lib/agw/persist/__init__.py +188 -0
  90. wx/lib/agw/persist/persist_constants.py +283 -0
  91. wx/lib/agw/persist/persist_handlers.py +2614 -0
  92. wx/lib/agw/persist/persistencemanager.py +863 -0
  93. wx/lib/agw/piectrl.py +1082 -0
  94. wx/lib/agw/pybusyinfo.py +399 -0
  95. wx/lib/agw/pycollapsiblepane.py +940 -0
  96. wx/lib/agw/pygauge.py +570 -0
  97. wx/lib/agw/pyprogress.py +916 -0
  98. wx/lib/agw/ribbon/__init__.py +198 -0
  99. wx/lib/agw/ribbon/art.py +219 -0
  100. wx/lib/agw/ribbon/art_aui.py +1283 -0
  101. wx/lib/agw/ribbon/art_default.py +81 -0
  102. wx/lib/agw/ribbon/art_internal.py +248 -0
  103. wx/lib/agw/ribbon/art_msw.py +2735 -0
  104. wx/lib/agw/ribbon/art_osx.py +52 -0
  105. wx/lib/agw/ribbon/bar.py +1259 -0
  106. wx/lib/agw/ribbon/buttonbar.py +1317 -0
  107. wx/lib/agw/ribbon/control.py +205 -0
  108. wx/lib/agw/ribbon/gallery.py +973 -0
  109. wx/lib/agw/ribbon/page.py +946 -0
  110. wx/lib/agw/ribbon/panel.py +1170 -0
  111. wx/lib/agw/ribbon/toolbar.py +1441 -0
  112. wx/lib/agw/rulerctrl.py +1885 -0
  113. wx/lib/agw/scrolledthumbnail.py +2116 -0
  114. wx/lib/agw/shapedbutton.py +1809 -0
  115. wx/lib/agw/shortcuteditor.py +2642 -0
  116. wx/lib/agw/speedmeter.py +1800 -0
  117. wx/lib/agw/supertooltip.py +1443 -0
  118. wx/lib/agw/thumbnailctrl.py +529 -0
  119. wx/lib/agw/toasterbox.py +1327 -0
  120. wx/lib/agw/ultimatelistctrl.py +13671 -0
  121. wx/lib/agw/xlsgrid.py +2111 -0
  122. wx/lib/agw/zoombar.py +1336 -0
  123. wx/lib/analogclock/__init__.py +140 -0
  124. wx/lib/analogclock/analogclock.py +630 -0
  125. wx/lib/analogclock/helpers.py +986 -0
  126. wx/lib/analogclock/lib_setup/__init__.py +0 -0
  127. wx/lib/analogclock/lib_setup/buttontreectrlpanel.py +297 -0
  128. wx/lib/analogclock/lib_setup/fontselect.py +57 -0
  129. wx/lib/analogclock/setup.py +490 -0
  130. wx/lib/analogclock/styles.py +47 -0
  131. wx/lib/anchors.py +103 -0
  132. wx/lib/art/__init__.py +4 -0
  133. wx/lib/art/flagart.py +1583 -0
  134. wx/lib/art/img2pyartprov.py +56 -0
  135. wx/lib/busy.py +152 -0
  136. wx/lib/buttons.py +1140 -0
  137. wx/lib/calendar.py +1596 -0
  138. wx/lib/checkbox.py +837 -0
  139. wx/lib/colourchooser/__init__.py +36 -0
  140. wx/lib/colourchooser/canvas.py +145 -0
  141. wx/lib/colourchooser/intl.py +24 -0
  142. wx/lib/colourchooser/pycolourbox.py +89 -0
  143. wx/lib/colourchooser/pycolourchooser.py +626 -0
  144. wx/lib/colourchooser/pycolourslider.py +98 -0
  145. wx/lib/colourchooser/pypalette.py +208 -0
  146. wx/lib/colourdb.py +740 -0
  147. wx/lib/colourselect.py +385 -0
  148. wx/lib/colourutils.py +118 -0
  149. wx/lib/combotreebox.py +944 -0
  150. wx/lib/delayedresult.py +420 -0
  151. wx/lib/dialogs.py +510 -0
  152. wx/lib/docview.py +3210 -0
  153. wx/lib/dragscroller.py +79 -0
  154. wx/lib/editor/README.txt +77 -0
  155. wx/lib/editor/__init__.py +24 -0
  156. wx/lib/editor/editor.py +974 -0
  157. wx/lib/editor/images.py +15 -0
  158. wx/lib/editor/selection.py +44 -0
  159. wx/lib/embeddedimage.py +76 -0
  160. wx/lib/eventStack.py +136 -0
  161. wx/lib/eventwatcher.py +440 -0
  162. wx/lib/evtmgr.py +521 -0
  163. wx/lib/expando.py +393 -0
  164. wx/lib/fancytext.py +494 -0
  165. wx/lib/filebrowsebutton.py +461 -0
  166. wx/lib/flashwin.py +262 -0
  167. wx/lib/flashwin_old.py +651 -0
  168. wx/lib/floatcanvas/FCEvents.py +53 -0
  169. wx/lib/floatcanvas/FCObjects.py +2910 -0
  170. wx/lib/floatcanvas/FloatCanvas.py +1025 -0
  171. wx/lib/floatcanvas/GUIMode.py +396 -0
  172. wx/lib/floatcanvas/NavCanvas.py +162 -0
  173. wx/lib/floatcanvas/Resources.py +319 -0
  174. wx/lib/floatcanvas/ScreenShot.py +1788 -0
  175. wx/lib/floatcanvas/Utilities/BBox.py +313 -0
  176. wx/lib/floatcanvas/Utilities/Colors.py +137 -0
  177. wx/lib/floatcanvas/Utilities/GUI.py +91 -0
  178. wx/lib/floatcanvas/Utilities/__init__.py +7 -0
  179. wx/lib/floatcanvas/__init__.py +124 -0
  180. wx/lib/foldmenu.py +89 -0
  181. wx/lib/gestures.py +310 -0
  182. wx/lib/gizmos/__init__.py +18 -0
  183. wx/lib/gizmos/dynamicsash.py +1202 -0
  184. wx/lib/gizmos/ledctrl.py +299 -0
  185. wx/lib/gizmos/treelistctrl.py +87 -0
  186. wx/lib/graphics.py +1942 -0
  187. wx/lib/gridmovers.py +516 -0
  188. wx/lib/iewin.py +249 -0
  189. wx/lib/iewin_old.py +894 -0
  190. wx/lib/imagebrowser.py +853 -0
  191. wx/lib/imageutils.py +163 -0
  192. wx/lib/infoframe.py +490 -0
  193. wx/lib/inspection.py +1254 -0
  194. wx/lib/intctrl.py +990 -0
  195. wx/lib/itemspicker.py +256 -0
  196. wx/lib/langlistctrl.py +480 -0
  197. wx/lib/layoutf.py +271 -0
  198. wx/lib/masked/__init__.py +27 -0
  199. wx/lib/masked/combobox.py +839 -0
  200. wx/lib/masked/ctrl.py +108 -0
  201. wx/lib/masked/ipaddrctrl.py +241 -0
  202. wx/lib/masked/maskededit.py +7262 -0
  203. wx/lib/masked/numctrl.py +2000 -0
  204. wx/lib/masked/textctrl.py +465 -0
  205. wx/lib/masked/timectrl.py +1465 -0
  206. wx/lib/mixins/__init__.py +17 -0
  207. wx/lib/mixins/grid.py +47 -0
  208. wx/lib/mixins/gridlabelrenderer.py +277 -0
  209. wx/lib/mixins/imagelist.py +77 -0
  210. wx/lib/mixins/inspection.py +184 -0
  211. wx/lib/mixins/listctrl.py +893 -0
  212. wx/lib/mixins/rubberband.py +403 -0
  213. wx/lib/mixins/treemixin.py +678 -0
  214. wx/lib/msgpanel.py +95 -0
  215. wx/lib/multisash.py +746 -0
  216. wx/lib/myole4ax.idl +178 -0
  217. wx/lib/myole4ax.tlb +0 -0
  218. wx/lib/newevent.py +229 -0
  219. wx/lib/newevent.pyi +25 -0
  220. wx/lib/nvdlg.py +156 -0
  221. wx/lib/ogl/__init__.py +13 -0
  222. wx/lib/ogl/basic.py +3989 -0
  223. wx/lib/ogl/bmpshape.py +86 -0
  224. wx/lib/ogl/canvas.py +467 -0
  225. wx/lib/ogl/composit.py +1576 -0
  226. wx/lib/ogl/diagram.py +230 -0
  227. wx/lib/ogl/divided.py +482 -0
  228. wx/lib/ogl/drawn.py +898 -0
  229. wx/lib/ogl/lines.py +1809 -0
  230. wx/lib/ogl/oglmisc.py +607 -0
  231. wx/lib/pdfviewer/__init__.py +113 -0
  232. wx/lib/pdfviewer/bitmaps/ArrowLeft.png +0 -0
  233. wx/lib/pdfviewer/bitmaps/ArrowRight.png +0 -0
  234. wx/lib/pdfviewer/bitmaps/DirectionH.png +0 -0
  235. wx/lib/pdfviewer/bitmaps/DirectionV.png +0 -0
  236. wx/lib/pdfviewer/bitmaps/PlayerFirst.png +0 -0
  237. wx/lib/pdfviewer/bitmaps/PlayerLast.png +0 -0
  238. wx/lib/pdfviewer/bitmaps/PlayerNext.png +0 -0
  239. wx/lib/pdfviewer/bitmaps/PlayerPrev.png +0 -0
  240. wx/lib/pdfviewer/bitmaps/Printer.png +0 -0
  241. wx/lib/pdfviewer/bitmaps/ReadMe.txt +28 -0
  242. wx/lib/pdfviewer/bitmaps/Save.png +0 -0
  243. wx/lib/pdfviewer/bitmaps/ZoomIn.png +0 -0
  244. wx/lib/pdfviewer/bitmaps/ZoomOut.png +0 -0
  245. wx/lib/pdfviewer/bitmaps/encode_bitmaps.py +37 -0
  246. wx/lib/pdfviewer/buttonpanel.py +285 -0
  247. wx/lib/pdfviewer/images.py +240 -0
  248. wx/lib/pdfviewer/viewer.py +1118 -0
  249. wx/lib/pdfwin.py +295 -0
  250. wx/lib/pdfwin_old.py +789 -0
  251. wx/lib/platebtn.py +789 -0
  252. wx/lib/plot/CHANGELOG.md +150 -0
  253. wx/lib/plot/README.md +16 -0
  254. wx/lib/plot/__init__.py +46 -0
  255. wx/lib/plot/__main__.py +5 -0
  256. wx/lib/plot/examples/__init__.py +0 -0
  257. wx/lib/plot/examples/demo.py +1010 -0
  258. wx/lib/plot/examples/simple_example.py +56 -0
  259. wx/lib/plot/plotcanvas.py +2985 -0
  260. wx/lib/plot/polyobjects.py +1524 -0
  261. wx/lib/plot/utils.py +334 -0
  262. wx/lib/popupctl.py +251 -0
  263. wx/lib/printout.py +1155 -0
  264. wx/lib/progressindicator.py +151 -0
  265. wx/lib/pubsub/LICENSE_BSD_Simple.txt +23 -0
  266. wx/lib/pubsub/README_WxPython.txt +22 -0
  267. wx/lib/pubsub/RELEASE_NOTES.txt +71 -0
  268. wx/lib/pubsub/__init__.py +25 -0
  269. wx/lib/pubsub/core/__init__.py +92 -0
  270. wx/lib/pubsub/core/arg1/__init__.py +16 -0
  271. wx/lib/pubsub/core/arg1/listenerimpl.py +97 -0
  272. wx/lib/pubsub/core/arg1/publisher.py +40 -0
  273. wx/lib/pubsub/core/arg1/publishermixin.py +34 -0
  274. wx/lib/pubsub/core/arg1/topicargspecimpl.py +66 -0
  275. wx/lib/pubsub/core/arg1/topicmgrimpl.py +19 -0
  276. wx/lib/pubsub/core/callables.py +198 -0
  277. wx/lib/pubsub/core/imp2.py +62 -0
  278. wx/lib/pubsub/core/itopicdefnprovider.py +0 -0
  279. wx/lib/pubsub/core/kwargs/__init__.py +16 -0
  280. wx/lib/pubsub/core/kwargs/datamsg.py +27 -0
  281. wx/lib/pubsub/core/kwargs/listenerimpl.py +93 -0
  282. wx/lib/pubsub/core/kwargs/publisher.py +77 -0
  283. wx/lib/pubsub/core/kwargs/publishermixin.py +65 -0
  284. wx/lib/pubsub/core/kwargs/topicargspecimpl.py +216 -0
  285. wx/lib/pubsub/core/kwargs/topicmgrimpl.py +13 -0
  286. wx/lib/pubsub/core/listener.py +40 -0
  287. wx/lib/pubsub/core/listenerbase.py +185 -0
  288. wx/lib/pubsub/core/notificationmgr.py +185 -0
  289. wx/lib/pubsub/core/publisherbase.py +189 -0
  290. wx/lib/pubsub/core/topicargspec.py +77 -0
  291. wx/lib/pubsub/core/topicdefnprovider.py +631 -0
  292. wx/lib/pubsub/core/topicexc.py +72 -0
  293. wx/lib/pubsub/core/topicmgr.py +454 -0
  294. wx/lib/pubsub/core/topicobj.py +472 -0
  295. wx/lib/pubsub/core/topictreetraverser.py +143 -0
  296. wx/lib/pubsub/core/topicutils.py +119 -0
  297. wx/lib/pubsub/core/treeconfig.py +21 -0
  298. wx/lib/pubsub/core/validatedefnargs.py +29 -0
  299. wx/lib/pubsub/core/weakmethod.py +102 -0
  300. wx/lib/pubsub/policies.py +24 -0
  301. wx/lib/pubsub/pub.py +199 -0
  302. wx/lib/pubsub/setuparg1.py +47 -0
  303. wx/lib/pubsub/setupkwargs.py +29 -0
  304. wx/lib/pubsub/utils/__init__.py +27 -0
  305. wx/lib/pubsub/utils/exchandling.py +100 -0
  306. wx/lib/pubsub/utils/misc.py +99 -0
  307. wx/lib/pubsub/utils/notification.py +331 -0
  308. wx/lib/pubsub/utils/topictreeprinter.py +195 -0
  309. wx/lib/pubsub/utils/xmltopicdefnprovider.py +286 -0
  310. wx/lib/pydocview.py +3300 -0
  311. wx/lib/rcsizer.py +227 -0
  312. wx/lib/resizewidget.py +357 -0
  313. wx/lib/scrolledpanel.py +243 -0
  314. wx/lib/sheet.py +350 -0
  315. wx/lib/sized_controls.py +691 -0
  316. wx/lib/softwareupdate.py +355 -0
  317. wx/lib/splitter.py +925 -0
  318. wx/lib/statbmp.py +199 -0
  319. wx/lib/stattext.py +321 -0
  320. wx/lib/throbber.py +424 -0
  321. wx/lib/ticker.py +306 -0
  322. wx/lib/ticker_xrc.py +48 -0
  323. wx/lib/utils.py +89 -0
  324. wx/lib/wordwrap.py +97 -0
  325. wx/lib/wxcairo/__init__.py +139 -0
  326. wx/lib/wxcairo/wx_cairocffi.py +200 -0
  327. wx/lib/wxcairo/wx_pycairo.py +455 -0
  328. wx/lib/wxpTag.py +274 -0
  329. wx/locale/af/LC_MESSAGES/wxstd.mo +0 -0
  330. wx/locale/an/LC_MESSAGES/wxstd.mo +0 -0
  331. wx/locale/ar/LC_MESSAGES/wxstd.mo +0 -0
  332. wx/locale/ca/LC_MESSAGES/wxstd.mo +0 -0
  333. wx/locale/ca@valencia/LC_MESSAGES/wxstd.mo +0 -0
  334. wx/locale/co/LC_MESSAGES/wxstd.mo +0 -0
  335. wx/locale/cs/LC_MESSAGES/wxstd.mo +0 -0
  336. wx/locale/da/LC_MESSAGES/wxstd.mo +0 -0
  337. wx/locale/de/LC_MESSAGES/wxstd.mo +0 -0
  338. wx/locale/el/LC_MESSAGES/wxstd.mo +0 -0
  339. wx/locale/es/LC_MESSAGES/wxstd.mo +0 -0
  340. wx/locale/eu/LC_MESSAGES/wxstd.mo +0 -0
  341. wx/locale/fa_IR/LC_MESSAGES/wxstd.mo +0 -0
  342. wx/locale/fi/LC_MESSAGES/wxstd.mo +0 -0
  343. wx/locale/fr/LC_MESSAGES/wxstd.mo +0 -0
  344. wx/locale/gl_ES/LC_MESSAGES/wxstd.mo +0 -0
  345. wx/locale/hi/LC_MESSAGES/wxstd.mo +0 -0
  346. wx/locale/hr/LC_MESSAGES/wxstd.mo +0 -0
  347. wx/locale/hu/LC_MESSAGES/wxstd.mo +0 -0
  348. wx/locale/id/LC_MESSAGES/wxstd.mo +0 -0
  349. wx/locale/it/LC_MESSAGES/wxstd.mo +0 -0
  350. wx/locale/ja/LC_MESSAGES/wxstd.mo +0 -0
  351. wx/locale/ka/LC_MESSAGES/wxstd.mo +0 -0
  352. wx/locale/ko_KR/LC_MESSAGES/wxstd.mo +0 -0
  353. wx/locale/lt/LC_MESSAGES/wxstd.mo +0 -0
  354. wx/locale/lv/LC_MESSAGES/wxstd.mo +0 -0
  355. wx/locale/ms/LC_MESSAGES/wxstd.mo +0 -0
  356. wx/locale/nb/LC_MESSAGES/wxstd.mo +0 -0
  357. wx/locale/ne/LC_MESSAGES/wxstd.mo +0 -0
  358. wx/locale/nl/LC_MESSAGES/wxstd.mo +0 -0
  359. wx/locale/pl/LC_MESSAGES/wxstd.mo +0 -0
  360. wx/locale/pt/LC_MESSAGES/wxstd.mo +0 -0
  361. wx/locale/pt_BR/LC_MESSAGES/wxstd.mo +0 -0
  362. wx/locale/ro/LC_MESSAGES/wxstd.mo +0 -0
  363. wx/locale/ru/LC_MESSAGES/wxstd.mo +0 -0
  364. wx/locale/sk/LC_MESSAGES/wxstd.mo +0 -0
  365. wx/locale/sl/LC_MESSAGES/wxstd.mo +0 -0
  366. wx/locale/sq/LC_MESSAGES/wxstd.mo +0 -0
  367. wx/locale/sr/LC_MESSAGES/wxstd.mo +0 -0
  368. wx/locale/sv/LC_MESSAGES/wxstd.mo +0 -0
  369. wx/locale/ta/LC_MESSAGES/wxstd.mo +0 -0
  370. wx/locale/tr/LC_MESSAGES/wxstd.mo +0 -0
  371. wx/locale/uk/LC_MESSAGES/wxstd.mo +0 -0
  372. wx/locale/vi/LC_MESSAGES/wxstd.mo +0 -0
  373. wx/locale/zh_CN/LC_MESSAGES/wxstd.mo +0 -0
  374. wx/locale/zh_TW/LC_MESSAGES/wxstd.mo +0 -0
  375. wx/media.py +30 -0
  376. wx/media.pyi +272 -0
  377. wx/msw.py +16 -0
  378. wx/msw.pyi +91 -0
  379. wx/propgrid.py +498 -0
  380. wx/propgrid.pyi +7427 -0
  381. wx/py/CHANGES.txt +796 -0
  382. wx/py/Py.ico +0 -0
  383. wx/py/PyAlaCarte.py +34 -0
  384. wx/py/PyAlaMode.py +34 -0
  385. wx/py/PyAlaModeTest.py +33 -0
  386. wx/py/PyCrust.ico +0 -0
  387. wx/py/PyCrust.py +78 -0
  388. wx/py/PyCrust_16.png +0 -0
  389. wx/py/PyCrust_32.png +0 -0
  390. wx/py/PyFilling.py +35 -0
  391. wx/py/PyShell.py +78 -0
  392. wx/py/PySlices.ico +0 -0
  393. wx/py/PySlices.py +98 -0
  394. wx/py/PySlicesShell.py +94 -0
  395. wx/py/PySlices_16.png +0 -0
  396. wx/py/PySlices_32.png +0 -0
  397. wx/py/PyWrap.py +52 -0
  398. wx/py/README.txt +77 -0
  399. wx/py/__init__.py +20 -0
  400. wx/py/buffer.py +136 -0
  401. wx/py/crust.py +403 -0
  402. wx/py/crustslices.py +403 -0
  403. wx/py/dispatcher.py +259 -0
  404. wx/py/document.py +37 -0
  405. wx/py/editor.py +844 -0
  406. wx/py/editwindow.py +316 -0
  407. wx/py/filling.py +358 -0
  408. wx/py/frame.py +976 -0
  409. wx/py/images.py +212 -0
  410. wx/py/interpreter.py +161 -0
  411. wx/py/introspect.py +402 -0
  412. wx/py/magic.py +98 -0
  413. wx/py/parse.py +134 -0
  414. wx/py/path.py +36 -0
  415. wx/py/pseudo.py +99 -0
  416. wx/py/shell.py +1579 -0
  417. wx/py/sliceshell.py +3805 -0
  418. wx/py/tests/test_interpreter.py +71 -0
  419. wx/py/tests/test_introspect.py +810 -0
  420. wx/py/tests/test_pseudo.py +70 -0
  421. wx/py/tests/test_version.py +36 -0
  422. wx/py/tests/testall.py +22 -0
  423. wx/py/version.py +7 -0
  424. wx/py.typed +0 -0
  425. wx/ribbon.py +48 -0
  426. wx/ribbon.pyi +3099 -0
  427. wx/richtext.py +141 -0
  428. wx/richtext.pyi +13581 -0
  429. wx/siplib.cp315-win_arm64.pyd +0 -0
  430. wx/siplib.pyi +19 -0
  431. wx/stc.py +59 -0
  432. wx/stc.pyi +9918 -0
  433. wx/svg/__init__.py +363 -0
  434. wx/svg/_nanosvg.cp315-win_arm64.pyd +0 -0
  435. wx/tools/__init__.py +18 -0
  436. wx/tools/dbg.py +268 -0
  437. wx/tools/genaxmodule.py +50 -0
  438. wx/tools/helpviewer.py +92 -0
  439. wx/tools/img2img.py +85 -0
  440. wx/tools/img2png.py +54 -0
  441. wx/tools/img2py.py +306 -0
  442. wx/tools/img2xpm.py +54 -0
  443. wx/tools/pywxrc.py +951 -0
  444. wx/tools/wxget.py +254 -0
  445. wx/tools/wxget_docs_demo.py +183 -0
  446. wx/wxbase334u_net_vc140_arm64.dll +0 -0
  447. wx/wxbase334u_vc140_arm64.dll +0 -0
  448. wx/wxbase334u_xml_vc140_arm64.dll +0 -0
  449. wx/wxmsw334u_adv_vc140_arm64.dll +0 -0
  450. wx/wxmsw334u_aui_vc140_arm64.dll +0 -0
  451. wx/wxmsw334u_core_vc140_arm64.dll +0 -0
  452. wx/wxmsw334u_gl_vc140_arm64.dll +0 -0
  453. wx/wxmsw334u_html_vc140_arm64.dll +0 -0
  454. wx/wxmsw334u_media_vc140_arm64.dll +0 -0
  455. wx/wxmsw334u_propgrid_vc140_arm64.dll +0 -0
  456. wx/wxmsw334u_qa_vc140_arm64.dll +0 -0
  457. wx/wxmsw334u_ribbon_vc140_arm64.dll +0 -0
  458. wx/wxmsw334u_richtext_vc140_arm64.dll +0 -0
  459. wx/wxmsw334u_stc_vc140_arm64.dll +0 -0
  460. wx/wxmsw334u_webview_vc140_arm64.dll +0 -0
  461. wx/wxmsw334u_xrc_vc140_arm64.dll +0 -0
  462. wx/xml.py +18 -0
  463. wx/xml.pyi +728 -0
  464. wx/xrc.py +68 -0
  465. wx/xrc.pyi +896 -0
  466. wxpython-4.3.2.dist-info/METADATA +71 -0
  467. wxpython-4.3.2.dist-info/RECORD +471 -0
  468. wxpython-4.3.2.dist-info/WHEEL +5 -0
  469. wxpython-4.3.2.dist-info/entry_points.txt +13 -0
  470. wxpython-4.3.2.dist-info/licenses/LICENSE.txt +610 -0
  471. wxpython-4.3.2.dist-info/top_level.txt +1 -0
@@ -0,0 +1,355 @@
1
+ #----------------------------------------------------------------------
2
+ # Name: wx.lib.softwareupdate
3
+ # Purpose: A mixin class using Esky that allows a frozen application
4
+ # to update itself when new versions of the software become
5
+ # available.
6
+ #
7
+ # Author: Robin Dunn
8
+ #
9
+ # Created: 1-Aug-2011
10
+ # Copyright: (c) 2011-2020 by Total Control Software
11
+ # Licence: wxWindows license
12
+ #
13
+ # Tags: py3-port??
14
+ #----------------------------------------------------------------------
15
+
16
+ """
17
+ This module provides a class designed to be mixed with wx.App to form a
18
+ derived class which is able to auto-self-update the application when new
19
+ versions are released. It is built upon the Esky package, available in PyPi at
20
+ http://pypi.python.org/pypi/esky.
21
+
22
+ In order for the software update to work the application must be put into an
23
+ esky bundle using the bdist_esky distutils command, which in turn will use
24
+ py2app, py2exe or etc. to freeze the actual application. See Esky's docs for
25
+ more details. The code in this module will only have effect if the application
26
+ is frozen, and is silently ignored otherwise.
27
+ """
28
+
29
+ import wx
30
+ import sys
31
+ import os
32
+ import atexit
33
+ from urllib.request import urlopen
34
+ from urllib.error import URLError
35
+
36
+ from wx.lib.dialogs import MultiMessageBox
37
+
38
+ isFrozenApp = hasattr(sys, 'frozen')
39
+ if isFrozenApp:
40
+ import esky
41
+ import esky.util
42
+
43
+ # wx 2.8 doesn't have [SG]etAppDisplayname...
44
+ try:
45
+ wx.App.GetAppDisplayName
46
+ except AttributeError:
47
+ wx.App.GetAppDisplayName = wx.App.GetAppName
48
+ wx.App.SetAppDisplayName = wx.App.SetAppName
49
+
50
+
51
+ SOT = 0
52
+ #if 'wxMac' in wx.PlatformInfo:
53
+ # SOT = wx.STAY_ON_TOP
54
+
55
+ #----------------------------------------------------------------------
56
+
57
+
58
+ class UpdateAbortedError(RuntimeError):
59
+ pass
60
+
61
+
62
+ class SoftwareUpdate(object):
63
+ """
64
+ Mix this class with :class:`App` and call :meth:`InitForUpdates` from the derived class'
65
+ OnInit method. Be sure that the :class:`App` has set a display name
66
+ (self.SetAppDisplayName) as that value will be used in the update dialogs.
67
+ """
68
+
69
+ _caption = "Software Update"
70
+ _networkFailureMsg = (
71
+ "Unable to connect to %s to check for updates.\n\n"
72
+ "Perhaps your network is not enabled, the update server is down, or your"
73
+ "firewall is blocking the connection.")
74
+
75
+
76
+ def InitUpdates(self, updatesURL, changelogURL=None, icon=None):
77
+ """
78
+ Set up the Esky object for doing software updates. Passing either the
79
+ base URL (with a trailing '/') for the location of the update
80
+ packages, or an instance of a class derived from the
81
+ esky.finder.VersionFinder class is required. A custom VersionFinder
82
+ can be used to find and fetch the newer version of the software in
83
+ some other way, if desired.
84
+
85
+ Call this method from the app's OnInit method.
86
+ """
87
+ if isFrozenApp:
88
+ self._esky = esky.Esky(sys.executable, updatesURL)
89
+ self._updatesURL = updatesURL
90
+ self._changelogURL = changelogURL
91
+ self._icon = icon
92
+ self._pd = None
93
+ self._checkInProgress = False
94
+ try:
95
+ # get rid of the prior version if it is still here.
96
+ if self._esky.needs_cleanup():
97
+ self._esky.cleanup()
98
+ except:
99
+ pass
100
+ self._fixSysExecutable()
101
+
102
+
103
+ def AutoCheckForUpdate(self, frequencyInDays, parentWindow=None, cfg=None):
104
+ """
105
+ If it has been `frequencyInDays` since the last auto-check then check if
106
+ a software update is available and prompt the user to download and
107
+ install it. This can be called after a application has started up, and
108
+ if there is no update available the user will not be bothered.
109
+ """
110
+ if not isFrozenApp:
111
+ return
112
+ if cfg is None:
113
+ cfg = wx.Config.Get()
114
+ oldPath = cfg.GetPath()
115
+ cfg.SetPath('/autoUpdate')
116
+ lastCheck = cfg.ReadInt('lastCheck', 0)
117
+ lastCheckVersion = cfg.Read('lastCheckVersion', '')
118
+ today = int(wx.DateTime.Today().GetJulianDayNumber())
119
+ active = self._esky.active_version
120
+
121
+ if (today - lastCheck >= frequencyInDays
122
+ or lastCheckVersion != active):
123
+ self.CheckForUpdate(True, parentWindow, cfg)
124
+ cfg.SetPath(oldPath)
125
+
126
+
127
+ def CheckForUpdate(self, silentUnlessUpdate=False, parentWindow=None, cfg=None):
128
+ """
129
+ This method will check for the availability of a new update, and will
130
+ prompt the user with details if there is one there. By default it will
131
+ also tell the user if there is not a new update, but you can pass
132
+ silentUnlessUpdate=True to not bother the user if there isn't a new
133
+ update available.
134
+
135
+ This method should be called from an event handler for a "Check for
136
+ updates" menu item, or something similar. The actual update check
137
+ will be run in a background thread and this function will return
138
+ immediately after starting the thread so the application is not
139
+ blocked if there is network communication problems. A callback to the
140
+ GUI thread will be made to do the update or report problems as
141
+ needed.
142
+ """
143
+ if not isFrozenApp or self._checkInProgress:
144
+ return
145
+ self._checkInProgress = True
146
+
147
+
148
+ def doFindUpdate():
149
+ try:
150
+ newest = self._esky.find_update()
151
+ chLogTxt = ''
152
+ if newest is not None and self._changelogURL:
153
+ with urlopen(self._changelogURL, timeout=4) as req:
154
+ chLogTxt = req.read()
155
+ return (newest, chLogTxt)
156
+
157
+ except URLError:
158
+ return 'URLError'
159
+
160
+
161
+ def processResults(result):
162
+ result = result.get()
163
+ self._checkInProgress = False
164
+ if result == 'URLError':
165
+ if not silentUnlessUpdate:
166
+ MultiMessageBox(
167
+ self._networkFailureMsg % self._updatesURL,
168
+ self._caption, parent=parentWindow, icon=self._icon,
169
+ style=wx.OK|SOT)
170
+ return
171
+
172
+ active = self._esky.active_version
173
+ if cfg:
174
+ oldPath = cfg.GetPath()
175
+ cfg.SetPath('/autoUpdate')
176
+ today = int(wx.DateTime.Today().GetJulianDayNumber())
177
+ cfg.WriteInt('lastCheck', today)
178
+ cfg.Write('lastCheckVersion', active)
179
+ cfg.Flush()
180
+ cfg.SetPath(oldPath)
181
+
182
+ newest, chLogTxt = result
183
+ if newest is None:
184
+ if not silentUnlessUpdate:
185
+ MultiMessageBox("You are already running the newest version of %s." %
186
+ self.GetAppDisplayName(),
187
+ self._caption, parent=parentWindow, icon=self._icon,
188
+ style=wx.OK|SOT)
189
+ return
190
+ self._parentWindow = parentWindow
191
+
192
+ resp = MultiMessageBox("A new version of %s is available.\n\n"
193
+ "You are currently running version %s; version %s is now "
194
+ "available for download. Do you wish to install it now?"
195
+ % (self.GetAppDisplayName(), active, newest),
196
+ self._caption, msg2=chLogTxt, style=wx.YES_NO|SOT,
197
+ parent=parentWindow, icon=self._icon,
198
+ btnLabels={wx.ID_YES:"Yes, install now",
199
+ wx.ID_NO:"No, maybe later"})
200
+ if resp != wx.YES:
201
+ return
202
+
203
+ # Ok, there is a little trickery going on here. We don't know yet if
204
+ # the user wants to restart the application after the update is
205
+ # complete, but since atexit functions are executed in a LIFO order we
206
+ # need to registar our function before we call auto_update and Esky
207
+ # possibly registers its own atexit function, because we want ours to
208
+ # be run *after* theirs. So we'll create an instance of an info object
209
+ # and register its method now, and then fill in the details below
210
+ # once we decide what we want to do.
211
+ class RestartInfo(object):
212
+ def __init__(self):
213
+ self.exe = None
214
+ def restart(self):
215
+ if self.exe is not None:
216
+ # Execute the program, replacing this process
217
+ os.execv(self.exe, [self.exe] + sys.argv[1:])
218
+ info = RestartInfo()
219
+ atexit.register(info.restart)
220
+
221
+ try:
222
+ # Let Esky handle all the rest of the update process so we can
223
+ # take advantage of the error checking and privilege elevation
224
+ # (if necessary) that they have done so we don't have to worry
225
+ # about that ourselves like we would if we broke down the process
226
+ # into component steps.
227
+ self._esky.auto_update(self._updateProgress)
228
+
229
+ except UpdateAbortedError:
230
+ MultiMessageBox("Update canceled.", self._caption,
231
+ parent=parentWindow, icon=self._icon,
232
+ style=wx.OK|SOT)
233
+ if self._pd:
234
+ self._pd.Destroy()
235
+
236
+ self.InitUpdates(self._updatesURL, self._changelogURL, self._icon)
237
+ return
238
+
239
+ # Ask the user if they want the application to be restarted.
240
+ resp = MultiMessageBox("The upgrade to %s %s is ready to use; the application will "
241
+ "need to be restarted to begin using the new release.\n\n"
242
+ "Restart %s now?"
243
+ % (self.GetAppDisplayName(), newest, self.GetAppDisplayName()),
244
+ self._caption, style=wx.YES_NO|SOT,
245
+ parent=parentWindow, icon=self._icon,
246
+ btnLabels={wx.ID_YES:"Yes, restart now",
247
+ wx.ID_NO:"No, I'll restart later"})
248
+
249
+ if resp == wx.YES:
250
+ # Close all windows in this application...
251
+ for w in wx.GetTopLevelWindows():
252
+ if isinstance(w, wx.Dialog):
253
+ w.Destroy()
254
+ elif isinstance(w, wx.Frame):
255
+ w.Close(True) # force close (can't be cancelled)
256
+ wx.Yield()
257
+
258
+ # ...find the path of the esky bootstrap/wrapper program...
259
+ exe = esky.util.appexe_from_executable(sys.executable)
260
+
261
+ # ...and tell our RestartInfo object about it.
262
+ info.exe = exe
263
+
264
+ # Make sure the CWD not in the current version's appdir, so it can
265
+ # hopefully be cleaned up either as we exit or as the next version
266
+ # is starting.
267
+ os.chdir(os.path.dirname(exe))
268
+
269
+ # With all the top level windows closed the MainLoop should exit
270
+ # automatically, but just in case tell it to exit so we can have a
271
+ # normal-as-possible shutdown of this process. Hopefully there
272
+ # isn't anything happening after we return from this function that
273
+ # matters.
274
+ self.ExitMainLoop()
275
+
276
+ return
277
+
278
+ # Start the worker thread that will check for an update, it will call
279
+ # processResults when it is finished.
280
+ import wx.lib.delayedresult as dr
281
+ dr.startWorker(processResults, doFindUpdate)
282
+
283
+
284
+
285
+ def _updateProgress(self, status):
286
+ # Show progress of the download and install. This function is passed to Esky
287
+ # functions to use as a callback.
288
+ if self._pd is None and status.get('status') != 'done':
289
+ self._pd = wx.ProgressDialog('Software Update', ' '*40,
290
+ style=wx.PD_CAN_ABORT|wx.PD_APP_MODAL,
291
+ parent=self._parentWindow)
292
+ self._pd.Update(0, '')
293
+
294
+ if self._parentWindow:
295
+ self._pd.CenterOnParent()
296
+
297
+ simpleMsgMap = { 'searching' : 'Searching...',
298
+ 'retrying' : 'Retrying...',
299
+ 'ready' : 'Download complete...',
300
+ 'installing' : 'Installing...',
301
+ 'cleaning up' : 'Cleaning up...',}
302
+
303
+ if status.get('status') in simpleMsgMap:
304
+ self._doUpdateProgress(True, simpleMsgMap[status.get('status')])
305
+
306
+ elif status.get('status') == 'found':
307
+ self._doUpdateProgress(True, 'Found version %s...' % status.get('new_version'))
308
+
309
+ elif status.get('status') == 'downloading':
310
+ received = status.get('received')
311
+ size = status.get('size')
312
+ currentPercentage = 1.0 * received / size * 100
313
+ if currentPercentage > 99.5:
314
+ self._doUpdateProgress(False, "Unzipping...", int(currentPercentage))
315
+ else:
316
+ self._doUpdateProgress(False, "Downloading...", int(currentPercentage))
317
+
318
+ elif status.get('status') == 'done':
319
+ if self._pd:
320
+ self._pd.Destroy()
321
+ self._pd = None
322
+
323
+ wx.Yield()
324
+
325
+
326
+ def _doUpdateProgress(self, pulse, message, value=0):
327
+ if pulse:
328
+ keepGoing, skip = self._pd.Pulse(message)
329
+ else:
330
+ keepGoing, skip = self._pd.Update(value, message)
331
+ if not keepGoing: # user pressed the cancel button
332
+ self._pd.Destroy()
333
+ self._pd = None
334
+ raise UpdateAbortedError()
335
+
336
+
337
+ def _fixSysExecutable(self):
338
+ # It looks like at least some versions of py2app are setting
339
+ # sys.executable to ApplicationName.app/Contents/MacOS/python instead
340
+ # of ApplicationName.app/Contents/MacOS/applicationname, which is what
341
+ # should be used to relaunch the application. Other freezer tools set
342
+ # sys.executable to the actual executable as expected, so we'll tweak
343
+ # the setting here for Macs too.
344
+ if sys.platform == "darwin" and hasattr(sys, 'frozen') \
345
+ and sys.frozen == 'macosx_app' and sys.executable.endswith('MacOS/python'):
346
+ names = os.listdir(os.path.dirname(sys.executable))
347
+ assert len(names) == 2 # there should be only 2
348
+ for name in names:
349
+ if name != 'python':
350
+ sys.executable = os.path.join(os.path.dirname(sys.executable), name)
351
+ break
352
+
353
+ #----------------------------------------------------------------------
354
+
355
+