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,1157 @@
1
+ # --------------------------------------------------------------------------- #
2
+ # BALLOONTIP wxPython IMPLEMENTATION
3
+ # Python Code By:
4
+ #
5
+ # Andrea Gavana, @ 29 May 2005
6
+ # Latest Revision: 16 Jul 2012, 15.00 GMT
7
+ #
8
+ #
9
+ # TODO List/Caveats
10
+ #
11
+ # 1. With wx.ListBox (And Probably Other Controls), The BalloonTip Sometimes
12
+ # Flashes (It Is Created And Suddenly Destroyed). I Don't Know What Is
13
+ # Happening. Probably I Don't Handle Correctly The wx.EVT_ENTER_WINDOW
14
+ # wx.EVT_LEAVE_WINDOW?
15
+ #
16
+ # 2. wx.RadioBox Seems Not To Receive The wx.EVT_ENTER_WINDOW Event
17
+ #
18
+ # 3. wx.SpinCtrl (And Probably Other Controls), When Put In A Sizer, Does Not
19
+ # Return The Correct Size/Position. Probably Is Something I Am Missing.
20
+ #
21
+ # 4. Other Issues?
22
+ #
23
+ #
24
+ # FIXED Problems
25
+ #
26
+ # 1. Now BalloonTip Control Works Also For TaskBarIcon (Thanks To Everyone
27
+ # For The Suggetions I Read In The wxPython Mailing List)
28
+ #
29
+ #
30
+ # For All Kind Of Problems, Requests Of Enhancements And Bug Reports, Please
31
+ # Write To Me At:
32
+ #
33
+ # andrea.gavana@gmail.com
34
+ # andrea.gavana@maerskoil.com
35
+ #
36
+ # Or, Obviously, To The wxPython Mailing List!!!
37
+ #
38
+ # Tags: phoenix-port, unittest, documented
39
+ #
40
+ # End Of Comments
41
+ # --------------------------------------------------------------------------- #
42
+
43
+ """
44
+ :class:`~wx.lib.agw.balloontip.BalloonTip` is a class that allows you to display tooltips in a balloon style
45
+ window.
46
+
47
+
48
+ Description
49
+ ===========
50
+
51
+ :class:`BalloonTip` is a class that allows you to display tooltips in a balloon style
52
+ window (actually a frame), similarly to the windows XP balloon help. There is
53
+ also an arrow that points to the center of the control designed as a "target"
54
+ for the :class:`BalloonTip`.
55
+
56
+ What it can do:
57
+
58
+ - Set the balloon shape as a rectangle or a rounded rectangle;
59
+ - Set an icon to the top-left of the :class:`BalloonTip` frame;
60
+ - Set a title at the top of the :class:`BalloonTip` frame;
61
+ - Automatic "best" placement of :class:`BalloonTip` frame depending on the target
62
+ control/window position;
63
+ - Runtime customization of title/tip fonts and foreground colours;
64
+ - Runtime change of :class:`BalloonTip` frame shape;
65
+ - Set the balloon background colour;
66
+ - Possibility to set the delay after which the :class:`BalloonTip` is displayed;
67
+ - Possibility to set the delay after which the :class:`BalloonTip` is destroyed;
68
+ - Three different behaviors for the :class:`BalloonTip` window (regardless the delay
69
+ destruction time set):
70
+
71
+ a) Destroy by leave: the :class:`BalloonTip` is destroyed when the mouse leaves the
72
+ target control/window;
73
+ b) Destroy by click: the :class:`BalloonTip` is destroyed when you click on any area
74
+ of the target control/window;
75
+ c) Destroy by button: the :class:`BalloonTip` is destroyed when you click on the
76
+ top-right close button;
77
+ - Possibility to enable/disable globally the :class:`BalloonTip` on you application;
78
+ - Set the :class:`BalloonTip` also for the taskbar icon.
79
+
80
+
81
+ Usage
82
+ =====
83
+
84
+ Usage example::
85
+
86
+ import wx
87
+ import wx.lib.agw.balloontip as BT
88
+
89
+ class MyFrame(wx.Frame):
90
+
91
+ def __init__(self, parent):
92
+
93
+ wx.Frame.__init__(self, parent, -1, "BalloonTip Demo")
94
+
95
+ panel = wx.Panel(self)
96
+
97
+ # Let's suppose that in your application you have a wx.TextCtrl defined as:
98
+ mytextctrl = wx.TextCtrl(panel, -1, "I am a textctrl", pos=(100, 100))
99
+
100
+ # You can define your BalloonTip as follows:
101
+ tipballoon = BT.BalloonTip(topicon=None, toptitle="textctrl",
102
+ message="this is a textctrl",
103
+ shape=BT.BT_ROUNDED,
104
+ tipstyle=BT.BT_LEAVE)
105
+
106
+ # Set the BalloonTip target
107
+ tipballoon.SetTarget(mytextctrl)
108
+ # Set the BalloonTip background colour
109
+ tipballoon.SetBalloonColour(wx.WHITE)
110
+ # Set the font for the balloon title
111
+ tipballoon.SetTitleFont(wx.Font(9, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False))
112
+ # Set the colour for the balloon title
113
+ tipballoon.SetTitleColour(wx.BLACK)
114
+ # Leave the message font as default
115
+ tipballoon.SetMessageFont()
116
+ # Set the message (tip) foreground colour
117
+ tipballoon.SetMessageColour(wx.LIGHT_GREY)
118
+ # Set the start delay for the BalloonTip
119
+ tipballoon.SetStartDelay(1000)
120
+ # Set the time after which the BalloonTip is destroyed
121
+ tipballoon.SetEndDelay(3000)
122
+
123
+ # our normal wxApp-derived class, as usual
124
+
125
+ app = wx.App(0)
126
+
127
+ frame = MyFrame(None)
128
+ app.SetTopWindow(frame)
129
+ frame.Show()
130
+
131
+ app.MainLoop()
132
+
133
+
134
+ Window Styles
135
+ =============
136
+
137
+ This class supports the following window styles:
138
+
139
+ ================ =========== ==================================================
140
+ Window Styles Hex Value Description
141
+ ================ =========== ==================================================
142
+ ``BT_ROUNDED`` 0x1 :class:`BalloonTip` will have a rounded rectangular shape.
143
+ ``BT_RECTANGLE`` 0x2 :class:`BalloonTip` will have a rectangular shape.
144
+ ``BT_LEAVE`` 0x3 :class:`BalloonTip` will be destroyed when the user moves the mouse outside the target window.
145
+ ``BT_CLICK`` 0x4 :class:`BalloonTip` will be destroyed when the user click on :class:`BalloonTip`.
146
+ ``BT_BUTTON`` 0x5 :class:`BalloonTip` will be destroyed when the user click on the close button.
147
+ ================ =========== ==================================================
148
+
149
+
150
+ Events Processing
151
+ =================
152
+
153
+ `No custom events are available for this class.`
154
+
155
+
156
+ License And Version
157
+ ===================
158
+
159
+ BalloonTip is distributed under the wxPython license.
160
+
161
+ Latest revision: Andrea Gavana @ 16 Jul 2012, 15.00 GMT
162
+
163
+ Version 0.3
164
+
165
+ """
166
+
167
+
168
+ import wx
169
+ import time
170
+
171
+ import wx.adv
172
+ from wx.lib.buttons import GenButton
173
+
174
+ # Define The Values For The BalloonTip Frame Shape
175
+ BT_ROUNDED = 1
176
+ """ :class:`BalloonTip` will have a rounded rectangular shape. """
177
+ BT_RECTANGLE = 2
178
+ """ :class:`BalloonTip` will have a rectangular shape. """
179
+
180
+ # Define The Value For The BalloonTip Destruction Behavior
181
+ BT_LEAVE = 3
182
+ """ :class:`BalloonTip` will be destroyed when the user moves the mouse outside the target window. """
183
+ BT_CLICK = 4
184
+ """ :class:`BalloonTip` will be destroyed when the user click on :class:`BalloonTip`. """
185
+ BT_BUTTON = 5
186
+ """ :class:`BalloonTip` will be destroyed when the user click on the close button. """
187
+
188
+
189
+ # ---------------------------------------------------------------
190
+ # Class BalloonFrame
191
+ # ---------------------------------------------------------------
192
+ # This Class Is Called By The Main BalloonTip Class, And It Is
193
+ # Responsible For The Frame Creation/Positioning On Screen
194
+ # Depending On Target Control/Window, The Frame Can Position
195
+ # Itself To NW (Default), NE, SW, SE. The Switch On Positioning
196
+ # Is Done By Calculating The Absolute Position Of The Target
197
+ # Control/Window Plus/Minus The BalloonTip Size. The Pointing
198
+ # Arrow Is Positioned Accordingly.
199
+ # ---------------------------------------------------------------
200
+
201
+ class BalloonFrame(wx.Frame):
202
+ """
203
+ This class is called by the main :class:`BalloonTip` class, and it is
204
+ responsible for the frame creation/positioning on screen
205
+ depending on target control/window, the frame can position
206
+ itself to NW (default), NE, SW, SE. The switch on positioning
207
+ is done by calculating the absolute position of the target
208
+ control/window plus/minus the balloontip size. The pointing
209
+ arrow is positioned accordingly.
210
+ """
211
+ def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition,
212
+ size=wx.DefaultSize, classparent=None):
213
+ """
214
+ Default class constructor.
215
+
216
+ Used internally. Do not call directly this class in your application!
217
+ """
218
+
219
+ wx.Frame.__init__(self, None, -1, "BalloonTip", pos, size,
220
+ style=wx.FRAME_SHAPED |
221
+ wx.SIMPLE_BORDER |
222
+ wx.FRAME_NO_TASKBAR |
223
+ wx.STAY_ON_TOP)
224
+
225
+ self._parent = classparent
226
+ self._toptitle = self._parent._toptitle
227
+ self._topicon = self._parent._topicon
228
+ self._message = self._parent._message
229
+ self._shape = self._parent._shape
230
+ self._tipstyle = self._parent._tipstyle
231
+
232
+ self._ballooncolour = self._parent._ballooncolour
233
+ self._balloonmsgcolour = self._parent._balloonmsgcolour
234
+ self._balloonmsgfont = self._parent._balloonmsgfont
235
+
236
+ if self._toptitle != "":
237
+ self._balloontitlecolour = self._parent._balloontitlecolour
238
+ self._balloontitlefont = self._parent._balloontitlefont
239
+
240
+ panel = wx.Panel(self, -1)
241
+ sizer = wx.BoxSizer(wx.VERTICAL)
242
+
243
+ self.panel = panel
244
+
245
+ subsizer = wx.BoxSizer(wx.VERTICAL)
246
+ hsizer = wx.BoxSizer(wx.HORIZONTAL)
247
+ subsizer.Add((0,20), 0, wx.EXPAND)
248
+
249
+ if self._topicon is not None:
250
+ stb = wx.StaticBitmap(panel, -1, self._topicon)
251
+ hsizer.Add(stb, 0, wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP, 10)
252
+ self._balloonbmp = stb
253
+
254
+ if self._toptitle != "":
255
+ stt = wx.StaticText(panel, -1, self._toptitle)
256
+ stt.SetFont(wx.Font(9, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False))
257
+ if self._topicon is None:
258
+ hsizer.Add((10,0), 0, wx.EXPAND)
259
+
260
+ hsizer.Add(stt, 1, wx.EXPAND | wx.TOP, 10)
261
+
262
+ self._balloontitle = stt
263
+ self._balloontitle.SetForegroundColour(self._balloontitlecolour)
264
+ self._balloontitle.SetFont(self._balloontitlefont)
265
+
266
+ if self._tipstyle == BT_BUTTON:
267
+ self._closebutton = GenButton(panel, -1, "X", style=wx.NO_BORDER)
268
+ self._closebutton.SetMinSize((16,16))
269
+ self._closebutton.SetFont(wx.Font(9, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False))
270
+ self._closebutton.Bind(wx.EVT_ENTER_WINDOW, self.OnEnterButton)
271
+ self._closebutton.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveButton)
272
+ self._closebutton.SetUseFocusIndicator(False)
273
+ if self._toptitle != "":
274
+ hsizer.Add(self._closebutton, 0, wx.TOP | wx.RIGHT, 5)
275
+ else:
276
+ hsizer.Add((10,0), 1, wx.EXPAND)
277
+ hsizer.Add(self._closebutton, 0, wx.ALIGN_RIGHT | wx.TOP
278
+ | wx.RIGHT, 5)
279
+
280
+ if self._topicon is not None or self._toptitle != "" \
281
+ or self._tipstyle == BT_BUTTON:
282
+
283
+ subsizer.Add(hsizer, 0, wx.EXPAND | wx.BOTTOM, 5)
284
+
285
+ self._firstline = line = wx.StaticLine(panel, -1, style=wx.LI_HORIZONTAL)
286
+
287
+ if self._topicon is not None or self._toptitle != "" \
288
+ or self._tipstyle == BT_BUTTON:
289
+ subsizer.Add(self._firstline, 0, wx.EXPAND | wx.LEFT | wx.RIGHT
290
+ | wx.BOTTOM, 10)
291
+ else:
292
+ subsizer.Add(self._firstline, 0, wx.EXPAND | wx.LEFT | wx.RIGHT
293
+ | wx.BOTTOM | wx.TOP, 10)
294
+
295
+ mainstt = wx.StaticText(panel, -1, self._message)
296
+
297
+ self._balloonmsg = mainstt
298
+ self._balloonmsg.SetForegroundColour(self._balloonmsgcolour)
299
+ self._balloonmsg.SetFont(self._balloonmsgfont)
300
+
301
+ subsizer.Add(self._balloonmsg, 1, wx.EXPAND | wx.LEFT | wx.RIGHT |
302
+ wx.BOTTOM, 10)
303
+ self._secondline = wx.StaticLine(panel, -1, style=wx.LI_HORIZONTAL)
304
+ subsizer.Add(self._secondline, 0, wx.EXPAND | wx.LEFT | wx.RIGHT, 10)
305
+ subsizer.Add((0,0),1)
306
+ panel.SetSizer(subsizer)
307
+
308
+ sizer.Add(panel, 1, wx.EXPAND)
309
+ self.SetSizerAndFit(sizer)
310
+ sizer.Layout()
311
+
312
+ if self._tipstyle == BT_CLICK:
313
+ if self._toptitle != "":
314
+ self._balloontitle.Bind(wx.EVT_LEFT_DOWN, self.OnClose)
315
+
316
+ if self._topicon is not None:
317
+ self._balloonbmp.Bind(wx.EVT_LEFT_DOWN, self.OnClose)
318
+
319
+ self._balloonmsg.Bind(wx.EVT_LEFT_DOWN, self.OnClose)
320
+ self.panel.Bind(wx.EVT_LEFT_DOWN, self.OnClose)
321
+
322
+ elif self._tipstyle == BT_BUTTON:
323
+ self._closebutton.Bind(wx.EVT_BUTTON, self.OnClose)
324
+
325
+ self.panel.SetBackgroundColour(self._ballooncolour)
326
+
327
+ if wx.Platform == "__WXGTK__":
328
+ self.Bind(wx.EVT_WINDOW_CREATE, self.SetBalloonShape)
329
+ else:
330
+ self.SetBalloonShape()
331
+
332
+ self.Show(True)
333
+
334
+
335
+ def SetBalloonShape(self, event=None):
336
+ """
337
+ Sets the balloon shape.
338
+
339
+ :param `event`: on wxGTK, a :class:`wx.WindowCreateEvent` event to process.
340
+ """
341
+
342
+ size = self.GetSize()
343
+ pos = self.GetPosition()
344
+
345
+ dc = wx.MemoryDC(wx.Bitmap(1,1))
346
+ textlabel = self._balloonmsg.GetLabel()
347
+ textfont = self._balloonmsg.GetFont()
348
+ textextent = dc.GetFullTextExtent(textlabel, textfont)
349
+
350
+ boxheight = size.y - textextent[1]*len(textlabel.split("\n"))
351
+ boxwidth = size.x
352
+
353
+ position = wx.GetMousePosition()
354
+
355
+ xpos = position[0]
356
+ ypos = position[1]
357
+
358
+ if xpos > 20 and ypos > 20:
359
+
360
+ # This Is NW Positioning
361
+ positioning = "NW"
362
+ xpos = position[0] - boxwidth + 20
363
+ ypos = position[1] - boxheight - 20
364
+
365
+ elif xpos <= 20 and ypos <= 20:
366
+
367
+ # This Is SE Positioning
368
+ positioning = "SE"
369
+ xpos = position[0] - 20
370
+ ypos = position[1]
371
+
372
+ elif xpos > 20 and ypos <= 20:
373
+
374
+ # This Is SW Positioning
375
+ positioning = "SW"
376
+ xpos = position[0] - boxwidth + 20
377
+ ypos = position[1]
378
+
379
+ else:
380
+
381
+ # This Is NE Positioning
382
+ positioning = "NE"
383
+ xpos = position[0]
384
+ ypos = position[1] - boxheight + 20
385
+
386
+ bmp = wx.Bitmap(size.x,size.y)
387
+ dc = wx.BufferedDC(None, bmp)
388
+ dc.SetBackground(wx.BLACK_BRUSH)
389
+ dc.Clear()
390
+ dc.SetPen(wx.Pen(wx.BLACK, 1, wx.PENSTYLE_TRANSPARENT))
391
+
392
+ if self._shape == BT_ROUNDED:
393
+ dc.DrawRoundedRectangle(0, 20, boxwidth, boxheight-20, 12)
394
+
395
+ elif self._shape == BT_RECTANGLE:
396
+ dc.DrawRectangle(0, 20, boxwidth, boxheight-20)
397
+
398
+ if positioning == "NW":
399
+ dc.DrawPolygon(((boxwidth-40, boxheight), (boxwidth-20, boxheight+20),
400
+ (boxwidth-20, boxheight)))
401
+ elif positioning == "SE":
402
+ dc.DrawPolygon(((20, 20), (20, 0), (40, 20)))
403
+
404
+ elif positioning == "SW":
405
+ dc.DrawPolygon(((boxwidth-40, 20), (boxwidth-20, 0), (boxwidth-20, 20)))
406
+
407
+ else:
408
+ dc.DrawPolygon(((20, boxheight), (20, boxheight+20), (40, boxheight)))
409
+
410
+ r = wx.Region(bmp, wx.BLACK)
411
+ self.hasShape = self.SetShape(r)
412
+
413
+ if self._tipstyle == BT_BUTTON:
414
+ colour = self.panel.GetBackgroundColour()
415
+ self._closebutton.SetBackgroundColour(colour)
416
+
417
+ self.SetPosition((xpos, ypos))
418
+
419
+
420
+ def OnEnterButton(self, event):
421
+ """
422
+ Handles the ``wx.EVT_ENTER_WINDOW`` for the :class:`BalloonTip` button.
423
+
424
+ When the :class:`BalloonTip` is created with the `tipstyle` = ``BT_BUTTON``, this event
425
+ provide some kind of 3D effect when the mouse enters the button area.
426
+
427
+ :param `event`: a :class:`MouseEvent` event to be processed.
428
+ """
429
+
430
+ button = event.GetEventObject()
431
+ colour = button.GetBackgroundColour()
432
+ red = colour.Red()
433
+ green = colour.Green()
434
+ blue = colour.Blue()
435
+
436
+ if red < 30:
437
+ red = red + 30
438
+ if green < 30:
439
+ green = green + 30
440
+ if blue < 30:
441
+ blue = blue + 30
442
+
443
+ colour = wx.Colour(red-30, green-30, blue-30)
444
+ button.SetBackgroundColour(colour)
445
+ button.SetForegroundColour(wx.WHITE)
446
+ button.Refresh()
447
+ event.Skip()
448
+
449
+
450
+ def OnLeaveButton(self, event):
451
+ """
452
+ Handles the ``wx.EVT_LEAVE_WINDOW`` for the :class:`BalloonTip` button.
453
+
454
+ When the :class:`BalloonTip` is created with the `tipstyle` = ``BT_BUTTON``, this event
455
+ provide some kind of 3D effect when the mouse enters the button area.
456
+
457
+ :param `event`: a :class:`MouseEvent` event to be processed.
458
+ """
459
+
460
+ button = event.GetEventObject()
461
+ colour = self.panel.GetBackgroundColour()
462
+ button.SetBackgroundColour(colour)
463
+ button.SetForegroundColour(wx.BLACK)
464
+ button.Refresh()
465
+ event.Skip()
466
+
467
+
468
+ def OnClose(self, event):
469
+ """
470
+ Handles the ``wx.EVT_CLOSE`` event for :class:`BalloonTip`.
471
+
472
+ :param `event`: a :class:`CloseEvent` event to be processed.
473
+ """
474
+
475
+ if isinstance(self._parent._widget, wx.adv.TaskBarIcon):
476
+ self._parent.taskbarcreation = 0
477
+ self._parent.taskbartime.Stop()
478
+ del self._parent.taskbartime
479
+ del self._parent.BalloonFrame
480
+
481
+ self.Destroy()
482
+
483
+
484
+ # ---------------------------------------------------------------
485
+ # Class BalloonTip
486
+ # ---------------------------------------------------------------
487
+ # This Is The Main BalloonTip Implementation
488
+ # ---------------------------------------------------------------
489
+
490
+ class BalloonTip(object):
491
+ """
492
+ :class:`BalloonTip` is a class that allows you to display tooltips in a balloon style
493
+ window.
494
+
495
+ This is the main class implementation.
496
+ """
497
+ def __init__(self, topicon=None, toptitle="",
498
+ message="", shape=BT_ROUNDED, tipstyle=BT_LEAVE):
499
+ """
500
+ Default class constructor.
501
+
502
+ :param `topicon`: an icon that will be displayed on the top-left part of the
503
+ :class:`BalloonTip` frame. If set to ``None``, no icon will be displayed;
504
+ :type `topicon`: :class:`wx.Bitmap` or ``None``
505
+ :param string `toptitle`: a title that will be displayed on the top part of the
506
+ :class:`BalloonTip` frame. If set to an empty string, no title will be displayed;
507
+ :param string `message`: the tip message that will be displayed. It can not be set to
508
+ an empty string;
509
+ :param integer `shape`: the :class:`BalloonTip` shape. It can be one of the following:
510
+
511
+ ======================= ========= ====================================
512
+ Shape Flag Hex Value Description
513
+ ======================= ========= ====================================
514
+ ``BT_ROUNDED`` 0x1 :class:`BalloonTip` will have a rounded rectangular shape.
515
+ ``BT_RECTANGLE`` 0x2 :class:`BalloonTip` will have a rectangular shape.
516
+ ======================= ========= ====================================
517
+
518
+ :param integer `tipstyle`: the :class:`BalloonTip` destruction behavior. It can be one of:
519
+
520
+ ======================= ========= ====================================
521
+ Tip Flag Hex Value Description
522
+ ======================= ========= ====================================
523
+ ``BT_LEAVE`` 0x3 :class:`BalloonTip` will be destroyed when the user moves the mouse outside the target window.
524
+ ``BT_CLICK`` 0x4 :class:`BalloonTip` will be destroyed when the user click on :class:`BalloonTip`.
525
+ ``BT_BUTTON`` 0x5 :class:`BalloonTip` will be destroyed when the user click on the close button.
526
+ ======================= ========= ====================================
527
+
528
+ :raise: `Exception` in the following cases:
529
+
530
+ - The `message` parameter is an empty string;
531
+ - The `shape` parameter has an invalid value (i.e., it's not one of ``BT_ROUNDED``, ``BT_RECTANGLE``);
532
+ - The `tipstyle` parameter has an invalid value (i.e., it's not one of ``BT_LEAVE``, ``BT_CLICK``, ``BT_BUTTON``).
533
+
534
+ """
535
+
536
+ self._shape = shape
537
+ self._topicon = topicon
538
+ self._toptitle = toptitle
539
+ self._message = message
540
+ self._tipstyle = tipstyle
541
+
542
+ app = wx.GetApp()
543
+ self._runningapp = app
544
+ self._runningapp.__tooltipenabled__ = True
545
+
546
+ if self._message == "":
547
+ raise Exception("\nERROR: You Should At Least Set The Message For The BalloonTip")
548
+
549
+ if self._shape not in [BT_ROUNDED, BT_RECTANGLE]:
550
+ raise Exception('\nERROR: BalloonTip Shape Should Be One Of "BT_ROUNDED", "BT_RECTANGLE"')
551
+
552
+ if self._tipstyle not in [BT_LEAVE, BT_CLICK, BT_BUTTON]:
553
+ raise Exception('\nERROR: BalloonTip TipStyle Should Be One Of "BT_LEAVE", '\
554
+ '"BT_CLICK", "BT_BUTTON"')
555
+
556
+ self.SetStartDelay()
557
+ self.SetEndDelay()
558
+ self.SetBalloonColour()
559
+
560
+ if toptitle != "":
561
+ self.SetTitleFont()
562
+ self.SetTitleColour()
563
+
564
+ if topicon is not None:
565
+ self.SetBalloonIcon(topicon)
566
+
567
+ self.SetMessageFont()
568
+ self.SetMessageColour()
569
+
570
+
571
+ def SetTarget(self, widget):
572
+ """
573
+ Sets the target control/window for the :class:`BalloonTip`.
574
+
575
+ :param `widget`: any subclass of :class:`wx.Window`.
576
+ """
577
+
578
+ self._widget = widget
579
+
580
+ if isinstance(widget, wx.adv.TaskBarIcon):
581
+ self._widget.Bind(wx.adv.EVT_TASKBAR_MOVE, self.OnTaskBarMove)
582
+ self._widget.Bind(wx.EVT_WINDOW_DESTROY, self.OnDestroy)
583
+ self.taskbarcreation = 0
584
+ else:
585
+ self._widget.Bind(wx.EVT_ENTER_WINDOW, self.OnWidgetEnter)
586
+ self._widget.Bind(wx.EVT_LEAVE_WINDOW, self.OnWidgetLeave)
587
+ self._widget.Bind(wx.EVT_MOTION, self.OnWidgetMotion)
588
+ self._widget.Bind(wx.EVT_WINDOW_DESTROY, self.OnDestroy)
589
+
590
+
591
+ def GetTarget(self):
592
+ """
593
+ Returns the target window for the :class:`BalloonTip`.
594
+
595
+ :return: An instance of :class:`wx.Window`.
596
+
597
+ :raise: `Exception` if the :meth:`~BalloonTip.SetTarget` method has not previously called.
598
+ """
599
+
600
+ if not hasattr(self, "_widget"):
601
+ raise Exception("\nERROR: BalloonTip Target Has Not Been Set")
602
+
603
+ return self._widget
604
+
605
+
606
+ def SetStartDelay(self, delay=1):
607
+ """
608
+ Sets the delay time after which the :class:`BalloonTip` is created.
609
+
610
+ :param integer `delay`: the number of milliseconds after which :class:`BalloonTip` is created.
611
+
612
+ :raise: `Exception` if `delay` is less than ``1`` milliseconds.
613
+ """
614
+
615
+ if delay < 1:
616
+ raise Exception("\nERROR: Delay Time For BalloonTip Creation Should Be Greater Than 1 ms")
617
+
618
+ self._startdelaytime = int(delay)
619
+
620
+
621
+ def GetStartDelay(self):
622
+ """
623
+ Returns the delay time after which the :class:`BalloonTip` is created.
624
+
625
+ :return: the delay time, in milliseconds.
626
+ """
627
+
628
+ return self._startdelaytime
629
+
630
+
631
+ def SetEndDelay(self, delay=1e6):
632
+ """
633
+ Sets the delay time after which the BalloonTip is destroyed.
634
+
635
+ :param integer `delay`: the number of milliseconds after which :class:`BalloonTip` is destroyed.
636
+
637
+ :raise: `Exception` if `delay` is less than ``1`` milliseconds.
638
+ """
639
+
640
+ if delay < 1:
641
+ raise Exception("\nERROR: Delay Time For BalloonTip Destruction Should Be Greater Than 1 ms")
642
+
643
+ self._enddelaytime = int(delay)
644
+
645
+
646
+ def GetEndDelay(self):
647
+ """
648
+ Returns the delay time after which the :class:`BalloonTip` is destroyed.
649
+
650
+ :return: the delay time, in milliseconds.
651
+ """
652
+
653
+ return self._enddelaytime
654
+
655
+
656
+ def OnWidgetEnter(self, event):
657
+ """
658
+ Handles the ``wx.EVT_ENTER_WINDOW`` for the target control/window and
659
+ starts the :class:`BalloonTip` timer for creation.
660
+
661
+ :param `event`: a :class:`MouseEvent` event to be processed.
662
+ """
663
+
664
+ if hasattr(self, "BalloonFrame"):
665
+ if self.BalloonFrame:
666
+ return
667
+
668
+ if not self._runningapp.__tooltipenabled__:
669
+ return
670
+
671
+ self.showtime = wx.Timer(self._widget)
672
+ self._widget.Bind(wx.EVT_TIMER, self.NotifyTimer, self.showtime)
673
+ self.showtime.Start(self._startdelaytime)
674
+
675
+ event.Skip()
676
+
677
+
678
+ def OnWidgetLeave(self, event):
679
+ """
680
+ Handles the ``wx.EVT_LEAVE_WINDOW`` for the target control/window.
681
+
682
+ :param `event`: a :class:`MouseEvent` event to be processed.
683
+
684
+ :note: If the BalloonTip `tipstyle` is set to ``BT_LEAVE``, the :class:`BalloonTip` is destroyed.
685
+ """
686
+
687
+ if hasattr(self, "showtime"):
688
+ if self.showtime:
689
+ self.showtime.Stop()
690
+ del self.showtime
691
+
692
+ if hasattr(self, "BalloonFrame"):
693
+ if self.BalloonFrame:
694
+ if self._tipstyle == BT_LEAVE:
695
+ endtime = time.time()
696
+ if endtime - self.starttime > 0.1:
697
+ try:
698
+ self.BalloonFrame.Destroy()
699
+ except:
700
+ pass
701
+ else:
702
+ event.Skip()
703
+ else:
704
+ event.Skip()
705
+ else:
706
+ event.Skip()
707
+
708
+
709
+ def OnTaskBarMove(self, event):
710
+ """
711
+ Handles the mouse motion inside the taskbar icon area.
712
+
713
+ :param `event`: a :class:`MouseEvent` event to be processed.
714
+ """
715
+
716
+ if not hasattr(self, "BalloonFrame"):
717
+ if self.taskbarcreation == 0:
718
+ self.mousepos = wx.GetMousePosition()
719
+ self.currentmousepos = self.mousepos
720
+ self.taskbartime = wx.Timer(self._widget)
721
+ self._widget.Bind(wx.EVT_TIMER, self.TaskBarTimer, self.taskbartime)
722
+ self.taskbartime.Start(100)
723
+ self.showtime = wx.Timer(self._widget)
724
+ self._widget.Bind(wx.EVT_TIMER, self.NotifyTimer, self.showtime)
725
+ self.showtime.Start(self._startdelaytime)
726
+
727
+ if self.taskbarcreation == 0:
728
+ self.taskbarcreation = 1
729
+
730
+ return
731
+
732
+ event.Skip()
733
+
734
+
735
+ def OnWidgetMotion(self, event):
736
+ """
737
+ Handle the mouse motion inside the target.
738
+
739
+ This prevents the annoying behavior of :class:`BalloonTip` to display when the
740
+ user does something else inside the window. The :class:`BalloonTip` window is
741
+ displayed only when the mouse does *not* move for the start delay time.
742
+
743
+ :param `event`: a :class:`MouseEvent` event to be processed.
744
+ """
745
+
746
+ if hasattr(self, "BalloonFrame"):
747
+ if self.BalloonFrame:
748
+ return
749
+
750
+ if hasattr(self, "showtime"):
751
+ if self.showtime:
752
+ self.showtime.Start(self._startdelaytime)
753
+
754
+ event.Skip()
755
+
756
+
757
+ def NotifyTimer(self, event):
758
+ """
759
+ The creation timer has expired. Creates the :class:`BalloonTip` frame.
760
+
761
+ :param `event`: a :class:`wx.TimerEvent` to be processed.
762
+ """
763
+
764
+ self.BalloonFrame = BalloonFrame(self._widget, classparent=self)
765
+ self.BalloonFrame.Show(True)
766
+ self.starttime = time.time()
767
+
768
+ if hasattr(self, "showtime"):
769
+ self.showtime.Stop()
770
+ del self.showtime
771
+
772
+ self.destroytime = wx.Timer(self._widget)
773
+ self._widget.Bind(wx.EVT_TIMER, self.NotifyTimer, self.destroytime)
774
+ self.destroytime.Start(self._enddelaytime)
775
+
776
+
777
+ def TaskBarTimer(self, event):
778
+ """
779
+ This timer check periodically the mouse position.
780
+
781
+ If the current mouse position is sufficiently far from the coordinates
782
+ it had when entered the taskbar icon and the :class:`BalloonTip` style is
783
+ ``BT_LEAVE``, the :class:`BalloonTip` frame is destroyed.
784
+
785
+ :param `event`: a :class:`wx.TimerEvent` to be processed.
786
+ """
787
+
788
+ self.currentmousepos = wx.GetMousePosition()
789
+ mousepos = self.mousepos
790
+
791
+ if abs(self.currentmousepos[0] - mousepos[0]) > 30 or \
792
+ abs(self.currentmousepos[1] - mousepos[1]) > 30:
793
+ if hasattr(self, "BalloonFrame"):
794
+ if self._tipstyle == BT_LEAVE:
795
+ try:
796
+ self.BalloonFrame.Destroy()
797
+ self.taskbartime.Stop()
798
+ del self.taskbartime
799
+ del self.BalloonFrame
800
+ self.taskbarcreation = 0
801
+ except:
802
+ pass
803
+
804
+
805
+ def DestroyTimer(self, event):
806
+ """
807
+ The destruction timer has expired. Destroys the :class:`BalloonTip` frame.
808
+
809
+ :param `event`: a :class:`wx.TimerEvent` to be processed.
810
+ """
811
+
812
+ self.destroytime.Stop()
813
+ del self.destroytime
814
+
815
+ try:
816
+ self.BalloonFrame.Destroy()
817
+ except:
818
+ pass
819
+
820
+
821
+ def SetBalloonShape(self, shape=BT_ROUNDED):
822
+ """
823
+ Sets the :class:`BalloonTip` frame shape.
824
+
825
+ :param integer `shape`: should be one of ``BT_ROUNDED`` or ``BT_RECTANGLE``.
826
+
827
+ :raise: `Exception` if the `shape` parameter is not a valid value
828
+ (i.e., it's not one of ``BT_ROUNDED``, ``BT_RECTANGLE``);
829
+ """
830
+
831
+ if shape not in [BT_ROUNDED, BT_RECTANGLE]:
832
+ raise Exception('\nERROR: BalloonTip Shape Should Be One Of "BT_ROUNDED", "BT_RECTANGLE"')
833
+
834
+ self._shape = shape
835
+
836
+
837
+ def GetBalloonShape(self):
838
+ """
839
+ Returns the :class:`BalloonTip` frame shape.
840
+
841
+ :return: An integer, one of ``BT_ROUNDED``, ``BT_RECTANGLE``.
842
+ """
843
+
844
+ return self._shape
845
+
846
+
847
+ def SetBalloonIcon(self, icon):
848
+ """
849
+ Sets the :class:`BalloonTip` top-left icon.
850
+
851
+ :param `icon`: an instance of :class:`wx.Bitmap`.
852
+
853
+ :raise: `Exception` if the `icon` bitmap is not a valid :class:`wx.Bitmap`.
854
+ """
855
+
856
+ if icon.IsOk():
857
+ self._topicon = icon
858
+ else:
859
+ raise Exception("\nERROR: Invalid Image Passed To BalloonTip")
860
+
861
+
862
+ def GetBalloonIcon(self):
863
+ """
864
+ Returns the :class:`BalloonTip` top-left icon.
865
+
866
+ :return: An instance of :class:`wx.Bitmap`.
867
+ """
868
+
869
+ return self._topicon
870
+
871
+
872
+ def SetBalloonTitle(self, title=""):
873
+ """
874
+ Sets the :class:`BalloonTip` top title.
875
+
876
+ :param string `title`: a string to use as a :class:`BalloonTip` title.
877
+ """
878
+
879
+ self._toptitle = title
880
+
881
+
882
+ def GetBalloonTitle(self):
883
+ """
884
+ Returns the :class:`BalloonTip` top title.
885
+
886
+ :return: A string containing the top title.
887
+ """
888
+
889
+ return self._toptitle
890
+
891
+
892
+ def SetBalloonMessage(self, message):
893
+ """
894
+ Sets the :class:`BalloonTip` tip message.
895
+
896
+ :param string `message`: a string identifying the main message body of :class:`BalloonTip`.
897
+
898
+ :raise: `Exception` if the message is an empty string.
899
+
900
+ :note: The :class:`BalloonTip` message should never be empty.
901
+ """
902
+
903
+ if len(message.strip()) < 1:
904
+ raise Exception("\nERROR: BalloonTip Message Can Not Be Empty")
905
+
906
+ self._message = message
907
+
908
+
909
+ def GetBalloonMessage(self):
910
+ """
911
+ Returns the :class:`BalloonTip` tip message.
912
+
913
+ :return: A string containing the main message.
914
+ """
915
+
916
+ return self._message
917
+
918
+
919
+ def SetBalloonTipStyle(self, tipstyle=BT_LEAVE):
920
+ """
921
+ Sets the :class:`BalloonTip` `tipstyle` parameter.
922
+
923
+ :param integer `tipstyle`: one of the following bit set:
924
+
925
+ ============== ========== =====================================
926
+ Tip Style Hex Value Description
927
+ ============== ========== =====================================
928
+ ``BT_LEAVE`` 0x3 :class:`BalloonTip` will be destroyed when the user moves the mouse outside the target window.
929
+ ``BT_CLICK`` 0x4 :class:`BalloonTip` will be destroyed when the user click on :class:`BalloonTip`.
930
+ ``BT_BUTTON`` 0x5 :class:`BalloonTip` will be destroyed when the user click on the close button.
931
+ ============== ========== =====================================
932
+
933
+ :raise: `Exception` if the `tipstyle` parameter has an invalid value
934
+ (i.e., it's not one of ``BT_LEAVE``, ``BT_CLICK``, ``BT_BUTTON``).
935
+ """
936
+
937
+ if tipstyle not in [BT_LEAVE, BT_CLICK, BT_BUTTON]:
938
+ raise Exception('\nERROR: BalloonTip TipStyle Should Be One Of "BT_LEAVE", '\
939
+ '"BT_CLICK", "BT_BUTTON"')
940
+
941
+ self._tipstyle = tipstyle
942
+
943
+
944
+ def GetBalloonTipStyle(self):
945
+ """
946
+ Returns the :class:`BalloonTip` `tipstyle` parameter.
947
+
948
+ :return: An integer representing the style.
949
+
950
+ :see: :meth:`~BalloonTip.SetBalloonTipStyle`
951
+ """
952
+
953
+ return self._tipstyle
954
+
955
+
956
+ def SetBalloonColour(self, colour=None):
957
+ """
958
+ Sets the :class:`BalloonTip` background colour.
959
+
960
+ :param `colour`: a valid :class:`wx.Colour` instance.
961
+ """
962
+
963
+ if colour is None:
964
+ colour = wx.Colour(255, 250, 205)
965
+
966
+ self._ballooncolour = colour
967
+
968
+
969
+ def GetBalloonColour(self):
970
+ """
971
+ Returns the :class:`BalloonTip` background colour.
972
+
973
+ :return: An instance of :class:`wx.Colour`.
974
+ """
975
+
976
+ return self._ballooncolour
977
+
978
+
979
+ def SetTitleFont(self, font=None):
980
+ """
981
+ Sets the font for the top title.
982
+
983
+ :param `font`: a valid :class:`wx.Font` instance.
984
+ """
985
+
986
+ if font is None:
987
+ font = wx.Font(9, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False)
988
+
989
+ self._balloontitlefont = font
990
+
991
+
992
+ def GetTitleFont(self):
993
+ """
994
+ Returns the font for the top title.
995
+
996
+ :return: An instance of :class:`wx.Font`.
997
+ """
998
+
999
+ return self._balloontitlefont
1000
+
1001
+
1002
+ def SetMessageFont(self, font=None):
1003
+ """
1004
+ Sets the font for the tip message.
1005
+
1006
+ :param `font`: a valid :class:`wx.Font` instance.
1007
+ """
1008
+
1009
+ if font is None:
1010
+ font = wx.Font(8, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False)
1011
+
1012
+ self._balloonmsgfont = font
1013
+
1014
+
1015
+ def GetMessageFont(self):
1016
+ """
1017
+ Returns the font for the tip message.
1018
+
1019
+ :return: An instance of :class:`wx.Font`.
1020
+ """
1021
+
1022
+ return self._balloonmsgfont
1023
+
1024
+
1025
+ def SetTitleColour(self, colour=None):
1026
+ """
1027
+ Sets the colour for the top title.
1028
+
1029
+ :param `colour`: a valid :class:`wx.Colour` instance.
1030
+ """
1031
+
1032
+ if colour is None:
1033
+ colour = wx.BLACK
1034
+
1035
+ self._balloontitlecolour = colour
1036
+
1037
+
1038
+ def GetTitleColour(self):
1039
+ """
1040
+ Returns the colour for the top title.
1041
+
1042
+ :return: An instance of :class:`wx.Colour`.
1043
+ """
1044
+
1045
+ return self._balloontitlecolour
1046
+
1047
+
1048
+ def SetMessageColour(self, colour=None):
1049
+ """
1050
+ Sets the colour for the tip message.
1051
+
1052
+ :param `colour`: a valid :class:`wx.Colour` instance.
1053
+ """
1054
+
1055
+ if colour is None:
1056
+ colour = wx.BLACK
1057
+
1058
+ self._balloonmsgcolour = colour
1059
+
1060
+
1061
+ def GetMessageColour(self):
1062
+ """
1063
+ Returns the colour for the tip message.
1064
+
1065
+ :return: An instance of :class:`wx.Colour`.
1066
+ """
1067
+
1068
+ return self._balloonmsgcolour
1069
+
1070
+
1071
+ def OnDestroy(self, event):
1072
+ """
1073
+ Handles the target destruction, specifically handling the ``wx.EVT_WINDOW_DESTROY``
1074
+ event.
1075
+
1076
+ :param `event`: a :class:`wx.WindowDestroyEvent` event to be processed.
1077
+ """
1078
+
1079
+ if hasattr(self, "BalloonFrame"):
1080
+ if self.BalloonFrame:
1081
+ try:
1082
+ if isinstance(self._widget, wx.adv.TaskBarIcon):
1083
+ self._widget.Unbind(wx.adv.EVT_TASKBAR_MOVE)
1084
+ self.taskbartime.Stop()
1085
+ del self.taskbartime
1086
+ else:
1087
+ self._widget.Unbind(wx.EVT_MOTION)
1088
+ self._widget.Unbind(wx.EVT_LEAVE_WINDOW)
1089
+ self._widget.Unbind(wx.EVT_ENTER_WINDOW)
1090
+
1091
+ self.BalloonFrame.Destroy()
1092
+
1093
+ except:
1094
+ pass
1095
+
1096
+ del self.BalloonFrame
1097
+
1098
+
1099
+ def EnableTip(self, enable=True):
1100
+ """
1101
+ Enable/disable globally the :class:`BalloonTip`.
1102
+
1103
+ :param bool `enable`: ``True`` to enable :class:`BalloonTip`, ``False`` otherwise.
1104
+ """
1105
+
1106
+ self._runningapp.__tooltipenabled__ = enable
1107
+
1108
+
1109
+ if __name__ == '__main__':
1110
+
1111
+ import wx
1112
+
1113
+ class MyFrame(wx.Frame):
1114
+
1115
+ def __init__(self, parent):
1116
+
1117
+ wx.Frame.__init__(self, parent, -1, "BalloonTip Demo")
1118
+
1119
+ panel = wx.Panel(self)
1120
+
1121
+ # Let's suppose that in your application you have a wx.TextCtrl defined as:
1122
+ mytextctrl = wx.TextCtrl(panel, -1, "I am a textctrl", pos=(100, 100))
1123
+
1124
+ # You can define your BalloonTip as follows:
1125
+ tipballoon = BalloonTip(topicon=None, toptitle="textctrl",
1126
+ message="this is a textctrl",
1127
+ shape=BT_ROUNDED,
1128
+ tipstyle=BT_LEAVE)
1129
+
1130
+ # Set the BalloonTip target
1131
+ tipballoon.SetTarget(mytextctrl)
1132
+ # Set the BalloonTip background colour
1133
+ tipballoon.SetBalloonColour(wx.WHITE)
1134
+ # Set the font for the balloon title
1135
+ tipballoon.SetTitleFont(wx.Font(9, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False))
1136
+ # Set the colour for the balloon title
1137
+ tipballoon.SetTitleColour(wx.BLACK)
1138
+ # Leave the message font as default
1139
+ tipballoon.SetMessageFont()
1140
+ # Set the message (tip) foreground colour
1141
+ tipballoon.SetMessageColour(wx.LIGHT_GREY)
1142
+ # Set the start delay for the BalloonTip
1143
+ tipballoon.SetStartDelay(1000)
1144
+ # Set the time after which the BalloonTip is destroyed
1145
+ tipballoon.SetEndDelay(3000)
1146
+
1147
+ # our normal wxApp-derived class, as usual
1148
+
1149
+ app = wx.App(0)
1150
+
1151
+ frame = MyFrame(None)
1152
+ app.SetTopWindow(frame)
1153
+ frame.Show()
1154
+
1155
+ app.MainLoop()
1156
+
1157
+