wxPython-zombie 3.1.5.8__cp313-cp313-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- wx/__init__.py +22 -0
- wx/__version__.py +9 -0
- wx/_adv.cp313-win_amd64.pyd +0 -0
- wx/_aui.cp313-win_amd64.pyd +0 -0
- wx/_core.cp313-win_amd64.pyd +0 -0
- wx/_dataview.cp313-win_amd64.pyd +0 -0
- wx/_glcanvas.cp313-win_amd64.pyd +0 -0
- wx/_grid.cp313-win_amd64.pyd +0 -0
- wx/_html.cp313-win_amd64.pyd +0 -0
- wx/_html2.cp313-win_amd64.pyd +0 -0
- wx/_media.cp313-win_amd64.pyd +0 -0
- wx/_msw.cp313-win_amd64.pyd +0 -0
- wx/_propgrid.cp313-win_amd64.pyd +0 -0
- wx/_ribbon.cp313-win_amd64.pyd +0 -0
- wx/_richtext.cp313-win_amd64.pyd +0 -0
- wx/_stc.cp313-win_amd64.pyd +0 -0
- wx/_xml.cp313-win_amd64.pyd +0 -0
- wx/_xrc.cp313-win_amd64.pyd +0 -0
- wx/adv.py +124 -0
- wx/adv.pyi +5182 -0
- wx/aui.py +77 -0
- wx/aui.pyi +3655 -0
- wx/core.py +3540 -0
- wx/core.pyi +50592 -0
- wx/dataview.py +173 -0
- wx/dataview.pyi +3491 -0
- wx/demo/AUI_DockingWindowMgr.py +1154 -0
- wx/demo/AUI_MDI.py +117 -0
- wx/demo/AUI_Notebook.py +58 -0
- wx/demo/About.py +75 -0
- wx/demo/AboutBox.py +75 -0
- wx/demo/ActiveXWrapper_Acrobat.py +132 -0
- wx/demo/ActiveXWrapper_IE.py +187 -0
- wx/demo/ActiveX_FlashWindow.py +107 -0
- wx/demo/ActiveX_IEHtmlWindow.py +242 -0
- wx/demo/ActiveX_PDFWindow.py +204 -0
- wx/demo/ActivityIndicator.py +80 -0
- wx/demo/AddPrivateFont.py +116 -0
- wx/demo/AdjustChannels.py +178 -0
- wx/demo/AlphaDrawing.py +77 -0
- wx/demo/AnalogClock.py +144 -0
- wx/demo/AnimationCtrl.py +104 -0
- wx/demo/ArtProvider.py +893 -0
- wx/demo/BannerWindow.py +1 -0
- wx/demo/BitmapButton.py +87 -0
- wx/demo/BitmapComboBox.py +63 -0
- wx/demo/BitmapFromBuffer.py +140 -0
- wx/demo/Button.py +77 -0
- wx/demo/Cairo.py +197 -0
- wx/demo/Cairo_Snippets.py +135 -0
- wx/demo/Calendar.py +660 -0
- wx/demo/CalendarCtrl.py +122 -0
- wx/demo/CheckBox.py +74 -0
- wx/demo/CheckListBox.py +79 -0
- wx/demo/CheckListCtrl.py +99 -0
- wx/demo/Choice.py +55 -0
- wx/demo/Choicebook.py +80 -0
- wx/demo/CollapsibleHeaderCtrl.py +85 -0
- wx/demo/CollapsiblePane.py +126 -0
- wx/demo/ColorPanel.py +19 -0
- wx/demo/ColourDB.py +203 -0
- wx/demo/ColourDialog.py +76 -0
- wx/demo/ColourSelect.py +119 -0
- wx/demo/ComboBox.py +111 -0
- wx/demo/ComboCtrl.py +153 -0
- wx/demo/ComboTreeBox.py +71 -0
- wx/demo/CommandLinkButton.py +50 -0
- wx/demo/ContextHelp.py +112 -0
- wx/demo/Cursor.py +336 -0
- wx/demo/CustomDragAndDrop.py +353 -0
- wx/demo/DVC_CustomRenderer.py +204 -0
- wx/demo/DVC_DataViewModel.py +365 -0
- wx/demo/DVC_IndexListModel.py +257 -0
- wx/demo/DVC_ListCtrl.py +69 -0
- wx/demo/DVC_TreeCtrl.py +76 -0
- wx/demo/DatePickerCtrl.py +68 -0
- wx/demo/DelayedResult.py +239 -0
- wx/demo/Dialog.py +169 -0
- wx/demo/DialogUnits.py +128 -0
- wx/demo/DirDialog.py +58 -0
- wx/demo/DragAndDrop.py +265 -0
- wx/demo/DragImage.py +316 -0
- wx/demo/DragScroller.py +59 -0
- wx/demo/DrawXXXList.py +436 -0
- wx/demo/DynamicSashWindow.py +177 -0
- wx/demo/EditableListBox.py +101 -0
- wx/demo/Editor.py +70 -0
- wx/demo/EventManager.py +291 -0
- wx/demo/ExpandoTextCtrl.py +164 -0
- wx/demo/FancyText.py +83 -0
- wx/demo/FileBrowseButton.py +100 -0
- wx/demo/FileCtrl.py +97 -0
- wx/demo/FileDialog.py +144 -0
- wx/demo/FileHistory.py +140 -0
- wx/demo/FindReplaceDialog.py +123 -0
- wx/demo/FloatCanvas.py +1959 -0
- wx/demo/FontDialog.py +142 -0
- wx/demo/FontEnumerator.py +82 -0
- wx/demo/Frame.py +85 -0
- wx/demo/GLCanvas.py +371 -0
- wx/demo/Gauge.py +66 -0
- wx/demo/GenericButtons.py +185 -0
- wx/demo/GenericCheckBox.py +65 -0
- wx/demo/GenericDirCtrl.py +74 -0
- wx/demo/GetMouseState.py +159 -0
- wx/demo/GraphicsContext.py +236 -0
- wx/demo/GraphicsGradient.py +281 -0
- wx/demo/Grid.py +95 -0
- wx/demo/GridBagSizer.py +170 -0
- wx/demo/GridCustEditor.py +247 -0
- wx/demo/GridCustTable.py +170 -0
- wx/demo/GridDragAndDrop.py +102 -0
- wx/demo/GridDragable.py +206 -0
- wx/demo/GridEnterHandler.py +66 -0
- wx/demo/GridHugeTable.py +89 -0
- wx/demo/GridLabelRenderer.py +114 -0
- wx/demo/GridSimple.py +270 -0
- wx/demo/GridStdEdRend.py +186 -0
- wx/demo/Grid_MegaExample.py +490 -0
- wx/demo/HTML2_WebView.py +183 -0
- wx/demo/HtmlWindow.py +232 -0
- wx/demo/I18N.py +237 -0
- wx/demo/Image.py +338 -0
- wx/demo/ImageAlpha.py +87 -0
- wx/demo/ImageBrowser.py +70 -0
- wx/demo/ImageFromStream.py +49 -0
- wx/demo/Img2PyArtProvider.py +99 -0
- wx/demo/InfoBar.py +127 -0
- wx/demo/IntCtrl.py +343 -0
- wx/demo/ItemsPicker.py +108 -0
- wx/demo/Joystick.py +1083 -0
- wx/demo/KeyEvents.py +428 -0
- wx/demo/LEDNumberCtrl.py +121 -0
- wx/demo/LayoutAnchors.py +258 -0
- wx/demo/LayoutConstraints.py +149 -0
- wx/demo/Layoutf.py +69 -0
- wx/demo/ListBox.py +164 -0
- wx/demo/ListCtrl.py +538 -0
- wx/demo/ListCtrl_edit.py +155 -0
- wx/demo/ListCtrl_virtual.py +145 -0
- wx/demo/Listbook.py +104 -0
- wx/demo/MDIDemo.py +86 -0
- wx/demo/MDISashDemo.py +152 -0
- wx/demo/MDIWindows.py +66 -0
- wx/demo/Main.py +2768 -0
- wx/demo/Mask.py +137 -0
- wx/demo/MaskedEditControls.py +648 -0
- wx/demo/MaskedNumCtrl.py +359 -0
- wx/demo/MediaCtrl.py +190 -0
- wx/demo/Menu.py +322 -0
- wx/demo/MessageDialog.py +54 -0
- wx/demo/MimeTypesManager.py +354 -0
- wx/demo/MiniFrame.py +67 -0
- wx/demo/MouseGestures.py +198 -0
- wx/demo/MultiChoiceDialog.py +59 -0
- wx/demo/MultiSash.py +95 -0
- wx/demo/MultiSplitterWindow.py +168 -0
- wx/demo/MultipleChoiceDialog.py +101 -0
- wx/demo/Notebook.py +134 -0
- wx/demo/NotificationMessage.py +61 -0
- wx/demo/OGL.py +433 -0
- wx/demo/Overlay.py +209 -0
- wx/demo/OwnerDrawnComboBox.py +152 -0
- wx/demo/PDFViewer.py +109 -0
- wx/demo/PageSetupDialog.py +70 -0
- wx/demo/PenAndBrushStyles.py +208 -0
- wx/demo/Pickers.py +120 -0
- wx/demo/PlateButton.py +430 -0
- wx/demo/PopupControl.py +99 -0
- wx/demo/PopupMenu.py +156 -0
- wx/demo/PopupWindow.py +227 -0
- wx/demo/PrintDialog.py +60 -0
- wx/demo/PrintFramework.py +227 -0
- wx/demo/Process.py +168 -0
- wx/demo/ProgressDialog.py +87 -0
- wx/demo/PropertyGrid.py +1045 -0
- wx/demo/PropertySheetDialog.py +231 -0
- wx/demo/PseudoDC.py +350 -0
- wx/demo/PyColourChooser.py +60 -0
- wx/demo/PyCrust.py +21 -0
- wx/demo/PyPlot.py +83 -0
- wx/demo/PyShell.py +22 -0
- wx/demo/PythonEvents.py +109 -0
- wx/demo/README.txt +7 -0
- wx/demo/RadioBox.py +67 -0
- wx/demo/RadioButton.py +127 -0
- wx/demo/RawBitmapAccess.py +208 -0
- wx/demo/RearrangeDialog.py +160 -0
- wx/demo/RendererNative.py +170 -0
- wx/demo/ResizeWidget.py +76 -0
- wx/demo/RichMessageDialog.py +85 -0
- wx/demo/RichTextCtrl.py +732 -0
- wx/demo/RichToolTip.py +145 -0
- wx/demo/SVGImage_Bitmap.py +130 -0
- wx/demo/SVGImage_Render.py +138 -0
- wx/demo/SashWindow.py +151 -0
- wx/demo/ScrolledMessageDialog.py +52 -0
- wx/demo/ScrolledPanel.py +124 -0
- wx/demo/ScrolledWindow.py +260 -0
- wx/demo/SearchCtrl.py +115 -0
- wx/demo/ShapedWindow.py +145 -0
- wx/demo/Simplebook.py +202 -0
- wx/demo/SingleChoiceDialog.py +56 -0
- wx/demo/SizedControls.py +433 -0
- wx/demo/Sizers.py +609 -0
- wx/demo/Slider.py +52 -0
- wx/demo/Sound.py +95 -0
- wx/demo/SpinButton.py +63 -0
- wx/demo/SpinCtrl.py +56 -0
- wx/demo/SpinCtrlDouble.py +42 -0
- wx/demo/SplitTree.py +146 -0
- wx/demo/SplitterWindow.py +62 -0
- wx/demo/StandardPaths.py +113 -0
- wx/demo/StaticBitmap.py +55 -0
- wx/demo/StaticBox.py +62 -0
- wx/demo/StaticText.py +69 -0
- wx/demo/StatusBar.py +144 -0
- wx/demo/StockButtons.py +113 -0
- wx/demo/StyledTextCtrl_1.py +303 -0
- wx/demo/StyledTextCtrl_2.py +410 -0
- wx/demo/SystemSettings.py +333 -0
- wx/demo/TablePrint.py +215 -0
- wx/demo/TestTable.txt +38 -0
- wx/demo/TextCtrl.py +187 -0
- wx/demo/TextEntryDialog.py +57 -0
- wx/demo/Threads.py +258 -0
- wx/demo/Throbber.py +250 -0
- wx/demo/Ticker.py +147 -0
- wx/demo/TimeCtrl.py +240 -0
- wx/demo/TimePickerCtrl.py +60 -0
- wx/demo/Timer.py +275 -0
- wx/demo/ToggleButton.py +54 -0
- wx/demo/ToolBar.py +249 -0
- wx/demo/ToolTip.py +71 -0
- wx/demo/Toolbook.py +111 -0
- wx/demo/TreeCtrl.py +199 -0
- wx/demo/TreeListCtrl.py +121 -0
- wx/demo/TreeMixin.py +269 -0
- wx/demo/Treebook.py +117 -0
- wx/demo/UIActionSimulator.py +151 -0
- wx/demo/URLDragAndDrop.py +130 -0
- wx/demo/Unicode.py +146 -0
- wx/demo/VListBox.py +176 -0
- wx/demo/Validator.py +237 -0
- wx/demo/Wizard.py +248 -0
- wx/demo/WrapSizer.py +115 -0
- wx/demo/XmlResource.py +80 -0
- wx/demo/XmlResourceHandler.py +199 -0
- wx/demo/XmlResourceSubclass.py +119 -0
- wx/demo/__init__.py +9 -0
- wx/demo/agw/AGWInfoBar.py +175 -0
- wx/demo/agw/AUI.py +3058 -0
- wx/demo/agw/AdvancedSplash.py +59 -0
- wx/demo/agw/AquaButton.py +146 -0
- wx/demo/agw/BalloonTip.py +378 -0
- wx/demo/agw/ButtonPanel.py +890 -0
- wx/demo/agw/CubeColourDialog.py +83 -0
- wx/demo/agw/CustomTreeCtrl.py +2167 -0
- wx/demo/agw/Example1 +67 -0
- wx/demo/agw/Example2 +49 -0
- wx/demo/agw/FlatMenu.py +876 -0
- wx/demo/agw/FlatNotebook.py +994 -0
- wx/demo/agw/FloatSpin.py +475 -0
- wx/demo/agw/FoldPanelBar.py +953 -0
- wx/demo/agw/FourWaySplitter.py +300 -0
- wx/demo/agw/GenericMessageDialog.py +207 -0
- wx/demo/agw/GradientButton.py +156 -0
- wx/demo/agw/HyperLinkCtrl.py +144 -0
- wx/demo/agw/HyperTreeList.py +2660 -0
- wx/demo/agw/KnobCtrl.py +186 -0
- wx/demo/agw/LabelBook.py +567 -0
- wx/demo/agw/MacLargeDemo.py +360 -0
- wx/demo/agw/MultiDirDialog.py +117 -0
- wx/demo/agw/PeakMeter.py +194 -0
- wx/demo/agw/PersistentControls.py +589 -0
- wx/demo/agw/PieCtrl.py +206 -0
- wx/demo/agw/PyBusyInfo.py +64 -0
- wx/demo/agw/PyCollapsiblePane.py +308 -0
- wx/demo/agw/PyGauge.py +162 -0
- wx/demo/agw/PyProgress.py +155 -0
- wx/demo/agw/RibbonBar.py +925 -0
- wx/demo/agw/RulerCtrl.py +454 -0
- wx/demo/agw/ScrolledThumbnail.py +128 -0
- wx/demo/agw/ShapedButton.py +603 -0
- wx/demo/agw/ShortcutEditor.py +397 -0
- wx/demo/agw/SpeedMeter.py +668 -0
- wx/demo/agw/SuperToolTip.py +396 -0
- wx/demo/agw/ThumbDemoConfig.py +603 -0
- wx/demo/agw/ThumbnailCtrl.py +149 -0
- wx/demo/agw/ToasterBox.py +410 -0
- wx/demo/agw/UltimateListCtrl.py +80 -0
- wx/demo/agw/UltimateListIconDemo.py +908 -0
- wx/demo/agw/UltimateListListDemo.py +124 -0
- wx/demo/agw/UltimateReportDemo.py +1146 -0
- wx/demo/agw/UltimateVirtualDemo.py +207 -0
- wx/demo/agw/Windows7Explorer_Contents.py +368 -0
- wx/demo/agw/XLSGrid.py +238 -0
- wx/demo/agw/ZoomBar.py +230 -0
- wx/demo/agw/__demo__.py +183 -0
- wx/demo/agw/bitmaps/Explorer96.png +0 -0
- wx/demo/agw/bitmaps/Explorer96Flip40.png +0 -0
- wx/demo/agw/bitmaps/Folder96.png +0 -0
- wx/demo/agw/bitmaps/Folder96Flip40.png +0 -0
- wx/demo/agw/bitmaps/Monitor96.png +0 -0
- wx/demo/agw/bitmaps/Monitor96Flip40.png +0 -0
- wx/demo/agw/bitmaps/Music96.png +0 -0
- wx/demo/agw/bitmaps/Music96Flip40.png +0 -0
- wx/demo/agw/bitmaps/Photo96.png +0 -0
- wx/demo/agw/bitmaps/Photo96Flip40.png +0 -0
- wx/demo/agw/bitmaps/Search96.png +0 -0
- wx/demo/agw/bitmaps/Search96Flip40.png +0 -0
- wx/demo/agw/bitmaps/Wizard96.png +0 -0
- wx/demo/agw/bitmaps/Wizard96Flip40.png +0 -0
- wx/demo/agw/bitmaps/advancedsplash.png +0 -0
- wx/demo/agw/bitmaps/aquabutton.png +0 -0
- wx/demo/agw/bitmaps/aquachecked.ico +0 -0
- wx/demo/agw/bitmaps/aquaflagged.ico +0 -0
- wx/demo/agw/bitmaps/aquanotchecked.ico +0 -0
- wx/demo/agw/bitmaps/aquanotflagged.ico +0 -0
- wx/demo/agw/bitmaps/canada.gif +0 -0
- wx/demo/agw/bitmaps/checked.ico +0 -0
- wx/demo/agw/bitmaps/columns.png +0 -0
- wx/demo/agw/bitmaps/contexthelp-16.png +0 -0
- wx/demo/agw/bitmaps/contexthelp.png +0 -0
- wx/demo/agw/bitmaps/copy.png +0 -0
- wx/demo/agw/bitmaps/cut.png +0 -0
- wx/demo/agw/bitmaps/editcopy.png +0 -0
- wx/demo/agw/bitmaps/editcut.png +0 -0
- wx/demo/agw/bitmaps/editpaste.png +0 -0
- wx/demo/agw/bitmaps/empty_icon.png +0 -0
- wx/demo/agw/bitmaps/exit-16.png +0 -0
- wx/demo/agw/bitmaps/exit.ico +0 -0
- wx/demo/agw/bitmaps/ffwd.png +0 -0
- wx/demo/agw/bitmaps/ffwddisabled.png +0 -0
- wx/demo/agw/bitmaps/field-16.png +0 -0
- wx/demo/agw/bitmaps/filenew.png +0 -0
- wx/demo/agw/bitmaps/fileopen.png +0 -0
- wx/demo/agw/bitmaps/filesave.png +0 -0
- wx/demo/agw/bitmaps/flagged.ico +0 -0
- wx/demo/agw/bitmaps/folder.png +0 -0
- wx/demo/agw/bitmaps/folder_new.png +0 -0
- wx/demo/agw/bitmaps/ghost.png +0 -0
- wx/demo/agw/bitmaps/gradientbutton.png +0 -0
- wx/demo/agw/bitmaps/help-16.png +0 -0
- wx/demo/agw/bitmaps/help.ico +0 -0
- wx/demo/agw/bitmaps/italy.gif +0 -0
- wx/demo/agw/bitmaps/lbadd.png +0 -0
- wx/demo/agw/bitmaps/lbcharge.png +0 -0
- wx/demo/agw/bitmaps/lbdecrypted.png +0 -0
- wx/demo/agw/bitmaps/lbnews.png +0 -0
- wx/demo/agw/bitmaps/lbroll.png +0 -0
- wx/demo/agw/bitmaps/minus1.ico +0 -0
- wx/demo/agw/bitmaps/minus2.ico +0 -0
- wx/demo/agw/bitmaps/minus3.ico +0 -0
- wx/demo/agw/bitmaps/minus4.ico +0 -0
- wx/demo/agw/bitmaps/minus5.ico +0 -0
- wx/demo/agw/bitmaps/month-16.png +0 -0
- wx/demo/agw/bitmaps/new_file.png +0 -0
- wx/demo/agw/bitmaps/new_folder.png +0 -0
- wx/demo/agw/bitmaps/notchecked.ico +0 -0
- wx/demo/agw/bitmaps/notflagged.ico +0 -0
- wx/demo/agw/bitmaps/ok-16.png +0 -0
- wx/demo/agw/bitmaps/open_folder.png +0 -0
- wx/demo/agw/bitmaps/paste.png +0 -0
- wx/demo/agw/bitmaps/pause.png +0 -0
- wx/demo/agw/bitmaps/pausedisabled.png +0 -0
- wx/demo/agw/bitmaps/play.png +0 -0
- wx/demo/agw/bitmaps/playdisabled.png +0 -0
- wx/demo/agw/bitmaps/plus1.ico +0 -0
- wx/demo/agw/bitmaps/plus2.ico +0 -0
- wx/demo/agw/bitmaps/plus3.ico +0 -0
- wx/demo/agw/bitmaps/plus4.ico +0 -0
- wx/demo/agw/bitmaps/plus5.ico +0 -0
- wx/demo/agw/bitmaps/record.png +0 -0
- wx/demo/agw/bitmaps/recorddisabled.png +0 -0
- wx/demo/agw/bitmaps/recording.gif +0 -0
- wx/demo/agw/bitmaps/rewind.png +0 -0
- wx/demo/agw/bitmaps/rewinddisabled.png +0 -0
- wx/demo/agw/bitmaps/round.png +0 -0
- wx/demo/agw/bitmaps/save.png +0 -0
- wx/demo/agw/bitmaps/separator.gif +0 -0
- wx/demo/agw/bitmaps/separatorflip.png +0 -0
- wx/demo/agw/bitmaps/smfuel.ico +0 -0
- wx/demo/agw/bitmaps/smpi.ico +0 -0
- wx/demo/agw/bitmaps/smtemp.ico +0 -0
- wx/demo/agw/bitmaps/stop.png +0 -0
- wx/demo/agw/bitmaps/stopdisabled.png +0 -0
- wx/demo/agw/bitmaps/sttbutton.png +0 -0
- wx/demo/agw/bitmaps/sttfont.png +0 -0
- wx/demo/agw/bitmaps/sttheader.png +0 -0
- wx/demo/agw/bitmaps/stthelp.png +0 -0
- wx/demo/agw/bitmaps/view1.png +0 -0
- wx/demo/agw/bitmaps/view2.png +0 -0
- wx/demo/agw/bitmaps/view_choose.png +0 -0
- wx/demo/agw/bitmaps/view_detailed.png +0 -0
- wx/demo/agw/bitmaps/view_icon.png +0 -0
- wx/demo/agw/bitmaps/view_multicolumn.png +0 -0
- wx/demo/agw/bitmaps/viewmag-16.png +0 -0
- wx/demo/agw/bitmaps/viewmag-m-16.png +0 -0
- wx/demo/agw/bitmaps/viewmag-p-16.png +0 -0
- wx/demo/agw/bitmaps/viewmagfit-16.png +0 -0
- wx/demo/agw/data/Example_1.xls +0 -0
- wx/demo/agw/images.py +6714 -0
- wx/demo/bitmaps/AG00028_.gif +0 -0
- wx/demo/bitmaps/AG00039_.gif +0 -0
- wx/demo/bitmaps/AG00178_.gif +0 -0
- wx/demo/bitmaps/AG00183_.gif +0 -0
- wx/demo/bitmaps/AG00185_.gif +0 -0
- wx/demo/bitmaps/BD13656_.gif +0 -0
- wx/demo/bitmaps/advancedsplash.png +0 -0
- wx/demo/bitmaps/aquabutton.png +0 -0
- wx/demo/bitmaps/aquachecked.ico +0 -0
- wx/demo/bitmaps/aquaflagged.ico +0 -0
- wx/demo/bitmaps/aquanotchecked.ico +0 -0
- wx/demo/bitmaps/aquanotflagged.ico +0 -0
- wx/demo/bitmaps/canada.gif +0 -0
- wx/demo/bitmaps/checked.ico +0 -0
- wx/demo/bitmaps/columns.png +0 -0
- wx/demo/bitmaps/contexthelp-16.png +0 -0
- wx/demo/bitmaps/contexthelp.png +0 -0
- wx/demo/bitmaps/copy.png +0 -0
- wx/demo/bitmaps/cropshot24x20.png +0 -0
- wx/demo/bitmaps/cut.png +0 -0
- wx/demo/bitmaps/editcopy.png +0 -0
- wx/demo/bitmaps/editcut.png +0 -0
- wx/demo/bitmaps/editpaste.png +0 -0
- wx/demo/bitmaps/exit-16.png +0 -0
- wx/demo/bitmaps/exit.ico +0 -0
- wx/demo/bitmaps/ffwd.png +0 -0
- wx/demo/bitmaps/ffwddisabled.png +0 -0
- wx/demo/bitmaps/field-16.png +0 -0
- wx/demo/bitmaps/filenew.png +0 -0
- wx/demo/bitmaps/fileopen.png +0 -0
- wx/demo/bitmaps/filesave.png +0 -0
- wx/demo/bitmaps/flagged.ico +0 -0
- wx/demo/bitmaps/folder_new.png +0 -0
- wx/demo/bitmaps/ghost.png +0 -0
- wx/demo/bitmaps/gradientbutton.png +0 -0
- wx/demo/bitmaps/help-16.png +0 -0
- wx/demo/bitmaps/help.ico +0 -0
- wx/demo/bitmaps/honeycomb300.png +0 -0
- wx/demo/bitmaps/image.bmp +0 -0
- wx/demo/bitmaps/image.gif +0 -0
- wx/demo/bitmaps/image.ico +0 -0
- wx/demo/bitmaps/image.jpg +0 -0
- wx/demo/bitmaps/image.png +0 -0
- wx/demo/bitmaps/image.tif +0 -0
- wx/demo/bitmaps/italy.gif +0 -0
- wx/demo/bitmaps/lbadd.png +0 -0
- wx/demo/bitmaps/lbcharge.png +0 -0
- wx/demo/bitmaps/lbdecrypted.png +0 -0
- wx/demo/bitmaps/lbnews.png +0 -0
- wx/demo/bitmaps/lbroll.png +0 -0
- wx/demo/bitmaps/minus1.ico +0 -0
- wx/demo/bitmaps/minus2.ico +0 -0
- wx/demo/bitmaps/minus3.ico +0 -0
- wx/demo/bitmaps/minus4.ico +0 -0
- wx/demo/bitmaps/minus5.ico +0 -0
- wx/demo/bitmaps/month-16.png +0 -0
- wx/demo/bitmaps/new_file.png +0 -0
- wx/demo/bitmaps/new_folder.png +0 -0
- wx/demo/bitmaps/notchecked.ico +0 -0
- wx/demo/bitmaps/notflagged.ico +0 -0
- wx/demo/bitmaps/ok-16.png +0 -0
- wx/demo/bitmaps/open_folder.png +0 -0
- wx/demo/bitmaps/paste.png +0 -0
- wx/demo/bitmaps/pause.png +0 -0
- wx/demo/bitmaps/pausedisabled.png +0 -0
- wx/demo/bitmaps/phoenix_title.png +0 -0
- wx/demo/bitmaps/phoenix_top.png +0 -0
- wx/demo/bitmaps/play.png +0 -0
- wx/demo/bitmaps/playdisabled.png +0 -0
- wx/demo/bitmaps/plus1.ico +0 -0
- wx/demo/bitmaps/plus2.ico +0 -0
- wx/demo/bitmaps/plus3.ico +0 -0
- wx/demo/bitmaps/plus4.ico +0 -0
- wx/demo/bitmaps/plus5.ico +0 -0
- wx/demo/bitmaps/record.png +0 -0
- wx/demo/bitmaps/recorddisabled.png +0 -0
- wx/demo/bitmaps/rewind.png +0 -0
- wx/demo/bitmaps/rewinddisabled.png +0 -0
- wx/demo/bitmaps/round.png +0 -0
- wx/demo/bitmaps/save.png +0 -0
- wx/demo/bitmaps/smfuel.ico +0 -0
- wx/demo/bitmaps/smpi.ico +0 -0
- wx/demo/bitmaps/smtemp.ico +0 -0
- wx/demo/bitmaps/snakey_render.png +0 -0
- wx/demo/bitmaps/splash.png +0 -0
- wx/demo/bitmaps/stop.png +0 -0
- wx/demo/bitmaps/stopdisabled.png +0 -0
- wx/demo/bitmaps/sttbutton.png +0 -0
- wx/demo/bitmaps/sttfont.png +0 -0
- wx/demo/bitmaps/sttheader.png +0 -0
- wx/demo/bitmaps/stthelp.png +0 -0
- wx/demo/bitmaps/toucan.png +0 -0
- wx/demo/bitmaps/view1.png +0 -0
- wx/demo/bitmaps/view2.png +0 -0
- wx/demo/bitmaps/view_choose.png +0 -0
- wx/demo/bitmaps/view_detailed.png +0 -0
- wx/demo/bitmaps/view_icon.png +0 -0
- wx/demo/bitmaps/view_multicolumn.png +0 -0
- wx/demo/bitmaps/viewmag-16.png +0 -0
- wx/demo/bitmaps/viewmag-m-16.png +0 -0
- wx/demo/bitmaps/viewmag-p-16.png +0 -0
- wx/demo/bitmaps/viewmagfit-16.png +0 -0
- wx/demo/bmp_source/001.png +0 -0
- wx/demo/bmp_source/002.png +0 -0
- wx/demo/bmp_source/003.png +0 -0
- wx/demo/bmp_source/004.png +0 -0
- wx/demo/bmp_source/005.png +0 -0
- wx/demo/bmp_source/006.png +0 -0
- wx/demo/bmp_source/007.png +0 -0
- wx/demo/bmp_source/008.png +0 -0
- wx/demo/bmp_source/009.png +0 -0
- wx/demo/bmp_source/010.png +0 -0
- wx/demo/bmp_source/011.png +0 -0
- wx/demo/bmp_source/012.png +0 -0
- wx/demo/bmp_source/013.png +0 -0
- wx/demo/bmp_source/014.png +0 -0
- wx/demo/bmp_source/015.png +0 -0
- wx/demo/bmp_source/016.png +0 -0
- wx/demo/bmp_source/017.png +0 -0
- wx/demo/bmp_source/018.png +0 -0
- wx/demo/bmp_source/019.png +0 -0
- wx/demo/bmp_source/020.png +0 -0
- wx/demo/bmp_source/021.png +0 -0
- wx/demo/bmp_source/022.png +0 -0
- wx/demo/bmp_source/023.png +0 -0
- wx/demo/bmp_source/024.png +0 -0
- wx/demo/bmp_source/025.png +0 -0
- wx/demo/bmp_source/026.png +0 -0
- wx/demo/bmp_source/027.png +0 -0
- wx/demo/bmp_source/028.png +0 -0
- wx/demo/bmp_source/029.png +0 -0
- wx/demo/bmp_source/030.png +0 -0
- wx/demo/bmp_source/DbDec.bmp +0 -0
- wx/demo/bmp_source/DbInc.bmp +0 -0
- wx/demo/bmp_source/Dec.bmp +0 -0
- wx/demo/bmp_source/FRM_0.png +0 -0
- wx/demo/bmp_source/FRM_1.png +0 -0
- wx/demo/bmp_source/FRM_2.png +0 -0
- wx/demo/bmp_source/FRM_3.png +0 -0
- wx/demo/bmp_source/FRM_4.png +0 -0
- wx/demo/bmp_source/FRM_5.png +0 -0
- wx/demo/bmp_source/FRM_6.png +0 -0
- wx/demo/bmp_source/FRM_7.png +0 -0
- wx/demo/bmp_source/FRM_8.png +0 -0
- wx/demo/bmp_source/GridBG.gif +0 -0
- wx/demo/bmp_source/Inc.bmp +0 -0
- wx/demo/bmp_source/LB01.png +0 -0
- wx/demo/bmp_source/LB02.png +0 -0
- wx/demo/bmp_source/LB03.png +0 -0
- wx/demo/bmp_source/LB04.png +0 -0
- wx/demo/bmp_source/LB05.png +0 -0
- wx/demo/bmp_source/LB06.png +0 -0
- wx/demo/bmp_source/LB07.png +0 -0
- wx/demo/bmp_source/LB08.png +0 -0
- wx/demo/bmp_source/LB09.png +0 -0
- wx/demo/bmp_source/LB10.png +0 -0
- wx/demo/bmp_source/LB11.png +0 -0
- wx/demo/bmp_source/LB12.png +0 -0
- wx/demo/bmp_source/Pt.bmp +0 -0
- wx/demo/bmp_source/Vippi.png +0 -0
- wx/demo/bmp_source/backgrnd.png +0 -0
- wx/demo/bmp_source/book.png +0 -0
- wx/demo/bmp_source/book_blue.png +0 -0
- wx/demo/bmp_source/book_green.png +0 -0
- wx/demo/bmp_source/book_red.png +0 -0
- wx/demo/bmp_source/bp_btn1.png +0 -0
- wx/demo/bmp_source/bp_btn2.png +0 -0
- wx/demo/bmp_source/bp_btn3.png +0 -0
- wx/demo/bmp_source/bp_btn4.png +0 -0
- wx/demo/bmp_source/bulb1.bmp +0 -0
- wx/demo/bmp_source/bulb2.bmp +0 -0
- wx/demo/bmp_source/carrot.png +0 -0
- wx/demo/bmp_source/clipboard.png +0 -0
- wx/demo/bmp_source/code.png +0 -0
- wx/demo/bmp_source/core.png +0 -0
- wx/demo/bmp_source/custom.png +0 -0
- wx/demo/bmp_source/customcontrol.png +0 -0
- wx/demo/bmp_source/deletedocs.png +0 -0
- wx/demo/bmp_source/deleteperspective.png +0 -0
- wx/demo/bmp_source/demo.png +0 -0
- wx/demo/bmp_source/dialog.png +0 -0
- wx/demo/bmp_source/exit.png +0 -0
- wx/demo/bmp_source/expansion.png +0 -0
- wx/demo/bmp_source/find.png +0 -0
- wx/demo/bmp_source/findnext.png +0 -0
- wx/demo/bmp_source/floatcanvas.png +0 -0
- wx/demo/bmp_source/frame.png +0 -0
- wx/demo/bmp_source/images.png +0 -0
- wx/demo/bmp_source/inspect.png +0 -0
- wx/demo/bmp_source/layout.png +0 -0
- wx/demo/bmp_source/logo.png +0 -0
- wx/demo/bmp_source/miscellaneous.png +0 -0
- wx/demo/bmp_source/modifiedexists.png +0 -0
- wx/demo/bmp_source/mondrian.ico +0 -0
- wx/demo/bmp_source/morecontrols.png +0 -0
- wx/demo/bmp_source/moredialog.png +0 -0
- wx/demo/bmp_source/noicon.png +0 -0
- wx/demo/bmp_source/overview.png +0 -0
- wx/demo/bmp_source/pencil.png +0 -0
- wx/demo/bmp_source/pointy.png +0 -0
- wx/demo/bmp_source/process.png +0 -0
- wx/demo/bmp_source/pyshell.png +0 -0
- wx/demo/bmp_source/recent.png +0 -0
- wx/demo/bmp_source/rest.png +0 -0
- wx/demo/bmp_source/robin.jpg +0 -0
- wx/demo/bmp_source/rt_alignleft.xpm +24 -0
- wx/demo/bmp_source/rt_alignright.xpm +24 -0
- wx/demo/bmp_source/rt_bold.xpm +24 -0
- wx/demo/bmp_source/rt_centre.xpm +24 -0
- wx/demo/bmp_source/rt_colour.xpm +59 -0
- wx/demo/bmp_source/rt_copy.xpm +44 -0
- wx/demo/bmp_source/rt_cut.xpm +46 -0
- wx/demo/bmp_source/rt_font.xpm +25 -0
- wx/demo/bmp_source/rt_idea.xpm +47 -0
- wx/demo/bmp_source/rt_indentless.xpm +25 -0
- wx/demo/bmp_source/rt_indentmore.xpm +25 -0
- wx/demo/bmp_source/rt_italic.xpm +25 -0
- wx/demo/bmp_source/rt_open.xpm +57 -0
- wx/demo/bmp_source/rt_paste.xpm +46 -0
- wx/demo/bmp_source/rt_redo.xpm +58 -0
- wx/demo/bmp_source/rt_sample.xpm +44 -0
- wx/demo/bmp_source/rt_save.xpm +42 -0
- wx/demo/bmp_source/rt_smiley.xpm +42 -0
- wx/demo/bmp_source/rt_underline.xpm +25 -0
- wx/demo/bmp_source/rt_undo.xpm +58 -0
- wx/demo/bmp_source/rt_zebra.xpm +409 -0
- wx/demo/bmp_source/saveperspective.png +0 -0
- wx/demo/bmp_source/sm_down.bmp +0 -0
- wx/demo/bmp_source/sm_up.bmp +0 -0
- wx/demo/bmp_source/smiles2.bmp +0 -0
- wx/demo/bmp_source/test2.bmp +0 -0
- wx/demo/bmp_source/testmask.bmp +0 -0
- wx/demo/bmp_source/teststar.png +0 -0
- wx/demo/bmp_source/thekid.png +0 -0
- wx/demo/bmp_source/tog1.bmp +0 -0
- wx/demo/bmp_source/tog2.bmp +0 -0
- wx/demo/bmp_source/wiztest1.bmp +0 -0
- wx/demo/bmp_source/wiztest2.bmp +0 -0
- wx/demo/bmp_source/wxpdemo.ico +0 -0
- wx/demo/cursors/paperairplane_arrow_blue.cur +0 -0
- wx/demo/cursors/paperairplane_arrow_blue_fadeout80.cur +0 -0
- wx/demo/cursors/paperairplane_arrow_colorshift.ani +0 -0
- wx/demo/cursors/paperairplane_arrow_dark.cur +0 -0
- wx/demo/cursors/paperairplane_arrow_grey.cur +0 -0
- wx/demo/cursors/paperairplane_arrow_red.cur +0 -0
- wx/demo/cursors/paperairplane_arrow_white.cur +0 -0
- wx/demo/cursors/paperairplane_arrow_white24.png +0 -0
- wx/demo/data/0-tiger.svg +725 -0
- wx/demo/data/Asteroid_blaster.swf +0 -0
- wx/demo/data/SIL_OPEN_FONT_LICENSE.txt +97 -0
- wx/demo/data/SourceCodePro-Regular.ttf +0 -0
- wx/demo/data/accessories-calculator.svg +636 -0
- wx/demo/data/accessories-text-editor.svg +554 -0
- wx/demo/data/anykey.wav +0 -0
- wx/demo/data/applications-internet.svg +623 -0
- wx/demo/data/desktop-accessibility.svg +245 -0
- wx/demo/data/desktop-keyboard-shortcuts.svg +839 -0
- wx/demo/data/desktop-locale.svg +878 -0
- wx/demo/data/desktop-remote-desktop.svg +1479 -0
- wx/demo/data/desktop-theme.svg +882 -0
- wx/demo/data/desktop-wallpaper.svg +747 -0
- wx/demo/data/echo.py +25 -0
- wx/demo/data/imagemap.htm +20 -0
- wx/demo/data/imagemap.png +0 -0
- wx/demo/data/internet-group-chat.svg +312 -0
- wx/demo/data/internet-mail.svg +440 -0
- wx/demo/data/locale/af/LC_MESSAGES/wxpydemo.mo +0 -0
- wx/demo/data/locale/de/LC_MESSAGES/wxpydemo.mo +0 -0
- wx/demo/data/locale/es/LC_MESSAGES/wxpydemo.mo +0 -0
- wx/demo/data/locale/fr/LC_MESSAGES/wxpydemo.mo +0 -0
- wx/demo/data/locale/it/LC_MESSAGES/wxpydemo.mo +0 -0
- wx/demo/data/locale-src/af.po +23 -0
- wx/demo/data/locale-src/de.po +23 -0
- wx/demo/data/locale-src/es.po +22 -0
- wx/demo/data/locale-src/fr.po +22 -0
- wx/demo/data/locale-src/install +15 -0
- wx/demo/data/locale-src/it.po +23 -0
- wx/demo/data/locale-src/wxpydemo.po +21 -0
- wx/demo/data/office-calendar.svg +316 -0
- wx/demo/data/pic.png +0 -0
- wx/demo/data/pic2.bmp +0 -0
- wx/demo/data/plan.wav +0 -0
- wx/demo/data/proclamation.txt +115 -0
- wx/demo/data/resource.wdr +0 -0
- wx/demo/data/resource_wdr.xrc +146 -0
- wx/demo/data/romedalen.png +0 -0
- wx/demo/data/stc.h.html +3544 -0
- wx/demo/data/system-session.svg +510 -0
- wx/demo/data/system-users.svg +539 -0
- wx/demo/data/tables.htm +116 -0
- wx/demo/data/test-gradient-pen.svg +14 -0
- wx/demo/data/test-opacity.svg +7 -0
- wx/demo/data/test.htm +253 -0
- wx/demo/data/testmovie.mpg +0 -0
- wx/demo/data/testtable.txt +38 -0
- wx/demo/data/tips.txt +73 -0
- wx/demo/data/utilities-system-monitor.svg +435 -0
- wx/demo/data/utilities-terminal.svg +500 -0
- wx/demo/data/widgetTest.htm +70 -0
- wx/demo/data/world.dat +24055 -0
- wx/demo/demo.py +4 -0
- wx/demo/demo.pyw +4 -0
- wx/demo/demodata.py +310 -0
- wx/demo/encode_bitmaps.py +181 -0
- wx/demo/images.py +6812 -0
- wx/demo/infoframe.py +149 -0
- wx/demo/run.py +171 -0
- wx/demo/snippets/__init__.py +13 -0
- wx/demo/snippets/arc.py +21 -0
- wx/demo/snippets/arc_negative.py +21 -0
- wx/demo/snippets/clip.py +13 -0
- wx/demo/snippets/clip_image.py +13 -0
- wx/demo/snippets/curve_rectangle.py +53 -0
- wx/demo/snippets/curve_to.py +17 -0
- wx/demo/snippets/dash.py +18 -0
- wx/demo/snippets/ellipse.py +33 -0
- wx/demo/snippets/fill_and_stroke.py +12 -0
- wx/demo/snippets/fill_and_stroke2.py +18 -0
- wx/demo/snippets/fill_style.py +31 -0
- wx/demo/snippets/glyph_path.py +21 -0
- wx/demo/snippets/gradient.py +16 -0
- wx/demo/snippets/gradient_mask.py +12 -0
- wx/demo/snippets/group.py +16 -0
- wx/demo/snippets/image.py +14 -0
- wx/demo/snippets/imagepattern.py +23 -0
- wx/demo/snippets/path.py +7 -0
- wx/demo/snippets/set_line_cap.py +19 -0
- wx/demo/snippets/set_line_join.py +21 -0
- wx/demo/snippets/show_glyphs.py +15 -0
- wx/demo/snippets/text.py +22 -0
- wx/demo/snippets/text_align_center.py +26 -0
- wx/demo/snippets/text_extents.py +27 -0
- wx/demo/template.py +36 -0
- wx/demo/throbImages.py +1277 -0
- wx/demo/version.py +3 -0
- wx/demo/widgetTest.py +72 -0
- wx/demo/wxpdemo.ico +0 -0
- wx/glcanvas.py +10 -0
- wx/glcanvas.pyi +458 -0
- wx/grid.py +229 -0
- wx/grid.pyi +4959 -0
- wx/html.py +35 -0
- wx/html.pyi +2965 -0
- wx/html2.py +40 -0
- wx/html2.pyi +772 -0
- wx/lib/CDate.py +202 -0
- wx/lib/ClickableHtmlWindow.py +57 -0
- wx/lib/__init__.py +0 -0
- wx/lib/activex.py +178 -0
- wx/lib/activexwrapper.py +153 -0
- wx/lib/agw/__init__.py +128 -0
- wx/lib/agw/advancedsplash.py +564 -0
- wx/lib/agw/aquabutton.py +1127 -0
- wx/lib/agw/artmanager.py +2110 -0
- wx/lib/agw/aui/__init__.py +295 -0
- wx/lib/agw/aui/aui_constants.py +2628 -0
- wx/lib/agw/aui/aui_switcherdialog.py +1227 -0
- wx/lib/agw/aui/aui_utilities.py +672 -0
- wx/lib/agw/aui/auibar.py +4031 -0
- wx/lib/agw/aui/auibook.py +6289 -0
- wx/lib/agw/aui/dockart.py +1198 -0
- wx/lib/agw/aui/framemanager.py +10409 -0
- wx/lib/agw/aui/tabart.py +2771 -0
- wx/lib/agw/aui/tabmdi.py +679 -0
- wx/lib/agw/balloontip.py +1158 -0
- wx/lib/agw/buttonpanel.py +2823 -0
- wx/lib/agw/cubecolourdialog.py +3529 -0
- wx/lib/agw/customtreectrl.py +8963 -0
- wx/lib/agw/data/ShortcutEditor_1.png +0 -0
- wx/lib/agw/data/ShortcutEditor_1_thumb.png +0 -0
- wx/lib/agw/data/ShortcutEditor_2.png +0 -0
- wx/lib/agw/data/ShortcutEditor_2_thumb.png +0 -0
- wx/lib/agw/data/ShortcutEditor_3.png +0 -0
- wx/lib/agw/data/ShortcutEditor_3_thumb.png +0 -0
- wx/lib/agw/data/ShortcutEditor_4.png +0 -0
- wx/lib/agw/data/ShortcutEditor_4_thumb.png +0 -0
- wx/lib/agw/data/default_help_text.html +105 -0
- wx/lib/agw/flatmenu.py +7333 -0
- wx/lib/agw/flatnotebook.py +6672 -0
- wx/lib/agw/floatspin.py +1823 -0
- wx/lib/agw/fmcustomizedlg.py +540 -0
- wx/lib/agw/fmresources.py +407 -0
- wx/lib/agw/foldpanelbar.py +2282 -0
- wx/lib/agw/fourwaysplitter.py +1130 -0
- wx/lib/agw/genericmessagedialog.py +1549 -0
- wx/lib/agw/gradientbutton.py +732 -0
- wx/lib/agw/hyperlink.py +664 -0
- wx/lib/agw/hypertreelist.py +5374 -0
- wx/lib/agw/infobar.py +885 -0
- wx/lib/agw/knobctrl.py +945 -0
- wx/lib/agw/labelbook.py +3029 -0
- wx/lib/agw/multidirdialog.py +615 -0
- wx/lib/agw/peakmeter.py +1029 -0
- wx/lib/agw/persist/__init__.py +188 -0
- wx/lib/agw/persist/persist_constants.py +284 -0
- wx/lib/agw/persist/persist_handlers.py +2614 -0
- wx/lib/agw/persist/persistencemanager.py +864 -0
- wx/lib/agw/piectrl.py +1082 -0
- wx/lib/agw/pybusyinfo.py +399 -0
- wx/lib/agw/pycollapsiblepane.py +940 -0
- wx/lib/agw/pygauge.py +570 -0
- wx/lib/agw/pyprogress.py +917 -0
- wx/lib/agw/ribbon/__init__.py +198 -0
- wx/lib/agw/ribbon/art.py +219 -0
- wx/lib/agw/ribbon/art_aui.py +1284 -0
- wx/lib/agw/ribbon/art_default.py +81 -0
- wx/lib/agw/ribbon/art_internal.py +244 -0
- wx/lib/agw/ribbon/art_msw.py +2736 -0
- wx/lib/agw/ribbon/art_osx.py +52 -0
- wx/lib/agw/ribbon/bar.py +1261 -0
- wx/lib/agw/ribbon/buttonbar.py +1320 -0
- wx/lib/agw/ribbon/control.py +205 -0
- wx/lib/agw/ribbon/gallery.py +974 -0
- wx/lib/agw/ribbon/page.py +946 -0
- wx/lib/agw/ribbon/panel.py +1170 -0
- wx/lib/agw/ribbon/toolbar.py +1442 -0
- wx/lib/agw/rulerctrl.py +1887 -0
- wx/lib/agw/scrolledthumbnail.py +2119 -0
- wx/lib/agw/shapedbutton.py +1809 -0
- wx/lib/agw/shortcuteditor.py +2634 -0
- wx/lib/agw/speedmeter.py +1801 -0
- wx/lib/agw/supertooltip.py +1444 -0
- wx/lib/agw/thumbnailctrl.py +529 -0
- wx/lib/agw/toasterbox.py +1327 -0
- wx/lib/agw/ultimatelistctrl.py +13666 -0
- wx/lib/agw/xlsgrid.py +2113 -0
- wx/lib/agw/zoombar.py +1339 -0
- wx/lib/analogclock/__init__.py +140 -0
- wx/lib/analogclock/analogclock.py +631 -0
- wx/lib/analogclock/helpers.py +991 -0
- wx/lib/analogclock/lib_setup/__init__.py +0 -0
- wx/lib/analogclock/lib_setup/buttontreectrlpanel.py +297 -0
- wx/lib/analogclock/lib_setup/fontselect.py +57 -0
- wx/lib/analogclock/setup.py +490 -0
- wx/lib/analogclock/styles.py +47 -0
- wx/lib/anchors.py +103 -0
- wx/lib/art/__init__.py +4 -0
- wx/lib/art/flagart.py +1583 -0
- wx/lib/art/img2pyartprov.py +56 -0
- wx/lib/busy.py +146 -0
- wx/lib/buttons.py +1141 -0
- wx/lib/calendar.py +1597 -0
- wx/lib/checkbox.py +837 -0
- wx/lib/colourchooser/__init__.py +38 -0
- wx/lib/colourchooser/canvas.py +145 -0
- wx/lib/colourchooser/intl.py +24 -0
- wx/lib/colourchooser/pycolourbox.py +89 -0
- wx/lib/colourchooser/pycolourchooser.py +629 -0
- wx/lib/colourchooser/pycolourslider.py +100 -0
- wx/lib/colourchooser/pypalette.py +211 -0
- wx/lib/colourdb.py +740 -0
- wx/lib/colourselect.py +385 -0
- wx/lib/colourutils.py +118 -0
- wx/lib/combotreebox.py +944 -0
- wx/lib/delayedresult.py +420 -0
- wx/lib/dialogs.py +510 -0
- wx/lib/docview.py +3210 -0
- wx/lib/dragscroller.py +79 -0
- wx/lib/editor/README.txt +77 -0
- wx/lib/editor/__init__.py +24 -0
- wx/lib/editor/editor.py +974 -0
- wx/lib/editor/images.py +15 -0
- wx/lib/editor/selection.py +44 -0
- wx/lib/embeddedimage.py +76 -0
- wx/lib/eventStack.py +136 -0
- wx/lib/eventwatcher.py +440 -0
- wx/lib/evtmgr.py +521 -0
- wx/lib/expando.py +393 -0
- wx/lib/fancytext.py +505 -0
- wx/lib/filebrowsebutton.py +459 -0
- wx/lib/flashwin.py +262 -0
- wx/lib/flashwin_old.py +651 -0
- wx/lib/floatcanvas/FCEvents.py +53 -0
- wx/lib/floatcanvas/FCObjects.py +2923 -0
- wx/lib/floatcanvas/FloatCanvas.py +1027 -0
- wx/lib/floatcanvas/GUIMode.py +396 -0
- wx/lib/floatcanvas/NavCanvas.py +161 -0
- wx/lib/floatcanvas/Resources.py +319 -0
- wx/lib/floatcanvas/ScreenShot.py +1788 -0
- wx/lib/floatcanvas/Utilities/BBox.py +314 -0
- wx/lib/floatcanvas/Utilities/Colors.py +137 -0
- wx/lib/floatcanvas/Utilities/GUI.py +91 -0
- wx/lib/floatcanvas/Utilities/__init__.py +7 -0
- wx/lib/floatcanvas/__init__.py +124 -0
- wx/lib/foldmenu.py +89 -0
- wx/lib/gestures.py +310 -0
- wx/lib/gizmos/__init__.py +18 -0
- wx/lib/gizmos/dynamicsash.py +1202 -0
- wx/lib/gizmos/ledctrl.py +300 -0
- wx/lib/gizmos/treelistctrl.py +87 -0
- wx/lib/graphics.py +1939 -0
- wx/lib/gridmovers.py +511 -0
- wx/lib/iewin.py +249 -0
- wx/lib/iewin_old.py +894 -0
- wx/lib/imagebrowser.py +856 -0
- wx/lib/imageutils.py +163 -0
- wx/lib/infoframe.py +490 -0
- wx/lib/inspection.py +1255 -0
- wx/lib/intctrl.py +1001 -0
- wx/lib/itemspicker.py +256 -0
- wx/lib/langlistctrl.py +480 -0
- wx/lib/layoutf.py +271 -0
- wx/lib/masked/__init__.py +27 -0
- wx/lib/masked/combobox.py +839 -0
- wx/lib/masked/ctrl.py +108 -0
- wx/lib/masked/ipaddrctrl.py +242 -0
- wx/lib/masked/maskededit.py +7279 -0
- wx/lib/masked/numctrl.py +2001 -0
- wx/lib/masked/textctrl.py +465 -0
- wx/lib/masked/timectrl.py +1466 -0
- wx/lib/mixins/__init__.py +17 -0
- wx/lib/mixins/grid.py +47 -0
- wx/lib/mixins/gridlabelrenderer.py +251 -0
- wx/lib/mixins/imagelist.py +77 -0
- wx/lib/mixins/inspection.py +184 -0
- wx/lib/mixins/listctrl.py +894 -0
- wx/lib/mixins/rubberband.py +404 -0
- wx/lib/mixins/treemixin.py +678 -0
- wx/lib/msgpanel.py +95 -0
- wx/lib/multisash.py +747 -0
- wx/lib/myole4ax.idl +178 -0
- wx/lib/myole4ax.tlb +0 -0
- wx/lib/newevent.py +229 -0
- wx/lib/nvdlg.py +156 -0
- wx/lib/ogl/__init__.py +13 -0
- wx/lib/ogl/basic.py +3991 -0
- wx/lib/ogl/bmpshape.py +87 -0
- wx/lib/ogl/canvas.py +467 -0
- wx/lib/ogl/composit.py +1577 -0
- wx/lib/ogl/diagram.py +230 -0
- wx/lib/ogl/divided.py +483 -0
- wx/lib/ogl/drawn.py +900 -0
- wx/lib/ogl/lines.py +1811 -0
- wx/lib/ogl/oglmisc.py +608 -0
- wx/lib/pdfviewer/__init__.py +113 -0
- wx/lib/pdfviewer/bitmaps/ArrowLeft.png +0 -0
- wx/lib/pdfviewer/bitmaps/ArrowRight.png +0 -0
- wx/lib/pdfviewer/bitmaps/DirectionH.png +0 -0
- wx/lib/pdfviewer/bitmaps/DirectionV.png +0 -0
- wx/lib/pdfviewer/bitmaps/PlayerFirst.png +0 -0
- wx/lib/pdfviewer/bitmaps/PlayerLast.png +0 -0
- wx/lib/pdfviewer/bitmaps/PlayerNext.png +0 -0
- wx/lib/pdfviewer/bitmaps/PlayerPrev.png +0 -0
- wx/lib/pdfviewer/bitmaps/Printer.png +0 -0
- wx/lib/pdfviewer/bitmaps/ReadMe.txt +28 -0
- wx/lib/pdfviewer/bitmaps/Save.png +0 -0
- wx/lib/pdfviewer/bitmaps/ZoomIn.png +0 -0
- wx/lib/pdfviewer/bitmaps/ZoomOut.png +0 -0
- wx/lib/pdfviewer/bitmaps/encode_bitmaps.py +37 -0
- wx/lib/pdfviewer/buttonpanel.py +279 -0
- wx/lib/pdfviewer/images.py +240 -0
- wx/lib/pdfviewer/viewer.py +1077 -0
- wx/lib/pdfwin.py +295 -0
- wx/lib/pdfwin_old.py +789 -0
- wx/lib/platebtn.py +789 -0
- wx/lib/plot/CHANGELOG.md +150 -0
- wx/lib/plot/README.md +16 -0
- wx/lib/plot/__init__.py +46 -0
- wx/lib/plot/__main__.py +5 -0
- wx/lib/plot/examples/__init__.py +0 -0
- wx/lib/plot/examples/demo.py +1009 -0
- wx/lib/plot/examples/simple_example.py +54 -0
- wx/lib/plot/plotcanvas.py +2981 -0
- wx/lib/plot/polyobjects.py +1525 -0
- wx/lib/plot/utils.py +327 -0
- wx/lib/popupctl.py +250 -0
- wx/lib/printout.py +1157 -0
- wx/lib/progressindicator.py +151 -0
- wx/lib/pubsub/LICENSE_BSD_Simple.txt +23 -0
- wx/lib/pubsub/README_WxPython.txt +22 -0
- wx/lib/pubsub/RELEASE_NOTES.txt +71 -0
- wx/lib/pubsub/__init__.py +25 -0
- wx/lib/pubsub/core/__init__.py +92 -0
- wx/lib/pubsub/core/arg1/__init__.py +16 -0
- wx/lib/pubsub/core/arg1/listenerimpl.py +97 -0
- wx/lib/pubsub/core/arg1/publisher.py +40 -0
- wx/lib/pubsub/core/arg1/publishermixin.py +34 -0
- wx/lib/pubsub/core/arg1/topicargspecimpl.py +66 -0
- wx/lib/pubsub/core/arg1/topicmgrimpl.py +19 -0
- wx/lib/pubsub/core/callables.py +191 -0
- wx/lib/pubsub/core/imp2.py +63 -0
- wx/lib/pubsub/core/itopicdefnprovider.py +0 -0
- wx/lib/pubsub/core/kwargs/__init__.py +16 -0
- wx/lib/pubsub/core/kwargs/datamsg.py +27 -0
- wx/lib/pubsub/core/kwargs/listenerimpl.py +93 -0
- wx/lib/pubsub/core/kwargs/publisher.py +77 -0
- wx/lib/pubsub/core/kwargs/publishermixin.py +65 -0
- wx/lib/pubsub/core/kwargs/topicargspecimpl.py +217 -0
- wx/lib/pubsub/core/kwargs/topicmgrimpl.py +13 -0
- wx/lib/pubsub/core/listener.py +40 -0
- wx/lib/pubsub/core/listenerbase.py +185 -0
- wx/lib/pubsub/core/notificationmgr.py +185 -0
- wx/lib/pubsub/core/publisherbase.py +191 -0
- wx/lib/pubsub/core/topicargspec.py +77 -0
- wx/lib/pubsub/core/topicdefnprovider.py +632 -0
- wx/lib/pubsub/core/topicexc.py +72 -0
- wx/lib/pubsub/core/topicmgr.py +456 -0
- wx/lib/pubsub/core/topicobj.py +472 -0
- wx/lib/pubsub/core/topictreetraverser.py +143 -0
- wx/lib/pubsub/core/topicutils.py +118 -0
- wx/lib/pubsub/core/treeconfig.py +21 -0
- wx/lib/pubsub/core/validatedefnargs.py +29 -0
- wx/lib/pubsub/core/weakmethod.py +102 -0
- wx/lib/pubsub/policies.py +24 -0
- wx/lib/pubsub/pub.py +199 -0
- wx/lib/pubsub/py2and3.py +608 -0
- wx/lib/pubsub/setuparg1.py +47 -0
- wx/lib/pubsub/setupkwargs.py +29 -0
- wx/lib/pubsub/utils/__init__.py +27 -0
- wx/lib/pubsub/utils/exchandling.py +100 -0
- wx/lib/pubsub/utils/misc.py +100 -0
- wx/lib/pubsub/utils/notification.py +331 -0
- wx/lib/pubsub/utils/topictreeprinter.py +195 -0
- wx/lib/pubsub/utils/xmltopicdefnprovider.py +287 -0
- wx/lib/pydocview.py +3300 -0
- wx/lib/rcsizer.py +229 -0
- wx/lib/resizewidget.py +357 -0
- wx/lib/scrolledpanel.py +225 -0
- wx/lib/sheet.py +350 -0
- wx/lib/sized_controls.py +691 -0
- wx/lib/softwareupdate.py +361 -0
- wx/lib/splitter.py +925 -0
- wx/lib/statbmp.py +199 -0
- wx/lib/stattext.py +322 -0
- wx/lib/throbber.py +425 -0
- wx/lib/ticker.py +295 -0
- wx/lib/ticker_xrc.py +48 -0
- wx/lib/utils.py +89 -0
- wx/lib/wordwrap.py +97 -0
- wx/lib/wxcairo/__init__.py +124 -0
- wx/lib/wxcairo/wx_cairocffi.py +200 -0
- wx/lib/wxcairo/wx_pycairo.py +463 -0
- wx/lib/wxpTag.py +274 -0
- wx/locale/af/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/an/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ar/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ca/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ca@valencia/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/cs/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/da/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/de/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/el/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/es/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/eu/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/fa_IR/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/fi/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/fr/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/gl_ES/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/hi/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/hr/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/hu/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/id/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/it/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ja/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ka/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ko_KR/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/lt/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/lv/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ms/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/nb/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ne/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/nl/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/pl/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/pt/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/pt_BR/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ro/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ru/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/sk/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/sl/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/sq/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/sv/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ta/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/tr/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/uk/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/vi/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/zh_CN/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/zh_TW/LC_MESSAGES/wxstd.mo +0 -0
- wx/media.py +27 -0
- wx/media.pyi +223 -0
- wx/msw.py +13 -0
- wx/msw.pyi +65 -0
- wx/propgrid.py +1451 -0
- wx/propgrid.pyi +7914 -0
- wx/py/CHANGES.txt +796 -0
- wx/py/Py.ico +0 -0
- wx/py/PyAlaCarte.py +34 -0
- wx/py/PyAlaMode.py +34 -0
- wx/py/PyAlaModeTest.py +33 -0
- wx/py/PyCrust.ico +0 -0
- wx/py/PyCrust.py +78 -0
- wx/py/PyCrust_16.png +0 -0
- wx/py/PyCrust_32.png +0 -0
- wx/py/PyFilling.py +35 -0
- wx/py/PyShell.py +78 -0
- wx/py/PySlices.ico +0 -0
- wx/py/PySlices.py +98 -0
- wx/py/PySlicesShell.py +94 -0
- wx/py/PySlices_16.png +0 -0
- wx/py/PySlices_32.png +0 -0
- wx/py/PyWrap.py +52 -0
- wx/py/README.txt +77 -0
- wx/py/__init__.py +20 -0
- wx/py/buffer.py +136 -0
- wx/py/crust.py +403 -0
- wx/py/crustslices.py +403 -0
- wx/py/dispatcher.py +259 -0
- wx/py/document.py +37 -0
- wx/py/editor.py +844 -0
- wx/py/editwindow.py +299 -0
- wx/py/filling.py +357 -0
- wx/py/frame.py +978 -0
- wx/py/images.py +212 -0
- wx/py/interpreter.py +170 -0
- wx/py/introspect.py +393 -0
- wx/py/magic.py +98 -0
- wx/py/parse.py +134 -0
- wx/py/path.py +36 -0
- wx/py/pseudo.py +99 -0
- wx/py/shell.py +1588 -0
- wx/py/sliceshell.py +3814 -0
- wx/py/tests/test_interpreter.py +71 -0
- wx/py/tests/test_introspect.py +862 -0
- wx/py/tests/test_pseudo.py +70 -0
- wx/py/tests/test_version.py +36 -0
- wx/py/tests/testall.py +22 -0
- wx/py/version.py +7 -0
- wx/ribbon.py +45 -0
- wx/ribbon.pyi +2494 -0
- wx/richtext.py +142 -0
- wx/richtext.pyi +12113 -0
- wx/siplib.cp313-win_amd64.pyd +0 -0
- wx/stc.py +58 -0
- wx/stc.pyi +8463 -0
- wx/svg/__init__.py +364 -0
- wx/svg/_nanosvg.cp313-win_amd64.pyd +0 -0
- wx/tools/__init__.py +18 -0
- wx/tools/dbg.py +268 -0
- wx/tools/genaxmodule.py +50 -0
- wx/tools/helpviewer.py +92 -0
- wx/tools/img2img.py +85 -0
- wx/tools/img2png.py +54 -0
- wx/tools/img2py.py +309 -0
- wx/tools/img2xpm.py +54 -0
- wx/tools/pywxrc.py +949 -0
- wx/tools/wxget.py +254 -0
- wx/tools/wxget_docs_demo.py +186 -0
- wx/wxbase315u_net_vc140_x64.dll +0 -0
- wx/wxbase315u_vc140_x64.dll +0 -0
- wx/wxbase315u_xml_vc140_x64.dll +0 -0
- wx/wxmsw315u_adv_vc140_x64.dll +0 -0
- wx/wxmsw315u_aui_vc140_x64.dll +0 -0
- wx/wxmsw315u_core_vc140_x64.dll +0 -0
- wx/wxmsw315u_gl_vc140_x64.dll +0 -0
- wx/wxmsw315u_html_vc140_x64.dll +0 -0
- wx/wxmsw315u_media_vc140_x64.dll +0 -0
- wx/wxmsw315u_propgrid_vc140_x64.dll +0 -0
- wx/wxmsw315u_qa_vc140_x64.dll +0 -0
- wx/wxmsw315u_ribbon_vc140_x64.dll +0 -0
- wx/wxmsw315u_richtext_vc140_x64.dll +0 -0
- wx/wxmsw315u_stc_vc140_x64.dll +0 -0
- wx/wxmsw315u_webview_vc140_x64.dll +0 -0
- wx/wxmsw315u_xrc_vc140_x64.dll +0 -0
- wx/xml.py +15 -0
- wx/xml.pyi +575 -0
- wx/xrc.py +65 -0
- wx/xrc.pyi +742 -0
- wxPython_zombie-3.1.5.8.dist-info/LICENSE.txt +950 -0
- wxPython_zombie-3.1.5.8.dist-info/METADATA +107 -0
- wxPython_zombie-3.1.5.8.dist-info/RECORD +1175 -0
- wxPython_zombie-3.1.5.8.dist-info/WHEEL +5 -0
- wxPython_zombie-3.1.5.8.dist-info/entry_points.txt +2 -0
- wxPython_zombie-3.1.5.8.dist-info/top_level.txt +1 -0
wx/lib/agw/balloontip.py
ADDED
|
@@ -0,0 +1,1158 @@
|
|
|
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
|
+
# (c) 2021 Zombie
|
|
8
|
+
#
|
|
9
|
+
#
|
|
10
|
+
# TODO List/Caveats
|
|
11
|
+
#
|
|
12
|
+
# 1. With wx.ListBox (And Probably Other Controls), The BalloonTip Sometimes
|
|
13
|
+
# Flashes (It Is Created And Suddenly Destroyed). I Don't Know What Is
|
|
14
|
+
# Happening. Probably I Don't Handle Correctly The wx.EVT_ENTER_WINDOW
|
|
15
|
+
# wx.EVT_LEAVE_WINDOW?
|
|
16
|
+
#
|
|
17
|
+
# 2. wx.RadioBox Seems Not To Receive The wx.EVT_ENTER_WINDOW Event
|
|
18
|
+
#
|
|
19
|
+
# 3. wx.SpinCtrl (And Probably Other Controls), When Put In A Sizer, Does Not
|
|
20
|
+
# Return The Correct Size/Position. Probably Is Something I Am Missing.
|
|
21
|
+
#
|
|
22
|
+
# 4. Other Issues?
|
|
23
|
+
#
|
|
24
|
+
#
|
|
25
|
+
# FIXED Problems
|
|
26
|
+
#
|
|
27
|
+
# 1. Now BalloonTip Control Works Also For TaskBarIcon (Thanks To Everyone
|
|
28
|
+
# For The Suggetions I Read In The wxPython Mailing List)
|
|
29
|
+
#
|
|
30
|
+
#
|
|
31
|
+
# For All Kind Of Problems, Requests Of Enhancements And Bug Reports, Please
|
|
32
|
+
# Write To Me At:
|
|
33
|
+
#
|
|
34
|
+
# andrea.gavana@gmail.com
|
|
35
|
+
# andrea.gavana@maerskoil.com
|
|
36
|
+
#
|
|
37
|
+
# Or, Obviously, To The wxPython Mailing List!!!
|
|
38
|
+
#
|
|
39
|
+
# Tags: phoenix-port, unittest, documented
|
|
40
|
+
#
|
|
41
|
+
# End Of Comments
|
|
42
|
+
# --------------------------------------------------------------------------- #
|
|
43
|
+
|
|
44
|
+
"""
|
|
45
|
+
:class:`~wx.lib.agw.balloontip.BalloonTip` is a class that allows you to display tooltips in a balloon style
|
|
46
|
+
window.
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
Description
|
|
50
|
+
===========
|
|
51
|
+
|
|
52
|
+
:class:`BalloonTip` is a class that allows you to display tooltips in a balloon style
|
|
53
|
+
window (actually a frame), similarly to the windows XP balloon help. There is
|
|
54
|
+
also an arrow that points to the center of the control designed as a "target"
|
|
55
|
+
for the :class:`BalloonTip`.
|
|
56
|
+
|
|
57
|
+
What it can do:
|
|
58
|
+
|
|
59
|
+
- Set the balloon shape as a rectangle or a rounded rectangle;
|
|
60
|
+
- Set an icon to the top-left of the :class:`BalloonTip` frame;
|
|
61
|
+
- Set a title at the top of the :class:`BalloonTip` frame;
|
|
62
|
+
- Automatic "best" placement of :class:`BalloonTip` frame depending on the target
|
|
63
|
+
control/window position;
|
|
64
|
+
- Runtime customization of title/tip fonts and foreground colours;
|
|
65
|
+
- Runtime change of :class:`BalloonTip` frame shape;
|
|
66
|
+
- Set the balloon background colour;
|
|
67
|
+
- Possibility to set the delay after which the :class:`BalloonTip` is displayed;
|
|
68
|
+
- Possibility to set the delay after which the :class:`BalloonTip` is destroyed;
|
|
69
|
+
- Three different behaviors for the :class:`BalloonTip` window (regardless the delay
|
|
70
|
+
destruction time set):
|
|
71
|
+
|
|
72
|
+
a) Destroy by leave: the :class:`BalloonTip` is destroyed when the mouse leaves the
|
|
73
|
+
target control/window;
|
|
74
|
+
b) Destroy by click: the :class:`BalloonTip` is destroyed when you click on any area
|
|
75
|
+
of the target control/window;
|
|
76
|
+
c) Destroy by button: the :class:`BalloonTip` is destroyed when you click on the
|
|
77
|
+
top-right close button;
|
|
78
|
+
- Possibility to enable/disable globally the :class:`BalloonTip` on you application;
|
|
79
|
+
- Set the :class:`BalloonTip` also for the taskbar icon.
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
Usage
|
|
83
|
+
=====
|
|
84
|
+
|
|
85
|
+
Usage example::
|
|
86
|
+
|
|
87
|
+
import wx
|
|
88
|
+
import wx.lib.agw.balloontip as BT
|
|
89
|
+
|
|
90
|
+
class MyFrame(wx.Frame):
|
|
91
|
+
|
|
92
|
+
def __init__(self, parent):
|
|
93
|
+
|
|
94
|
+
wx.Frame.__init__(self, parent, -1, "BalloonTip Demo")
|
|
95
|
+
|
|
96
|
+
panel = wx.Panel(self)
|
|
97
|
+
|
|
98
|
+
# Let's suppose that in your application you have a wx.TextCtrl defined as:
|
|
99
|
+
mytextctrl = wx.TextCtrl(panel, -1, "I am a textctrl", pos=(100, 100))
|
|
100
|
+
|
|
101
|
+
# You can define your BalloonTip as follows:
|
|
102
|
+
tipballoon = BT.BalloonTip(topicon=None, toptitle="textctrl",
|
|
103
|
+
message="this is a textctrl",
|
|
104
|
+
shape=BT.BT_ROUNDED,
|
|
105
|
+
tipstyle=BT.BT_LEAVE)
|
|
106
|
+
|
|
107
|
+
# Set the BalloonTip target
|
|
108
|
+
tipballoon.SetTarget(mytextctrl)
|
|
109
|
+
# Set the BalloonTip background colour
|
|
110
|
+
tipballoon.SetBalloonColour(wx.WHITE)
|
|
111
|
+
# Set the font for the balloon title
|
|
112
|
+
tipballoon.SetTitleFont(wx.Font(9, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False))
|
|
113
|
+
# Set the colour for the balloon title
|
|
114
|
+
tipballoon.SetTitleColour(wx.BLACK)
|
|
115
|
+
# Leave the message font as default
|
|
116
|
+
tipballoon.SetMessageFont()
|
|
117
|
+
# Set the message (tip) foreground colour
|
|
118
|
+
tipballoon.SetMessageColour(wx.LIGHT_GREY)
|
|
119
|
+
# Set the start delay for the BalloonTip
|
|
120
|
+
tipballoon.SetStartDelay(1000)
|
|
121
|
+
# Set the time after which the BalloonTip is destroyed
|
|
122
|
+
tipballoon.SetEndDelay(3000)
|
|
123
|
+
|
|
124
|
+
# our normal wxApp-derived class, as usual
|
|
125
|
+
|
|
126
|
+
app = wx.App(0)
|
|
127
|
+
|
|
128
|
+
frame = MyFrame(None)
|
|
129
|
+
app.SetTopWindow(frame)
|
|
130
|
+
frame.Show()
|
|
131
|
+
|
|
132
|
+
app.MainLoop()
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
Window Styles
|
|
136
|
+
=============
|
|
137
|
+
|
|
138
|
+
This class supports the following window styles:
|
|
139
|
+
|
|
140
|
+
================ =========== ==================================================
|
|
141
|
+
Window Styles Hex Value Description
|
|
142
|
+
================ =========== ==================================================
|
|
143
|
+
``BT_ROUNDED`` 0x1 :class:`BalloonTip` will have a rounded rectangular shape.
|
|
144
|
+
``BT_RECTANGLE`` 0x2 :class:`BalloonTip` will have a rectangular shape.
|
|
145
|
+
``BT_LEAVE`` 0x3 :class:`BalloonTip` will be destroyed when the user moves the mouse outside the target window.
|
|
146
|
+
``BT_CLICK`` 0x4 :class:`BalloonTip` will be destroyed when the user click on :class:`BalloonTip`.
|
|
147
|
+
``BT_BUTTON`` 0x5 :class:`BalloonTip` will be destroyed when the user click on the close button.
|
|
148
|
+
================ =========== ==================================================
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
Events Processing
|
|
152
|
+
=================
|
|
153
|
+
|
|
154
|
+
`No custom events are available for this class.`
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
License And Version
|
|
158
|
+
===================
|
|
159
|
+
|
|
160
|
+
BalloonTip is distributed under the wxPython license.
|
|
161
|
+
|
|
162
|
+
Latest revision: Andrea Gavana @ 16 Jul 2012, 15.00 GMT
|
|
163
|
+
|
|
164
|
+
Version 0.3
|
|
165
|
+
|
|
166
|
+
"""
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
import wx
|
|
170
|
+
import time
|
|
171
|
+
|
|
172
|
+
import wx.adv
|
|
173
|
+
from wx.lib.buttons import GenButton
|
|
174
|
+
|
|
175
|
+
# Define The Values For The BalloonTip Frame Shape
|
|
176
|
+
BT_ROUNDED = 1
|
|
177
|
+
""" :class:`BalloonTip` will have a rounded rectangular shape. """
|
|
178
|
+
BT_RECTANGLE = 2
|
|
179
|
+
""" :class:`BalloonTip` will have a rectangular shape. """
|
|
180
|
+
|
|
181
|
+
# Define The Value For The BalloonTip Destruction Behavior
|
|
182
|
+
BT_LEAVE = 3
|
|
183
|
+
""" :class:`BalloonTip` will be destroyed when the user moves the mouse outside the target window. """
|
|
184
|
+
BT_CLICK = 4
|
|
185
|
+
""" :class:`BalloonTip` will be destroyed when the user click on :class:`BalloonTip`. """
|
|
186
|
+
BT_BUTTON = 5
|
|
187
|
+
""" :class:`BalloonTip` will be destroyed when the user click on the close button. """
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
# ---------------------------------------------------------------
|
|
191
|
+
# Class BalloonFrame
|
|
192
|
+
# ---------------------------------------------------------------
|
|
193
|
+
# This Class Is Called By The Main BalloonTip Class, And It Is
|
|
194
|
+
# Responsible For The Frame Creation/Positioning On Screen
|
|
195
|
+
# Depending On Target Control/Window, The Frame Can Position
|
|
196
|
+
# Itself To NW (Default), NE, SW, SE. The Switch On Positioning
|
|
197
|
+
# Is Done By Calculating The Absolute Position Of The Target
|
|
198
|
+
# Control/Window Plus/Minus The BalloonTip Size. The Pointing
|
|
199
|
+
# Arrow Is Positioned Accordingly.
|
|
200
|
+
# ---------------------------------------------------------------
|
|
201
|
+
|
|
202
|
+
class BalloonFrame(wx.Frame):
|
|
203
|
+
"""
|
|
204
|
+
This class is called by the main :class:`BalloonTip` class, and it is
|
|
205
|
+
responsible for the frame creation/positioning on screen
|
|
206
|
+
depending on target control/window, the frame can position
|
|
207
|
+
itself to NW (default), NE, SW, SE. The switch on positioning
|
|
208
|
+
is done by calculating the absolute position of the target
|
|
209
|
+
control/window plus/minus the balloontip size. The pointing
|
|
210
|
+
arrow is positioned accordingly.
|
|
211
|
+
"""
|
|
212
|
+
def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition,
|
|
213
|
+
size=wx.DefaultSize, classparent=None):
|
|
214
|
+
"""
|
|
215
|
+
Default class constructor.
|
|
216
|
+
|
|
217
|
+
Used internally. Do not call directly this class in your application!
|
|
218
|
+
"""
|
|
219
|
+
|
|
220
|
+
wx.Frame.__init__(self, None, -1, "BalloonTip", pos, size,
|
|
221
|
+
style=wx.FRAME_SHAPED |
|
|
222
|
+
wx.SIMPLE_BORDER |
|
|
223
|
+
wx.FRAME_NO_TASKBAR |
|
|
224
|
+
wx.STAY_ON_TOP)
|
|
225
|
+
|
|
226
|
+
self._parent = classparent
|
|
227
|
+
self._toptitle = self._parent._toptitle
|
|
228
|
+
self._topicon = self._parent._topicon
|
|
229
|
+
self._message = self._parent._message
|
|
230
|
+
self._shape = self._parent._shape
|
|
231
|
+
self._tipstyle = self._parent._tipstyle
|
|
232
|
+
|
|
233
|
+
self._ballooncolour = self._parent._ballooncolour
|
|
234
|
+
self._balloonmsgcolour = self._parent._balloonmsgcolour
|
|
235
|
+
self._balloonmsgfont = self._parent._balloonmsgfont
|
|
236
|
+
|
|
237
|
+
if self._toptitle != "":
|
|
238
|
+
self._balloontitlecolour = self._parent._balloontitlecolour
|
|
239
|
+
self._balloontitlefont = self._parent._balloontitlefont
|
|
240
|
+
|
|
241
|
+
panel = wx.Panel(self, -1)
|
|
242
|
+
sizer = wx.BoxSizer(wx.VERTICAL)
|
|
243
|
+
|
|
244
|
+
self.panel = panel
|
|
245
|
+
|
|
246
|
+
subsizer = wx.BoxSizer(wx.VERTICAL)
|
|
247
|
+
hsizer = wx.BoxSizer(wx.HORIZONTAL)
|
|
248
|
+
subsizer.Add((0,20), 0, wx.EXPAND)
|
|
249
|
+
|
|
250
|
+
if self._topicon is not None:
|
|
251
|
+
stb = wx.StaticBitmap(panel, -1, self._topicon)
|
|
252
|
+
hsizer.Add(stb, 0, wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP, 10)
|
|
253
|
+
self._balloonbmp = stb
|
|
254
|
+
|
|
255
|
+
if self._toptitle != "":
|
|
256
|
+
stt = wx.StaticText(panel, -1, self._toptitle)
|
|
257
|
+
stt.SetFont(wx.Font(9, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False))
|
|
258
|
+
if self._topicon is None:
|
|
259
|
+
hsizer.Add((10,0), 0, wx.EXPAND)
|
|
260
|
+
|
|
261
|
+
hsizer.Add(stt, 1, wx.EXPAND | wx.TOP, 10)
|
|
262
|
+
|
|
263
|
+
self._balloontitle = stt
|
|
264
|
+
self._balloontitle.SetForegroundColour(self._balloontitlecolour)
|
|
265
|
+
self._balloontitle.SetFont(self._balloontitlefont)
|
|
266
|
+
|
|
267
|
+
if self._tipstyle == BT_BUTTON:
|
|
268
|
+
self._closebutton = GenButton(panel, -1, "X", style=wx.NO_BORDER)
|
|
269
|
+
self._closebutton.SetMinSize((16,16))
|
|
270
|
+
self._closebutton.SetFont(wx.Font(9, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False))
|
|
271
|
+
self._closebutton.Bind(wx.EVT_ENTER_WINDOW, self.OnEnterButton)
|
|
272
|
+
self._closebutton.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveButton)
|
|
273
|
+
self._closebutton.SetUseFocusIndicator(False)
|
|
274
|
+
if self._toptitle != "":
|
|
275
|
+
hsizer.Add(self._closebutton, 0, wx.TOP | wx.RIGHT, 5)
|
|
276
|
+
else:
|
|
277
|
+
hsizer.Add((10,0), 1, wx.EXPAND)
|
|
278
|
+
hsizer.Add(self._closebutton, 0, wx.ALIGN_RIGHT | wx.TOP
|
|
279
|
+
| wx.RIGHT, 5)
|
|
280
|
+
|
|
281
|
+
if self._topicon is not None or self._toptitle != "" \
|
|
282
|
+
or self._tipstyle == BT_BUTTON:
|
|
283
|
+
|
|
284
|
+
subsizer.Add(hsizer, 0, wx.EXPAND | wx.BOTTOM, 5)
|
|
285
|
+
|
|
286
|
+
self._firstline = line = wx.StaticLine(panel, -1, style=wx.LI_HORIZONTAL)
|
|
287
|
+
|
|
288
|
+
if self._topicon is not None or self._toptitle != "" \
|
|
289
|
+
or self._tipstyle == BT_BUTTON:
|
|
290
|
+
subsizer.Add(self._firstline, 0, wx.EXPAND | wx.LEFT | wx.RIGHT
|
|
291
|
+
| wx.BOTTOM, 10)
|
|
292
|
+
else:
|
|
293
|
+
subsizer.Add(self._firstline, 0, wx.EXPAND | wx.LEFT | wx.RIGHT
|
|
294
|
+
| wx.BOTTOM | wx.TOP, 10)
|
|
295
|
+
|
|
296
|
+
mainstt = wx.StaticText(panel, -1, self._message)
|
|
297
|
+
|
|
298
|
+
self._balloonmsg = mainstt
|
|
299
|
+
self._balloonmsg.SetForegroundColour(self._balloonmsgcolour)
|
|
300
|
+
self._balloonmsg.SetFont(self._balloonmsgfont)
|
|
301
|
+
|
|
302
|
+
subsizer.Add(self._balloonmsg, 1, wx.EXPAND | wx.LEFT | wx.RIGHT |
|
|
303
|
+
wx.BOTTOM, 10)
|
|
304
|
+
self._secondline = wx.StaticLine(panel, -1, style=wx.LI_HORIZONTAL)
|
|
305
|
+
subsizer.Add(self._secondline, 0, wx.EXPAND | wx.LEFT | wx.RIGHT, 10)
|
|
306
|
+
subsizer.Add((0,0),1)
|
|
307
|
+
panel.SetSizer(subsizer)
|
|
308
|
+
|
|
309
|
+
sizer.Add(panel, 1, wx.EXPAND)
|
|
310
|
+
self.SetSizerAndFit(sizer)
|
|
311
|
+
sizer.Layout()
|
|
312
|
+
|
|
313
|
+
if self._tipstyle == BT_CLICK:
|
|
314
|
+
if self._toptitle != "":
|
|
315
|
+
self._balloontitle.Bind(wx.EVT_LEFT_DOWN, self.OnClose)
|
|
316
|
+
|
|
317
|
+
if self._topicon is not None:
|
|
318
|
+
self._balloonbmp.Bind(wx.EVT_LEFT_DOWN, self.OnClose)
|
|
319
|
+
|
|
320
|
+
self._balloonmsg.Bind(wx.EVT_LEFT_DOWN, self.OnClose)
|
|
321
|
+
self.panel.Bind(wx.EVT_LEFT_DOWN, self.OnClose)
|
|
322
|
+
|
|
323
|
+
elif self._tipstyle == BT_BUTTON:
|
|
324
|
+
self._closebutton.Bind(wx.EVT_BUTTON, self.OnClose)
|
|
325
|
+
|
|
326
|
+
self.panel.SetBackgroundColour(self._ballooncolour)
|
|
327
|
+
|
|
328
|
+
if wx.Platform == "__WXGTK__":
|
|
329
|
+
self.Bind(wx.EVT_WINDOW_CREATE, self.SetBalloonShape)
|
|
330
|
+
else:
|
|
331
|
+
self.SetBalloonShape()
|
|
332
|
+
|
|
333
|
+
self.Show(True)
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
def SetBalloonShape(self, event=None):
|
|
337
|
+
"""
|
|
338
|
+
Sets the balloon shape.
|
|
339
|
+
|
|
340
|
+
:param `event`: on wxGTK, a :class:`wx.WindowCreateEvent` event to process.
|
|
341
|
+
"""
|
|
342
|
+
|
|
343
|
+
size = self.GetSize()
|
|
344
|
+
pos = self.GetPosition()
|
|
345
|
+
|
|
346
|
+
dc = wx.MemoryDC(wx.Bitmap(1,1))
|
|
347
|
+
textlabel = self._balloonmsg.GetLabel()
|
|
348
|
+
textfont = self._balloonmsg.GetFont()
|
|
349
|
+
textextent = dc.GetFullTextExtent(textlabel, textfont)
|
|
350
|
+
|
|
351
|
+
boxheight = size.y - textextent[1]*len(textlabel.split("\n"))
|
|
352
|
+
boxwidth = size.x
|
|
353
|
+
|
|
354
|
+
position = wx.GetMousePosition()
|
|
355
|
+
|
|
356
|
+
xpos = position[0]
|
|
357
|
+
ypos = position[1]
|
|
358
|
+
|
|
359
|
+
if xpos > 20 and ypos > 20:
|
|
360
|
+
|
|
361
|
+
# This Is NW Positioning
|
|
362
|
+
positioning = "NW"
|
|
363
|
+
xpos = position[0] - boxwidth + 20
|
|
364
|
+
ypos = position[1] - boxheight - 20
|
|
365
|
+
|
|
366
|
+
elif xpos <= 20 and ypos <= 20:
|
|
367
|
+
|
|
368
|
+
# This Is SE Positioning
|
|
369
|
+
positioning = "SE"
|
|
370
|
+
xpos = position[0] - 20
|
|
371
|
+
ypos = position[1]
|
|
372
|
+
|
|
373
|
+
elif xpos > 20 and ypos <= 20:
|
|
374
|
+
|
|
375
|
+
# This Is SW Positioning
|
|
376
|
+
positioning = "SW"
|
|
377
|
+
xpos = position[0] - boxwidth + 20
|
|
378
|
+
ypos = position[1]
|
|
379
|
+
|
|
380
|
+
else:
|
|
381
|
+
|
|
382
|
+
# This Is NE Positioning
|
|
383
|
+
positioning = "NE"
|
|
384
|
+
xpos = position[0]
|
|
385
|
+
ypos = position[1] - boxheight + 20
|
|
386
|
+
|
|
387
|
+
bmp = wx.Bitmap(size.x,size.y)
|
|
388
|
+
dc = wx.BufferedDC(None, bmp)
|
|
389
|
+
dc.SetBackground(wx.BLACK_BRUSH)
|
|
390
|
+
dc.Clear()
|
|
391
|
+
dc.SetPen(wx.Pen(wx.BLACK, 1, wx.PENSTYLE_TRANSPARENT))
|
|
392
|
+
|
|
393
|
+
if self._shape == BT_ROUNDED:
|
|
394
|
+
dc.DrawRoundedRectangle(0, 20, boxwidth, boxheight-20, 12)
|
|
395
|
+
|
|
396
|
+
elif self._shape == BT_RECTANGLE:
|
|
397
|
+
dc.DrawRectangle(0, 20, boxwidth, boxheight-20)
|
|
398
|
+
|
|
399
|
+
if positioning == "NW":
|
|
400
|
+
dc.DrawPolygon(((boxwidth-40, boxheight), (boxwidth-20, boxheight+20),
|
|
401
|
+
(boxwidth-20, boxheight)))
|
|
402
|
+
elif positioning == "SE":
|
|
403
|
+
dc.DrawPolygon(((20, 20), (20, 0), (40, 20)))
|
|
404
|
+
|
|
405
|
+
elif positioning == "SW":
|
|
406
|
+
dc.DrawPolygon(((boxwidth-40, 20), (boxwidth-20, 0), (boxwidth-20, 20)))
|
|
407
|
+
|
|
408
|
+
else:
|
|
409
|
+
dc.DrawPolygon(((20, boxheight), (20, boxheight+20), (40, boxheight)))
|
|
410
|
+
|
|
411
|
+
r = wx.Region(bmp, wx.BLACK)
|
|
412
|
+
self.hasShape = self.SetShape(r)
|
|
413
|
+
|
|
414
|
+
if self._tipstyle == BT_BUTTON:
|
|
415
|
+
colour = self.panel.GetBackgroundColour()
|
|
416
|
+
self._closebutton.SetBackgroundColour(colour)
|
|
417
|
+
|
|
418
|
+
self.SetPosition((xpos, ypos))
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
def OnEnterButton(self, event):
|
|
422
|
+
"""
|
|
423
|
+
Handles the ``wx.EVT_ENTER_WINDOW`` for the :class:`BalloonTip` button.
|
|
424
|
+
|
|
425
|
+
When the :class:`BalloonTip` is created with the `tipstyle` = ``BT_BUTTON``, this event
|
|
426
|
+
provide some kind of 3D effect when the mouse enters the button area.
|
|
427
|
+
|
|
428
|
+
:param `event`: a :class:`MouseEvent` event to be processed.
|
|
429
|
+
"""
|
|
430
|
+
|
|
431
|
+
button = event.GetEventObject()
|
|
432
|
+
colour = button.GetBackgroundColour()
|
|
433
|
+
red = colour.Red()
|
|
434
|
+
green = colour.Green()
|
|
435
|
+
blue = colour.Blue()
|
|
436
|
+
|
|
437
|
+
if red < 30:
|
|
438
|
+
red = red + 30
|
|
439
|
+
if green < 30:
|
|
440
|
+
green = green + 30
|
|
441
|
+
if blue < 30:
|
|
442
|
+
blue = blue + 30
|
|
443
|
+
|
|
444
|
+
colour = wx.Colour(red-30, green-30, blue-30)
|
|
445
|
+
button.SetBackgroundColour(colour)
|
|
446
|
+
button.SetForegroundColour(wx.WHITE)
|
|
447
|
+
button.Refresh()
|
|
448
|
+
event.Skip()
|
|
449
|
+
|
|
450
|
+
|
|
451
|
+
def OnLeaveButton(self, event):
|
|
452
|
+
"""
|
|
453
|
+
Handles the ``wx.EVT_LEAVE_WINDOW`` for the :class:`BalloonTip` button.
|
|
454
|
+
|
|
455
|
+
When the :class:`BalloonTip` is created with the `tipstyle` = ``BT_BUTTON``, this event
|
|
456
|
+
provide some kind of 3D effect when the mouse enters the button area.
|
|
457
|
+
|
|
458
|
+
:param `event`: a :class:`MouseEvent` event to be processed.
|
|
459
|
+
"""
|
|
460
|
+
|
|
461
|
+
button = event.GetEventObject()
|
|
462
|
+
colour = self.panel.GetBackgroundColour()
|
|
463
|
+
button.SetBackgroundColour(colour)
|
|
464
|
+
button.SetForegroundColour(wx.BLACK)
|
|
465
|
+
button.Refresh()
|
|
466
|
+
event.Skip()
|
|
467
|
+
|
|
468
|
+
|
|
469
|
+
def OnClose(self, event):
|
|
470
|
+
"""
|
|
471
|
+
Handles the ``wx.EVT_CLOSE`` event for :class:`BalloonTip`.
|
|
472
|
+
|
|
473
|
+
:param `event`: a :class:`CloseEvent` event to be processed.
|
|
474
|
+
"""
|
|
475
|
+
|
|
476
|
+
if isinstance(self._parent._widget, wx.adv.TaskBarIcon):
|
|
477
|
+
self._parent.taskbarcreation = 0
|
|
478
|
+
self._parent.taskbartime.Stop()
|
|
479
|
+
del self._parent.taskbartime
|
|
480
|
+
del self._parent.BalloonFrame
|
|
481
|
+
|
|
482
|
+
self.Destroy()
|
|
483
|
+
|
|
484
|
+
|
|
485
|
+
# ---------------------------------------------------------------
|
|
486
|
+
# Class BalloonTip
|
|
487
|
+
# ---------------------------------------------------------------
|
|
488
|
+
# This Is The Main BalloonTip Implementation
|
|
489
|
+
# ---------------------------------------------------------------
|
|
490
|
+
|
|
491
|
+
class BalloonTip(object):
|
|
492
|
+
"""
|
|
493
|
+
:class:`BalloonTip` is a class that allows you to display tooltips in a balloon style
|
|
494
|
+
window.
|
|
495
|
+
|
|
496
|
+
This is the main class implementation.
|
|
497
|
+
"""
|
|
498
|
+
def __init__(self, topicon=None, toptitle="",
|
|
499
|
+
message="", shape=BT_ROUNDED, tipstyle=BT_LEAVE):
|
|
500
|
+
"""
|
|
501
|
+
Default class constructor.
|
|
502
|
+
|
|
503
|
+
:param `topicon`: an icon that will be displayed on the top-left part of the
|
|
504
|
+
:class:`BalloonTip` frame. If set to ``None``, no icon will be displayed;
|
|
505
|
+
:type `topicon`: :class:`wx.Bitmap` or ``None``
|
|
506
|
+
:param string `toptitle`: a title that will be displayed on the top part of the
|
|
507
|
+
:class:`BalloonTip` frame. If set to an empty string, no title will be displayed;
|
|
508
|
+
:param string `message`: the tip message that will be displayed. It can not be set to
|
|
509
|
+
an empty string;
|
|
510
|
+
:param integer `shape`: the :class:`BalloonTip` shape. It can be one of the following:
|
|
511
|
+
|
|
512
|
+
======================= ========= ====================================
|
|
513
|
+
Shape Flag Hex Value Description
|
|
514
|
+
======================= ========= ====================================
|
|
515
|
+
``BT_ROUNDED`` 0x1 :class:`BalloonTip` will have a rounded rectangular shape.
|
|
516
|
+
``BT_RECTANGLE`` 0x2 :class:`BalloonTip` will have a rectangular shape.
|
|
517
|
+
======================= ========= ====================================
|
|
518
|
+
|
|
519
|
+
:param integer `tipstyle`: the :class:`BalloonTip` destruction behavior. It can be one of:
|
|
520
|
+
|
|
521
|
+
======================= ========= ====================================
|
|
522
|
+
Tip Flag Hex Value Description
|
|
523
|
+
======================= ========= ====================================
|
|
524
|
+
``BT_LEAVE`` 0x3 :class:`BalloonTip` will be destroyed when the user moves the mouse outside the target window.
|
|
525
|
+
``BT_CLICK`` 0x4 :class:`BalloonTip` will be destroyed when the user click on :class:`BalloonTip`.
|
|
526
|
+
``BT_BUTTON`` 0x5 :class:`BalloonTip` will be destroyed when the user click on the close button.
|
|
527
|
+
======================= ========= ====================================
|
|
528
|
+
|
|
529
|
+
:raise: `Exception` in the following cases:
|
|
530
|
+
|
|
531
|
+
- The `message` parameter is an empty string;
|
|
532
|
+
- The `shape` parameter has an invalid value (i.e., it's not one of ``BT_ROUNDED``, ``BT_RECTANGLE``);
|
|
533
|
+
- The `tipstyle` parameter has an invalid value (i.e., it's not one of ``BT_LEAVE``, ``BT_CLICK``, ``BT_BUTTON``).
|
|
534
|
+
|
|
535
|
+
"""
|
|
536
|
+
|
|
537
|
+
self._shape = shape
|
|
538
|
+
self._topicon = topicon
|
|
539
|
+
self._toptitle = toptitle
|
|
540
|
+
self._message = message
|
|
541
|
+
self._tipstyle = tipstyle
|
|
542
|
+
|
|
543
|
+
app = wx.GetApp()
|
|
544
|
+
self._runningapp = app
|
|
545
|
+
self._runningapp.__tooltipenabled__ = True
|
|
546
|
+
|
|
547
|
+
if self._message == "":
|
|
548
|
+
raise Exception("\nERROR: You Should At Least Set The Message For The BalloonTip")
|
|
549
|
+
|
|
550
|
+
if self._shape not in [BT_ROUNDED, BT_RECTANGLE]:
|
|
551
|
+
raise Exception('\nERROR: BalloonTip Shape Should Be One Of "BT_ROUNDED", "BT_RECTANGLE"')
|
|
552
|
+
|
|
553
|
+
if self._tipstyle not in [BT_LEAVE, BT_CLICK, BT_BUTTON]:
|
|
554
|
+
raise Exception('\nERROR: BalloonTip TipStyle Should Be One Of "BT_LEAVE", '\
|
|
555
|
+
'"BT_CLICK", "BT_BUTTON"')
|
|
556
|
+
|
|
557
|
+
self.SetStartDelay()
|
|
558
|
+
self.SetEndDelay()
|
|
559
|
+
self.SetBalloonColour()
|
|
560
|
+
|
|
561
|
+
if toptitle != "":
|
|
562
|
+
self.SetTitleFont()
|
|
563
|
+
self.SetTitleColour()
|
|
564
|
+
|
|
565
|
+
if topicon is not None:
|
|
566
|
+
self.SetBalloonIcon(topicon)
|
|
567
|
+
|
|
568
|
+
self.SetMessageFont()
|
|
569
|
+
self.SetMessageColour()
|
|
570
|
+
|
|
571
|
+
|
|
572
|
+
def SetTarget(self, widget):
|
|
573
|
+
"""
|
|
574
|
+
Sets the target control/window for the :class:`BalloonTip`.
|
|
575
|
+
|
|
576
|
+
:param `widget`: any subclass of :class:`wx.Window`.
|
|
577
|
+
"""
|
|
578
|
+
|
|
579
|
+
self._widget = widget
|
|
580
|
+
|
|
581
|
+
if isinstance(widget, wx.adv.TaskBarIcon):
|
|
582
|
+
self._widget.Bind(wx.adv.EVT_TASKBAR_MOVE, self.OnTaskBarMove)
|
|
583
|
+
self._widget.Bind(wx.EVT_WINDOW_DESTROY, self.OnDestroy)
|
|
584
|
+
self.taskbarcreation = 0
|
|
585
|
+
else:
|
|
586
|
+
self._widget.Bind(wx.EVT_ENTER_WINDOW, self.OnWidgetEnter)
|
|
587
|
+
self._widget.Bind(wx.EVT_LEAVE_WINDOW, self.OnWidgetLeave)
|
|
588
|
+
self._widget.Bind(wx.EVT_MOTION, self.OnWidgetMotion)
|
|
589
|
+
self._widget.Bind(wx.EVT_WINDOW_DESTROY, self.OnDestroy)
|
|
590
|
+
|
|
591
|
+
|
|
592
|
+
def GetTarget(self):
|
|
593
|
+
"""
|
|
594
|
+
Returns the target window for the :class:`BalloonTip`.
|
|
595
|
+
|
|
596
|
+
:return: An instance of :class:`wx.Window`.
|
|
597
|
+
|
|
598
|
+
:raise: `Exception` if the :meth:`~BalloonTip.SetTarget` method has not previously called.
|
|
599
|
+
"""
|
|
600
|
+
|
|
601
|
+
if not hasattr(self, "_widget"):
|
|
602
|
+
raise Exception("\nERROR: BalloonTip Target Has Not Been Set")
|
|
603
|
+
|
|
604
|
+
return self._widget
|
|
605
|
+
|
|
606
|
+
|
|
607
|
+
def SetStartDelay(self, delay=1):
|
|
608
|
+
"""
|
|
609
|
+
Sets the delay time after which the :class:`BalloonTip` is created.
|
|
610
|
+
|
|
611
|
+
:param integer `delay`: the number of milliseconds after which :class:`BalloonTip` is created.
|
|
612
|
+
|
|
613
|
+
:raise: `Exception` if `delay` is less than ``1`` milliseconds.
|
|
614
|
+
"""
|
|
615
|
+
|
|
616
|
+
if delay < 1:
|
|
617
|
+
raise Exception("\nERROR: Delay Time For BalloonTip Creation Should Be Greater Than 1 ms")
|
|
618
|
+
|
|
619
|
+
self._startdelaytime = delay
|
|
620
|
+
|
|
621
|
+
|
|
622
|
+
def GetStartDelay(self):
|
|
623
|
+
"""
|
|
624
|
+
Returns the delay time after which the :class:`BalloonTip` is created.
|
|
625
|
+
|
|
626
|
+
:return: the delay time, in milliseconds.
|
|
627
|
+
"""
|
|
628
|
+
|
|
629
|
+
return self._startdelaytime
|
|
630
|
+
|
|
631
|
+
|
|
632
|
+
def SetEndDelay(self, delay = 1000000):
|
|
633
|
+
"""
|
|
634
|
+
Sets the delay time after which the BalloonTip is destroyed.
|
|
635
|
+
|
|
636
|
+
:param integer `delay`: the number of milliseconds after which :class:`BalloonTip` is destroyed.
|
|
637
|
+
|
|
638
|
+
:raise: `Exception` if `delay` is less than ``1`` milliseconds.
|
|
639
|
+
"""
|
|
640
|
+
|
|
641
|
+
if delay < 1:
|
|
642
|
+
raise Exception("\nERROR: Delay Time For BalloonTip Destruction Should Be Greater Than 1 ms")
|
|
643
|
+
|
|
644
|
+
self._enddelaytime = delay
|
|
645
|
+
|
|
646
|
+
|
|
647
|
+
def GetEndDelay(self):
|
|
648
|
+
"""
|
|
649
|
+
Returns the delay time after which the :class:`BalloonTip` is destroyed.
|
|
650
|
+
|
|
651
|
+
:return: the delay time, in milliseconds.
|
|
652
|
+
"""
|
|
653
|
+
|
|
654
|
+
return self._enddelaytime
|
|
655
|
+
|
|
656
|
+
|
|
657
|
+
def OnWidgetEnter(self, event):
|
|
658
|
+
"""
|
|
659
|
+
Handles the ``wx.EVT_ENTER_WINDOW`` for the target control/window and
|
|
660
|
+
starts the :class:`BalloonTip` timer for creation.
|
|
661
|
+
|
|
662
|
+
:param `event`: a :class:`MouseEvent` event to be processed.
|
|
663
|
+
"""
|
|
664
|
+
|
|
665
|
+
if hasattr(self, "BalloonFrame"):
|
|
666
|
+
if self.BalloonFrame:
|
|
667
|
+
return
|
|
668
|
+
|
|
669
|
+
if not self._runningapp.__tooltipenabled__:
|
|
670
|
+
return
|
|
671
|
+
|
|
672
|
+
self.showtime = wx.Timer(self._widget)
|
|
673
|
+
self._widget.Bind(wx.EVT_TIMER, self.NotifyTimer, self.showtime)
|
|
674
|
+
self.showtime.Start(self._startdelaytime)
|
|
675
|
+
|
|
676
|
+
event.Skip()
|
|
677
|
+
|
|
678
|
+
|
|
679
|
+
def OnWidgetLeave(self, event):
|
|
680
|
+
"""
|
|
681
|
+
Handles the ``wx.EVT_LEAVE_WINDOW`` for the target control/window.
|
|
682
|
+
|
|
683
|
+
:param `event`: a :class:`MouseEvent` event to be processed.
|
|
684
|
+
|
|
685
|
+
:note: If the BalloonTip `tipstyle` is set to ``BT_LEAVE``, the :class:`BalloonTip` is destroyed.
|
|
686
|
+
"""
|
|
687
|
+
|
|
688
|
+
if hasattr(self, "showtime"):
|
|
689
|
+
if self.showtime:
|
|
690
|
+
self.showtime.Stop()
|
|
691
|
+
del self.showtime
|
|
692
|
+
|
|
693
|
+
if hasattr(self, "BalloonFrame"):
|
|
694
|
+
if self.BalloonFrame:
|
|
695
|
+
if self._tipstyle == BT_LEAVE:
|
|
696
|
+
endtime = time.time()
|
|
697
|
+
if endtime - self.starttime > 0.1:
|
|
698
|
+
try:
|
|
699
|
+
self.BalloonFrame.Destroy()
|
|
700
|
+
except:
|
|
701
|
+
pass
|
|
702
|
+
else:
|
|
703
|
+
event.Skip()
|
|
704
|
+
else:
|
|
705
|
+
event.Skip()
|
|
706
|
+
else:
|
|
707
|
+
event.Skip()
|
|
708
|
+
|
|
709
|
+
|
|
710
|
+
def OnTaskBarMove(self, event):
|
|
711
|
+
"""
|
|
712
|
+
Handles the mouse motion inside the taskbar icon area.
|
|
713
|
+
|
|
714
|
+
:param `event`: a :class:`MouseEvent` event to be processed.
|
|
715
|
+
"""
|
|
716
|
+
|
|
717
|
+
if not hasattr(self, "BalloonFrame"):
|
|
718
|
+
if self.taskbarcreation == 0:
|
|
719
|
+
self.mousepos = wx.GetMousePosition()
|
|
720
|
+
self.currentmousepos = self.mousepos
|
|
721
|
+
self.taskbartime = wx.Timer(self._widget)
|
|
722
|
+
self._widget.Bind(wx.EVT_TIMER, self.TaskBarTimer, self.taskbartime)
|
|
723
|
+
self.taskbartime.Start(100)
|
|
724
|
+
self.showtime = wx.Timer(self._widget)
|
|
725
|
+
self._widget.Bind(wx.EVT_TIMER, self.NotifyTimer, self.showtime)
|
|
726
|
+
self.showtime.Start(self._startdelaytime)
|
|
727
|
+
|
|
728
|
+
if self.taskbarcreation == 0:
|
|
729
|
+
self.taskbarcreation = 1
|
|
730
|
+
|
|
731
|
+
return
|
|
732
|
+
|
|
733
|
+
event.Skip()
|
|
734
|
+
|
|
735
|
+
|
|
736
|
+
def OnWidgetMotion(self, event):
|
|
737
|
+
"""
|
|
738
|
+
Handle the mouse motion inside the target.
|
|
739
|
+
|
|
740
|
+
This prevents the annoying behavior of :class:`BalloonTip` to display when the
|
|
741
|
+
user does something else inside the window. The :class:`BalloonTip` window is
|
|
742
|
+
displayed only when the mouse does *not* move for the start delay time.
|
|
743
|
+
|
|
744
|
+
:param `event`: a :class:`MouseEvent` event to be processed.
|
|
745
|
+
"""
|
|
746
|
+
|
|
747
|
+
if hasattr(self, "BalloonFrame"):
|
|
748
|
+
if self.BalloonFrame:
|
|
749
|
+
return
|
|
750
|
+
|
|
751
|
+
if hasattr(self, "showtime"):
|
|
752
|
+
if self.showtime:
|
|
753
|
+
self.showtime.Start(self._startdelaytime)
|
|
754
|
+
|
|
755
|
+
event.Skip()
|
|
756
|
+
|
|
757
|
+
|
|
758
|
+
def NotifyTimer(self, event):
|
|
759
|
+
"""
|
|
760
|
+
The creation timer has expired. Creates the :class:`BalloonTip` frame.
|
|
761
|
+
|
|
762
|
+
:param `event`: a :class:`wx.TimerEvent` to be processed.
|
|
763
|
+
"""
|
|
764
|
+
|
|
765
|
+
self.BalloonFrame = BalloonFrame(self._widget, classparent=self)
|
|
766
|
+
self.BalloonFrame.Show(True)
|
|
767
|
+
self.starttime = time.time()
|
|
768
|
+
|
|
769
|
+
if hasattr(self, "showtime"):
|
|
770
|
+
self.showtime.Stop()
|
|
771
|
+
del self.showtime
|
|
772
|
+
|
|
773
|
+
self.destroytime = wx.Timer(self._widget)
|
|
774
|
+
self._widget.Bind(wx.EVT_TIMER, self.NotifyTimer, self.destroytime)
|
|
775
|
+
self.destroytime.Start(self._enddelaytime)
|
|
776
|
+
|
|
777
|
+
|
|
778
|
+
def TaskBarTimer(self, event):
|
|
779
|
+
"""
|
|
780
|
+
This timer check periodically the mouse position.
|
|
781
|
+
|
|
782
|
+
If the current mouse position is sufficiently far from the coordinates
|
|
783
|
+
it had when entered the taskbar icon and the :class:`BalloonTip` style is
|
|
784
|
+
``BT_LEAVE``, the :class:`BalloonTip` frame is destroyed.
|
|
785
|
+
|
|
786
|
+
:param `event`: a :class:`wx.TimerEvent` to be processed.
|
|
787
|
+
"""
|
|
788
|
+
|
|
789
|
+
self.currentmousepos = wx.GetMousePosition()
|
|
790
|
+
mousepos = self.mousepos
|
|
791
|
+
|
|
792
|
+
if abs(self.currentmousepos[0] - mousepos[0]) > 30 or \
|
|
793
|
+
abs(self.currentmousepos[1] - mousepos[1]) > 30:
|
|
794
|
+
if hasattr(self, "BalloonFrame"):
|
|
795
|
+
if self._tipstyle == BT_LEAVE:
|
|
796
|
+
try:
|
|
797
|
+
self.BalloonFrame.Destroy()
|
|
798
|
+
self.taskbartime.Stop()
|
|
799
|
+
del self.taskbartime
|
|
800
|
+
del self.BalloonFrame
|
|
801
|
+
self.taskbarcreation = 0
|
|
802
|
+
except:
|
|
803
|
+
pass
|
|
804
|
+
|
|
805
|
+
|
|
806
|
+
def DestroyTimer(self, event):
|
|
807
|
+
"""
|
|
808
|
+
The destruction timer has expired. Destroys the :class:`BalloonTip` frame.
|
|
809
|
+
|
|
810
|
+
:param `event`: a :class:`wx.TimerEvent` to be processed.
|
|
811
|
+
"""
|
|
812
|
+
|
|
813
|
+
self.destroytime.Stop()
|
|
814
|
+
del self.destroytime
|
|
815
|
+
|
|
816
|
+
try:
|
|
817
|
+
self.BalloonFrame.Destroy()
|
|
818
|
+
except:
|
|
819
|
+
pass
|
|
820
|
+
|
|
821
|
+
|
|
822
|
+
def SetBalloonShape(self, shape=BT_ROUNDED):
|
|
823
|
+
"""
|
|
824
|
+
Sets the :class:`BalloonTip` frame shape.
|
|
825
|
+
|
|
826
|
+
:param integer `shape`: should be one of ``BT_ROUNDED`` or ``BT_RECTANGLE``.
|
|
827
|
+
|
|
828
|
+
:raise: `Exception` if the `shape` parameter is not a valid value
|
|
829
|
+
(i.e., it's not one of ``BT_ROUNDED``, ``BT_RECTANGLE``);
|
|
830
|
+
"""
|
|
831
|
+
|
|
832
|
+
if shape not in [BT_ROUNDED, BT_RECTANGLE]:
|
|
833
|
+
raise Exception('\nERROR: BalloonTip Shape Should Be One Of "BT_ROUNDED", "BT_RECTANGLE"')
|
|
834
|
+
|
|
835
|
+
self._shape = shape
|
|
836
|
+
|
|
837
|
+
|
|
838
|
+
def GetBalloonShape(self):
|
|
839
|
+
"""
|
|
840
|
+
Returns the :class:`BalloonTip` frame shape.
|
|
841
|
+
|
|
842
|
+
:return: An integer, one of ``BT_ROUNDED``, ``BT_RECTANGLE``.
|
|
843
|
+
"""
|
|
844
|
+
|
|
845
|
+
return self._shape
|
|
846
|
+
|
|
847
|
+
|
|
848
|
+
def SetBalloonIcon(self, icon):
|
|
849
|
+
"""
|
|
850
|
+
Sets the :class:`BalloonTip` top-left icon.
|
|
851
|
+
|
|
852
|
+
:param `icon`: an instance of :class:`wx.Bitmap`.
|
|
853
|
+
|
|
854
|
+
:raise: `Exception` if the `icon` bitmap is not a valid :class:`wx.Bitmap`.
|
|
855
|
+
"""
|
|
856
|
+
|
|
857
|
+
if icon.IsOk():
|
|
858
|
+
self._topicon = icon
|
|
859
|
+
else:
|
|
860
|
+
raise Exception("\nERROR: Invalid Image Passed To BalloonTip")
|
|
861
|
+
|
|
862
|
+
|
|
863
|
+
def GetBalloonIcon(self):
|
|
864
|
+
"""
|
|
865
|
+
Returns the :class:`BalloonTip` top-left icon.
|
|
866
|
+
|
|
867
|
+
:return: An instance of :class:`wx.Bitmap`.
|
|
868
|
+
"""
|
|
869
|
+
|
|
870
|
+
return self._topicon
|
|
871
|
+
|
|
872
|
+
|
|
873
|
+
def SetBalloonTitle(self, title=""):
|
|
874
|
+
"""
|
|
875
|
+
Sets the :class:`BalloonTip` top title.
|
|
876
|
+
|
|
877
|
+
:param string `title`: a string to use as a :class:`BalloonTip` title.
|
|
878
|
+
"""
|
|
879
|
+
|
|
880
|
+
self._toptitle = title
|
|
881
|
+
|
|
882
|
+
|
|
883
|
+
def GetBalloonTitle(self):
|
|
884
|
+
"""
|
|
885
|
+
Returns the :class:`BalloonTip` top title.
|
|
886
|
+
|
|
887
|
+
:return: A string containing the top title.
|
|
888
|
+
"""
|
|
889
|
+
|
|
890
|
+
return self._toptitle
|
|
891
|
+
|
|
892
|
+
|
|
893
|
+
def SetBalloonMessage(self, message):
|
|
894
|
+
"""
|
|
895
|
+
Sets the :class:`BalloonTip` tip message.
|
|
896
|
+
|
|
897
|
+
:param string `message`: a string identifying the main message body of :class:`BalloonTip`.
|
|
898
|
+
|
|
899
|
+
:raise: `Exception` if the message is an empty string.
|
|
900
|
+
|
|
901
|
+
:note: The :class:`BalloonTip` message should never be empty.
|
|
902
|
+
"""
|
|
903
|
+
|
|
904
|
+
if len(message.strip()) < 1:
|
|
905
|
+
raise Exception("\nERROR: BalloonTip Message Can Not Be Empty")
|
|
906
|
+
|
|
907
|
+
self._message = message
|
|
908
|
+
|
|
909
|
+
|
|
910
|
+
def GetBalloonMessage(self):
|
|
911
|
+
"""
|
|
912
|
+
Returns the :class:`BalloonTip` tip message.
|
|
913
|
+
|
|
914
|
+
:return: A string containing the main message.
|
|
915
|
+
"""
|
|
916
|
+
|
|
917
|
+
return self._message
|
|
918
|
+
|
|
919
|
+
|
|
920
|
+
def SetBalloonTipStyle(self, tipstyle=BT_LEAVE):
|
|
921
|
+
"""
|
|
922
|
+
Sets the :class:`BalloonTip` `tipstyle` parameter.
|
|
923
|
+
|
|
924
|
+
:param integer `tipstyle`: one of the following bit set:
|
|
925
|
+
|
|
926
|
+
============== ========== =====================================
|
|
927
|
+
Tip Style Hex Value Description
|
|
928
|
+
============== ========== =====================================
|
|
929
|
+
``BT_LEAVE`` 0x3 :class:`BalloonTip` will be destroyed when the user moves the mouse outside the target window.
|
|
930
|
+
``BT_CLICK`` 0x4 :class:`BalloonTip` will be destroyed when the user click on :class:`BalloonTip`.
|
|
931
|
+
``BT_BUTTON`` 0x5 :class:`BalloonTip` will be destroyed when the user click on the close button.
|
|
932
|
+
============== ========== =====================================
|
|
933
|
+
|
|
934
|
+
:raise: `Exception` if the `tipstyle` parameter has an invalid value
|
|
935
|
+
(i.e., it's not one of ``BT_LEAVE``, ``BT_CLICK``, ``BT_BUTTON``).
|
|
936
|
+
"""
|
|
937
|
+
|
|
938
|
+
if tipstyle not in [BT_LEAVE, BT_CLICK, BT_BUTTON]:
|
|
939
|
+
raise Exception('\nERROR: BalloonTip TipStyle Should Be One Of "BT_LEAVE", '\
|
|
940
|
+
'"BT_CLICK", "BT_BUTTON"')
|
|
941
|
+
|
|
942
|
+
self._tipstyle = tipstyle
|
|
943
|
+
|
|
944
|
+
|
|
945
|
+
def GetBalloonTipStyle(self):
|
|
946
|
+
"""
|
|
947
|
+
Returns the :class:`BalloonTip` `tipstyle` parameter.
|
|
948
|
+
|
|
949
|
+
:return: An integer representing the style.
|
|
950
|
+
|
|
951
|
+
:see: :meth:`~BalloonTip.SetBalloonTipStyle`
|
|
952
|
+
"""
|
|
953
|
+
|
|
954
|
+
return self._tipstyle
|
|
955
|
+
|
|
956
|
+
|
|
957
|
+
def SetBalloonColour(self, colour=None):
|
|
958
|
+
"""
|
|
959
|
+
Sets the :class:`BalloonTip` background colour.
|
|
960
|
+
|
|
961
|
+
:param `colour`: a valid :class:`wx.Colour` instance.
|
|
962
|
+
"""
|
|
963
|
+
|
|
964
|
+
if colour is None:
|
|
965
|
+
colour = wx.Colour(255, 250, 205)
|
|
966
|
+
|
|
967
|
+
self._ballooncolour = colour
|
|
968
|
+
|
|
969
|
+
|
|
970
|
+
def GetBalloonColour(self):
|
|
971
|
+
"""
|
|
972
|
+
Returns the :class:`BalloonTip` background colour.
|
|
973
|
+
|
|
974
|
+
:return: An instance of :class:`wx.Colour`.
|
|
975
|
+
"""
|
|
976
|
+
|
|
977
|
+
return self._ballooncolour
|
|
978
|
+
|
|
979
|
+
|
|
980
|
+
def SetTitleFont(self, font=None):
|
|
981
|
+
"""
|
|
982
|
+
Sets the font for the top title.
|
|
983
|
+
|
|
984
|
+
:param `font`: a valid :class:`wx.Font` instance.
|
|
985
|
+
"""
|
|
986
|
+
|
|
987
|
+
if font is None:
|
|
988
|
+
font = wx.Font(9, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False)
|
|
989
|
+
|
|
990
|
+
self._balloontitlefont = font
|
|
991
|
+
|
|
992
|
+
|
|
993
|
+
def GetTitleFont(self):
|
|
994
|
+
"""
|
|
995
|
+
Returns the font for the top title.
|
|
996
|
+
|
|
997
|
+
:return: An instance of :class:`wx.Font`.
|
|
998
|
+
"""
|
|
999
|
+
|
|
1000
|
+
return self._balloontitlefont
|
|
1001
|
+
|
|
1002
|
+
|
|
1003
|
+
def SetMessageFont(self, font=None):
|
|
1004
|
+
"""
|
|
1005
|
+
Sets the font for the tip message.
|
|
1006
|
+
|
|
1007
|
+
:param `font`: a valid :class:`wx.Font` instance.
|
|
1008
|
+
"""
|
|
1009
|
+
|
|
1010
|
+
if font is None:
|
|
1011
|
+
font = wx.Font(8, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False)
|
|
1012
|
+
|
|
1013
|
+
self._balloonmsgfont = font
|
|
1014
|
+
|
|
1015
|
+
|
|
1016
|
+
def GetMessageFont(self):
|
|
1017
|
+
"""
|
|
1018
|
+
Returns the font for the tip message.
|
|
1019
|
+
|
|
1020
|
+
:return: An instance of :class:`wx.Font`.
|
|
1021
|
+
"""
|
|
1022
|
+
|
|
1023
|
+
return self._balloonmsgfont
|
|
1024
|
+
|
|
1025
|
+
|
|
1026
|
+
def SetTitleColour(self, colour=None):
|
|
1027
|
+
"""
|
|
1028
|
+
Sets the colour for the top title.
|
|
1029
|
+
|
|
1030
|
+
:param `colour`: a valid :class:`wx.Colour` instance.
|
|
1031
|
+
"""
|
|
1032
|
+
|
|
1033
|
+
if colour is None:
|
|
1034
|
+
colour = wx.BLACK
|
|
1035
|
+
|
|
1036
|
+
self._balloontitlecolour = colour
|
|
1037
|
+
|
|
1038
|
+
|
|
1039
|
+
def GetTitleColour(self):
|
|
1040
|
+
"""
|
|
1041
|
+
Returns the colour for the top title.
|
|
1042
|
+
|
|
1043
|
+
:return: An instance of :class:`wx.Colour`.
|
|
1044
|
+
"""
|
|
1045
|
+
|
|
1046
|
+
return self._balloontitlecolour
|
|
1047
|
+
|
|
1048
|
+
|
|
1049
|
+
def SetMessageColour(self, colour=None):
|
|
1050
|
+
"""
|
|
1051
|
+
Sets the colour for the tip message.
|
|
1052
|
+
|
|
1053
|
+
:param `colour`: a valid :class:`wx.Colour` instance.
|
|
1054
|
+
"""
|
|
1055
|
+
|
|
1056
|
+
if colour is None:
|
|
1057
|
+
colour = wx.BLACK
|
|
1058
|
+
|
|
1059
|
+
self._balloonmsgcolour = colour
|
|
1060
|
+
|
|
1061
|
+
|
|
1062
|
+
def GetMessageColour(self):
|
|
1063
|
+
"""
|
|
1064
|
+
Returns the colour for the tip message.
|
|
1065
|
+
|
|
1066
|
+
:return: An instance of :class:`wx.Colour`.
|
|
1067
|
+
"""
|
|
1068
|
+
|
|
1069
|
+
return self._balloonmsgcolour
|
|
1070
|
+
|
|
1071
|
+
|
|
1072
|
+
def OnDestroy(self, event):
|
|
1073
|
+
"""
|
|
1074
|
+
Handles the target destruction, specifically handling the ``wx.EVT_WINDOW_DESTROY``
|
|
1075
|
+
event.
|
|
1076
|
+
|
|
1077
|
+
:param `event`: a :class:`wx.WindowDestroyEvent` event to be processed.
|
|
1078
|
+
"""
|
|
1079
|
+
|
|
1080
|
+
if hasattr(self, "BalloonFrame"):
|
|
1081
|
+
if self.BalloonFrame:
|
|
1082
|
+
try:
|
|
1083
|
+
if isinstance(self._widget, wx.adv.TaskBarIcon):
|
|
1084
|
+
self._widget.Unbind(wx.adv.EVT_TASKBAR_MOVE)
|
|
1085
|
+
self.taskbartime.Stop()
|
|
1086
|
+
del self.taskbartime
|
|
1087
|
+
else:
|
|
1088
|
+
self._widget.Unbind(wx.EVT_MOTION)
|
|
1089
|
+
self._widget.Unbind(wx.EVT_LEAVE_WINDOW)
|
|
1090
|
+
self._widget.Unbind(wx.EVT_ENTER_WINDOW)
|
|
1091
|
+
|
|
1092
|
+
self.BalloonFrame.Destroy()
|
|
1093
|
+
|
|
1094
|
+
except:
|
|
1095
|
+
pass
|
|
1096
|
+
|
|
1097
|
+
del self.BalloonFrame
|
|
1098
|
+
|
|
1099
|
+
|
|
1100
|
+
def EnableTip(self, enable=True):
|
|
1101
|
+
"""
|
|
1102
|
+
Enable/disable globally the :class:`BalloonTip`.
|
|
1103
|
+
|
|
1104
|
+
:param bool `enable`: ``True`` to enable :class:`BalloonTip`, ``False`` otherwise.
|
|
1105
|
+
"""
|
|
1106
|
+
|
|
1107
|
+
self._runningapp.__tooltipenabled__ = enable
|
|
1108
|
+
|
|
1109
|
+
|
|
1110
|
+
if __name__ == '__main__':
|
|
1111
|
+
|
|
1112
|
+
import wx
|
|
1113
|
+
|
|
1114
|
+
class MyFrame(wx.Frame):
|
|
1115
|
+
|
|
1116
|
+
def __init__(self, parent):
|
|
1117
|
+
|
|
1118
|
+
wx.Frame.__init__(self, parent, -1, "BalloonTip Demo")
|
|
1119
|
+
|
|
1120
|
+
panel = wx.Panel(self)
|
|
1121
|
+
|
|
1122
|
+
# Let's suppose that in your application you have a wx.TextCtrl defined as:
|
|
1123
|
+
mytextctrl = wx.TextCtrl(panel, -1, "I am a textctrl", pos=(100, 100))
|
|
1124
|
+
|
|
1125
|
+
# You can define your BalloonTip as follows:
|
|
1126
|
+
tipballoon = BalloonTip(topicon=None, toptitle="textctrl",
|
|
1127
|
+
message="this is a textctrl",
|
|
1128
|
+
shape=BT_ROUNDED,
|
|
1129
|
+
tipstyle=BT_LEAVE)
|
|
1130
|
+
|
|
1131
|
+
# Set the BalloonTip target
|
|
1132
|
+
tipballoon.SetTarget(mytextctrl)
|
|
1133
|
+
# Set the BalloonTip background colour
|
|
1134
|
+
tipballoon.SetBalloonColour(wx.WHITE)
|
|
1135
|
+
# Set the font for the balloon title
|
|
1136
|
+
tipballoon.SetTitleFont(wx.Font(9, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False))
|
|
1137
|
+
# Set the colour for the balloon title
|
|
1138
|
+
tipballoon.SetTitleColour(wx.BLACK)
|
|
1139
|
+
# Leave the message font as default
|
|
1140
|
+
tipballoon.SetMessageFont()
|
|
1141
|
+
# Set the message (tip) foreground colour
|
|
1142
|
+
tipballoon.SetMessageColour(wx.LIGHT_GREY)
|
|
1143
|
+
# Set the start delay for the BalloonTip
|
|
1144
|
+
tipballoon.SetStartDelay(1000)
|
|
1145
|
+
# Set the time after which the BalloonTip is destroyed
|
|
1146
|
+
tipballoon.SetEndDelay(3000)
|
|
1147
|
+
|
|
1148
|
+
# our normal wxApp-derived class, as usual
|
|
1149
|
+
|
|
1150
|
+
app = wx.App(0)
|
|
1151
|
+
|
|
1152
|
+
frame = MyFrame(None)
|
|
1153
|
+
app.SetTopWindow(frame)
|
|
1154
|
+
frame.Show()
|
|
1155
|
+
|
|
1156
|
+
app.MainLoop()
|
|
1157
|
+
|
|
1158
|
+
|