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.
Files changed (472) 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_amd64.pyd +0 -0
  7. wx/_aui.cp315-win_amd64.pyd +0 -0
  8. wx/_core.cp315-win_amd64.pyd +0 -0
  9. wx/_dataview.cp315-win_amd64.pyd +0 -0
  10. wx/_glcanvas.cp315-win_amd64.pyd +0 -0
  11. wx/_grid.cp315-win_amd64.pyd +0 -0
  12. wx/_html.cp315-win_amd64.pyd +0 -0
  13. wx/_html2.cp315-win_amd64.pyd +0 -0
  14. wx/_media.cp315-win_amd64.pyd +0 -0
  15. wx/_msw.cp315-win_amd64.pyd +0 -0
  16. wx/_propgrid.cp315-win_amd64.pyd +0 -0
  17. wx/_ribbon.cp315-win_amd64.pyd +0 -0
  18. wx/_richtext.cp315-win_amd64.pyd +0 -0
  19. wx/_stc.cp315-win_amd64.pyd +0 -0
  20. wx/_xml.cp315-win_amd64.pyd +0 -0
  21. wx/_xrc.cp315-win_amd64.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/libcairo-2.dll +0 -0
  330. wx/locale/af/LC_MESSAGES/wxstd.mo +0 -0
  331. wx/locale/an/LC_MESSAGES/wxstd.mo +0 -0
  332. wx/locale/ar/LC_MESSAGES/wxstd.mo +0 -0
  333. wx/locale/ca/LC_MESSAGES/wxstd.mo +0 -0
  334. wx/locale/ca@valencia/LC_MESSAGES/wxstd.mo +0 -0
  335. wx/locale/co/LC_MESSAGES/wxstd.mo +0 -0
  336. wx/locale/cs/LC_MESSAGES/wxstd.mo +0 -0
  337. wx/locale/da/LC_MESSAGES/wxstd.mo +0 -0
  338. wx/locale/de/LC_MESSAGES/wxstd.mo +0 -0
  339. wx/locale/el/LC_MESSAGES/wxstd.mo +0 -0
  340. wx/locale/es/LC_MESSAGES/wxstd.mo +0 -0
  341. wx/locale/eu/LC_MESSAGES/wxstd.mo +0 -0
  342. wx/locale/fa_IR/LC_MESSAGES/wxstd.mo +0 -0
  343. wx/locale/fi/LC_MESSAGES/wxstd.mo +0 -0
  344. wx/locale/fr/LC_MESSAGES/wxstd.mo +0 -0
  345. wx/locale/gl_ES/LC_MESSAGES/wxstd.mo +0 -0
  346. wx/locale/hi/LC_MESSAGES/wxstd.mo +0 -0
  347. wx/locale/hr/LC_MESSAGES/wxstd.mo +0 -0
  348. wx/locale/hu/LC_MESSAGES/wxstd.mo +0 -0
  349. wx/locale/id/LC_MESSAGES/wxstd.mo +0 -0
  350. wx/locale/it/LC_MESSAGES/wxstd.mo +0 -0
  351. wx/locale/ja/LC_MESSAGES/wxstd.mo +0 -0
  352. wx/locale/ka/LC_MESSAGES/wxstd.mo +0 -0
  353. wx/locale/ko_KR/LC_MESSAGES/wxstd.mo +0 -0
  354. wx/locale/lt/LC_MESSAGES/wxstd.mo +0 -0
  355. wx/locale/lv/LC_MESSAGES/wxstd.mo +0 -0
  356. wx/locale/ms/LC_MESSAGES/wxstd.mo +0 -0
  357. wx/locale/nb/LC_MESSAGES/wxstd.mo +0 -0
  358. wx/locale/ne/LC_MESSAGES/wxstd.mo +0 -0
  359. wx/locale/nl/LC_MESSAGES/wxstd.mo +0 -0
  360. wx/locale/pl/LC_MESSAGES/wxstd.mo +0 -0
  361. wx/locale/pt/LC_MESSAGES/wxstd.mo +0 -0
  362. wx/locale/pt_BR/LC_MESSAGES/wxstd.mo +0 -0
  363. wx/locale/ro/LC_MESSAGES/wxstd.mo +0 -0
  364. wx/locale/ru/LC_MESSAGES/wxstd.mo +0 -0
  365. wx/locale/sk/LC_MESSAGES/wxstd.mo +0 -0
  366. wx/locale/sl/LC_MESSAGES/wxstd.mo +0 -0
  367. wx/locale/sq/LC_MESSAGES/wxstd.mo +0 -0
  368. wx/locale/sr/LC_MESSAGES/wxstd.mo +0 -0
  369. wx/locale/sv/LC_MESSAGES/wxstd.mo +0 -0
  370. wx/locale/ta/LC_MESSAGES/wxstd.mo +0 -0
  371. wx/locale/tr/LC_MESSAGES/wxstd.mo +0 -0
  372. wx/locale/uk/LC_MESSAGES/wxstd.mo +0 -0
  373. wx/locale/vi/LC_MESSAGES/wxstd.mo +0 -0
  374. wx/locale/zh_CN/LC_MESSAGES/wxstd.mo +0 -0
  375. wx/locale/zh_TW/LC_MESSAGES/wxstd.mo +0 -0
  376. wx/media.py +30 -0
  377. wx/media.pyi +272 -0
  378. wx/msw.py +16 -0
  379. wx/msw.pyi +91 -0
  380. wx/propgrid.py +498 -0
  381. wx/propgrid.pyi +7427 -0
  382. wx/py/CHANGES.txt +796 -0
  383. wx/py/Py.ico +0 -0
  384. wx/py/PyAlaCarte.py +34 -0
  385. wx/py/PyAlaMode.py +34 -0
  386. wx/py/PyAlaModeTest.py +33 -0
  387. wx/py/PyCrust.ico +0 -0
  388. wx/py/PyCrust.py +78 -0
  389. wx/py/PyCrust_16.png +0 -0
  390. wx/py/PyCrust_32.png +0 -0
  391. wx/py/PyFilling.py +35 -0
  392. wx/py/PyShell.py +78 -0
  393. wx/py/PySlices.ico +0 -0
  394. wx/py/PySlices.py +98 -0
  395. wx/py/PySlicesShell.py +94 -0
  396. wx/py/PySlices_16.png +0 -0
  397. wx/py/PySlices_32.png +0 -0
  398. wx/py/PyWrap.py +52 -0
  399. wx/py/README.txt +77 -0
  400. wx/py/__init__.py +20 -0
  401. wx/py/buffer.py +136 -0
  402. wx/py/crust.py +403 -0
  403. wx/py/crustslices.py +403 -0
  404. wx/py/dispatcher.py +259 -0
  405. wx/py/document.py +37 -0
  406. wx/py/editor.py +844 -0
  407. wx/py/editwindow.py +316 -0
  408. wx/py/filling.py +358 -0
  409. wx/py/frame.py +976 -0
  410. wx/py/images.py +212 -0
  411. wx/py/interpreter.py +161 -0
  412. wx/py/introspect.py +402 -0
  413. wx/py/magic.py +98 -0
  414. wx/py/parse.py +134 -0
  415. wx/py/path.py +36 -0
  416. wx/py/pseudo.py +99 -0
  417. wx/py/shell.py +1579 -0
  418. wx/py/sliceshell.py +3805 -0
  419. wx/py/tests/test_interpreter.py +71 -0
  420. wx/py/tests/test_introspect.py +810 -0
  421. wx/py/tests/test_pseudo.py +70 -0
  422. wx/py/tests/test_version.py +36 -0
  423. wx/py/tests/testall.py +22 -0
  424. wx/py/version.py +7 -0
  425. wx/py.typed +0 -0
  426. wx/ribbon.py +48 -0
  427. wx/ribbon.pyi +3099 -0
  428. wx/richtext.py +141 -0
  429. wx/richtext.pyi +13581 -0
  430. wx/siplib.cp315-win_amd64.pyd +0 -0
  431. wx/siplib.pyi +19 -0
  432. wx/stc.py +59 -0
  433. wx/stc.pyi +9918 -0
  434. wx/svg/__init__.py +363 -0
  435. wx/svg/_nanosvg.cp315-win_amd64.pyd +0 -0
  436. wx/tools/__init__.py +18 -0
  437. wx/tools/dbg.py +268 -0
  438. wx/tools/genaxmodule.py +50 -0
  439. wx/tools/helpviewer.py +92 -0
  440. wx/tools/img2img.py +85 -0
  441. wx/tools/img2png.py +54 -0
  442. wx/tools/img2py.py +306 -0
  443. wx/tools/img2xpm.py +54 -0
  444. wx/tools/pywxrc.py +951 -0
  445. wx/tools/wxget.py +254 -0
  446. wx/tools/wxget_docs_demo.py +183 -0
  447. wx/wxbase334u_net_vc140_x64.dll +0 -0
  448. wx/wxbase334u_vc140_x64.dll +0 -0
  449. wx/wxbase334u_xml_vc140_x64.dll +0 -0
  450. wx/wxmsw334u_adv_vc140_x64.dll +0 -0
  451. wx/wxmsw334u_aui_vc140_x64.dll +0 -0
  452. wx/wxmsw334u_core_vc140_x64.dll +0 -0
  453. wx/wxmsw334u_gl_vc140_x64.dll +0 -0
  454. wx/wxmsw334u_html_vc140_x64.dll +0 -0
  455. wx/wxmsw334u_media_vc140_x64.dll +0 -0
  456. wx/wxmsw334u_propgrid_vc140_x64.dll +0 -0
  457. wx/wxmsw334u_qa_vc140_x64.dll +0 -0
  458. wx/wxmsw334u_ribbon_vc140_x64.dll +0 -0
  459. wx/wxmsw334u_richtext_vc140_x64.dll +0 -0
  460. wx/wxmsw334u_stc_vc140_x64.dll +0 -0
  461. wx/wxmsw334u_webview_vc140_x64.dll +0 -0
  462. wx/wxmsw334u_xrc_vc140_x64.dll +0 -0
  463. wx/xml.py +18 -0
  464. wx/xml.pyi +728 -0
  465. wx/xrc.py +68 -0
  466. wx/xrc.pyi +896 -0
  467. wxpython-4.3.2.dist-info/METADATA +71 -0
  468. wxpython-4.3.2.dist-info/RECORD +472 -0
  469. wxpython-4.3.2.dist-info/WHEEL +5 -0
  470. wxpython-4.3.2.dist-info/entry_points.txt +13 -0
  471. wxpython-4.3.2.dist-info/licenses/LICENSE.txt +610 -0
  472. 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
+ #----------------------------------------------------------------------------