mirror of
https://github.com/wxWidgets/Phoenix.git
synced 2025-12-16 01:30:07 +01:00
379 lines
15 KiB
Python
379 lines
15 KiB
Python
#!/usr/bin/env python
|
|
|
|
# ----------------------------------------------------------------------------
|
|
# BalloonTip Demo Implementation
|
|
#
|
|
# This Demo Shows How To Use The BalloonTip Control, With Different Styles
|
|
# And Behaviors.
|
|
# ----------------------------------------------------------------------------
|
|
|
|
|
|
import wx
|
|
from wx.lib.stattext import GenStaticText as StaticText
|
|
from wx.lib.buttons import GenBitmapButton as BitmapButton
|
|
from wx.adv import TaskBarIcon as TaskBarIcon
|
|
|
|
import os
|
|
import sys
|
|
|
|
try:
|
|
dirName = os.path.dirname(os.path.abspath(__file__))
|
|
except:
|
|
dirName = os.path.dirname(os.path.abspath(sys.argv[0]))
|
|
|
|
sys.path.append(os.path.split(dirName)[0])
|
|
|
|
try:
|
|
from agw import balloontip as BT
|
|
except ImportError: # if it's not there locally, try the wxPython lib.
|
|
import wx.lib.agw.balloontip as BT
|
|
|
|
import images
|
|
|
|
ArtIDs = [ "wx.ART_HELP_PAGE",
|
|
"wx.ART_GO_FORWARD",
|
|
"wx.ART_FILE_OPEN",
|
|
"wx.ART_HELP",
|
|
"wx.ART_ERROR",
|
|
"wx.ART_QUESTION",
|
|
"wx.ART_WARNING",
|
|
"wx.ART_INFORMATION",
|
|
"wx.ART_HELP",
|
|
]
|
|
|
|
|
|
# ----------------------------------------------------------------------------
|
|
# Beginning Of BalloonTip Demo
|
|
# ----------------------------------------------------------------------------
|
|
|
|
class BalloonTipDemo(wx.Frame):
|
|
|
|
def __init__(self, parent, log):
|
|
|
|
wx.Frame.__init__(self, parent, title="BalloonTip wxPython Demo ;-)")
|
|
|
|
self.statusbar = self.CreateStatusBar(2)
|
|
self.statusbar.SetStatusWidths([-2, -1])
|
|
# statusbar fields
|
|
statusbar_fields = [("Welcome To WxPython " + wx.VERSION_STRING),
|
|
("BalloonTip Demo")]
|
|
|
|
for i in range(len(statusbar_fields)):
|
|
self.statusbar.SetStatusText(statusbar_fields[i], i)
|
|
|
|
self.SetIcon(images.Mondrian.GetIcon())
|
|
self.SetMenuBar(self.CreateMenuBar())
|
|
|
|
panel = wx.Panel(self, -1)
|
|
|
|
mainsizer = wx.FlexGridSizer(3, 4, hgap=2, vgap=2)
|
|
|
|
# Add A Button
|
|
button = wx.Button(panel, -1, "Press Me!")
|
|
# Add A TextCtrl
|
|
textctrl = wx.TextCtrl(panel, -1, "I Am A TextCtrl")
|
|
# Add A CheckBox
|
|
checkbox = wx.CheckBox(panel, -1, "3-State Checkbox",
|
|
style=wx.CHK_3STATE | wx.CHK_ALLOW_3RD_STATE_FOR_USER)
|
|
samplelist=['One', 'Two', 'Three', 'Four', 'Kick', 'The', 'Demo', 'Out',
|
|
'The', 'Door', ';-)']
|
|
# Add A Choice
|
|
choice = wx.Choice(panel, -1, choices = samplelist)
|
|
# Add A Gauge
|
|
gauge = wx.Gauge(panel, -1, 50, style=wx.GA_SMOOTH)
|
|
# Add A ListBox
|
|
listbox = wx.ListBox(panel, -1, choices=samplelist, style=wx.LB_SINGLE)
|
|
# Add A TreeCtrl
|
|
isz = (16,16)
|
|
treecontrol = wx.TreeCtrl(panel, -1)
|
|
il = wx.ImageList(isz[0], isz[1])
|
|
fldridx = il.Add(wx.ArtProvider.GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, isz))
|
|
fldropenidx = il.Add(wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN, wx.ART_OTHER, isz))
|
|
fileidx = il.Add(wx.ArtProvider.GetBitmap(wx.ART_REPORT_VIEW, wx.ART_OTHER, isz))
|
|
treecontrol.SetImageList(il)
|
|
self.il = il
|
|
root = treecontrol.AddRoot("ROOT")
|
|
treecontrol.SetItemData(root, None)
|
|
treecontrol.SetItemImage(root, fldridx, wx.TreeItemIcon_Normal)
|
|
treecontrol.SetItemImage(root, fldropenidx, wx.TreeItemIcon_Expanded)
|
|
for ii in range(11):
|
|
child = treecontrol.AppendItem(root, samplelist[ii])
|
|
treecontrol.SetItemData(child, None)
|
|
treecontrol.SetItemImage(child, fldridx, wx.TreeItemIcon_Normal)
|
|
treecontrol.SetItemImage(child, fldropenidx, wx.TreeItemIcon_Selected)
|
|
|
|
# Add A Slider
|
|
slider = wx.Slider(panel, -1, 25, 1, 100,
|
|
style=wx.SL_HORIZONTAL | wx.SL_AUTOTICKS)# | wx.SL_LABELS)
|
|
slider.SetTickFreq(5)
|
|
# Add Another TextCtrl
|
|
textctrl2 = wx.TextCtrl(panel, -1, "Another TextCtrl")
|
|
# Add A GenStaticText
|
|
statictext = StaticText(panel, -1, "Hello World!")
|
|
statictext.SetFont(wx.Font(9, wx.FONTFAMILY_SWISS,
|
|
wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False))
|
|
bmp = wx.ArtProvider.GetBitmap(wx.ART_INFORMATION,
|
|
wx.ART_TOOLBAR, (16,16))
|
|
# Add A GenBitmapButton
|
|
bitmapbutton = BitmapButton(panel, -1, bmp)
|
|
button2 = wx.Button(panel, -1, "Disable BalloonTip")
|
|
|
|
tbicon = TaskBarIcon()
|
|
tbicon.SetIcon(wx.BitmapBundle(images.Mondrian.GetIcon()))
|
|
|
|
controls = list(panel.GetChildren())
|
|
controls.append(tbicon)
|
|
self.tbicon = tbicon
|
|
|
|
# Add The Controls To The Main FlexGridSizer
|
|
mainsizer.Add(button, 0, wx.EXPAND | wx.ALL, 10)
|
|
mainsizer.Add(textctrl, 0, wx.EXPAND | wx.ALL, 10)
|
|
mainsizer.Add(checkbox, 0, wx.EXPAND | wx.ALL, 10)
|
|
mainsizer.Add(choice, 0, wx.EXPAND | wx.ALL, 10)
|
|
mainsizer.Add(gauge, 0, wx.ALL, 10)
|
|
mainsizer.Add(listbox, 0, wx.EXPAND | wx.ALL, 10)
|
|
mainsizer.Add(treecontrol, 0, wx.EXPAND, wx.ALL, 10)
|
|
mainsizer.Add(slider, 0, wx.ALL, 10)
|
|
mainsizer.Add(textctrl2, 0, wx.ALL, 10)
|
|
mainsizer.Add(statictext, 0, wx.EXPAND | wx.ALL, 10)
|
|
mainsizer.Add(bitmapbutton, 0, wx.ALL, 10)
|
|
mainsizer.Add(button2, 0, wx.ALL, 10)
|
|
|
|
panel.SetSizer(mainsizer)
|
|
mainsizer.Layout()
|
|
|
|
# Declare The BalloonTip Background Colours
|
|
bgcolours = [None, wx.WHITE, wx.GREEN, wx.BLUE, wx.CYAN, wx.RED, None, None,
|
|
wx.LIGHT_GREY, None, wx.WHITE, None, None]
|
|
|
|
# Declare The BalloonTip Top-Left Icons
|
|
icons = []
|
|
for ii in range(4):
|
|
bmp = wx.ArtProvider.GetBitmap(eval(ArtIDs[ii]), wx.ART_TOOLBAR, (16,16))
|
|
icons.append(bmp)
|
|
|
|
icons.extend([None]*5)
|
|
|
|
for ii in range(4, 9):
|
|
bmp = wx.ArtProvider.GetBitmap(eval(ArtIDs[ii]), wx.ART_TOOLBAR, (16,16))
|
|
icons.append(bmp)
|
|
|
|
# Declare The BalloonTip Top Titles
|
|
titles = ["Button Help", "Texctrl Help", "CheckBox Help", "Choice Help",
|
|
"Gauge Help", "", "", "Read Me Carefully!", "SpinCtrl Help",
|
|
"StaticText Help", "BitmapButton Help", "Button Help", "Taskbar Help"]
|
|
|
|
fontone = wx.Font(9, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, True)
|
|
fonttwo = wx.Font(14, wx.FONTFAMILY_SCRIPT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False)
|
|
fontthree = wx.Font(9, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_ITALIC, wx.FONTWEIGHT_NORMAL, False)
|
|
fontfour = wx.Font(8, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, True)
|
|
|
|
# Declare The BalloonTip Top Titles Fonts
|
|
titlefonts = [None, None, fontone, None, fonttwo, fontthree, None, None,
|
|
None, fontfour, fontthree, None, None]
|
|
|
|
# Declare The BalloonTip Top Titles Colours
|
|
titlecolours = [None, None, wx.WHITE, wx.YELLOW, None, wx.WHITE,
|
|
wx.BLUE, wx.RED, None, None, wx.LIGHT_GREY, None, None]
|
|
|
|
# Declare The BalloonTip Messages
|
|
msg1 = "This Is The Default BalloonTip Window\nYou Can Customize It! "\
|
|
"Look At The Demo!"
|
|
msg2 = "You Can Change The Background Colour\n Of The Balloon Window."
|
|
msg3 = "You Can Also Change The Font And The\nColour For The Title."
|
|
msg4 = "I Have Nothing Special To Suggest!\n\nWelcome To wxPython " + \
|
|
wx.VERSION_STRING + " !"
|
|
msg5 = "What About If I Don't Want The Icon?\nNo Problem!"
|
|
msg6 = "I Don't Have The Icon Nor The Title.\n\nDo You Love Me Anyway?"
|
|
msg7 = "Some Comments On The Window Shape:\n\n- BT_ROUNDED: Creates A "\
|
|
"Rounded Rectangle;\n- BT_RECTANGLE: Creates A Rectangle.\n"
|
|
msg8 = "Some Comments On The BalloonTip Style:\n\n"\
|
|
"BT_LEAVE: The BalloonTip Is Destroyed When\nThe Mouse Leaves"\
|
|
"The Target Widget;\n\nBT_CLICK: The BalloonTip Is Destroyed When\n"\
|
|
"You Click Any Region Of The BalloonTip;\n\nBT_BUTTON: The BalloonTip"\
|
|
" Is Destroyed When\nYou Click On The Top-Right Small Button."
|
|
msg9 = "Some Comments On Delay Time:\n\nBy Default, The Delay Time After Which\n"\
|
|
"The BalloonTip Is Destroyed Is Very Long.\nYou Can Change It By Using"\
|
|
" The\nSetEndDelay() Method."
|
|
msg10 = "I Have Nothing Special To Suggest!\n\nRead Me FAST, You Have Only 3 "\
|
|
"Seconds!"
|
|
msg11 = "I Hope You Will Enjoy BalloonTip!\nIf This Is The Case, Please\n"\
|
|
"Post Some Comments On wxPython\nMailing List!"
|
|
msg12 = "This Button Enable/Disable Globally\nThe BalloonTip On Your Application."
|
|
msg13 = "This Is A BalloonTip For The\nTaskBar Icon Of Your Application.\n"\
|
|
"All The Styles For BalloonTip Work."
|
|
|
|
messages = [msg1, msg2, msg3, msg4, msg5, msg6, msg7, msg8, msg9, msg10,
|
|
msg11, msg12, msg13]
|
|
|
|
# Declare The BalloonTip Tip Messages Colours
|
|
messagecolours = [None, None, None, wx.WHITE, wx.BLUE,
|
|
None, wx.BLUE, None, None, wx.RED, wx.GREEN,
|
|
wx.BLUE, None]
|
|
|
|
fontone = wx.Font(8, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, True)
|
|
fonttwo = wx.Font(8, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_ITALIC, wx.FONTWEIGHT_NORMAL, False)
|
|
fontthree = wx.Font(8, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, True)
|
|
|
|
# Declare The BalloonTip Tip Messages Fonts
|
|
messagefonts = [None, None, None, fontone, None, None, fonttwo, None,
|
|
fontthree, None, None, None, None]
|
|
|
|
# Declare The BalloonTip Frame Shapes
|
|
windowshapes = [BT.BT_ROUNDED, BT.BT_RECTANGLE, BT.BT_ROUNDED, BT.BT_RECTANGLE,
|
|
BT.BT_ROUNDED, BT.BT_RECTANGLE, BT.BT_ROUNDED, BT.BT_ROUNDED,
|
|
BT.BT_ROUNDED, BT.BT_RECTANGLE, BT.BT_ROUNDED, BT.BT_RECTANGLE, BT.BT_RECTANGLE]
|
|
|
|
# Declare The BalloonTip Destruction Style
|
|
tipstyles = [BT.BT_LEAVE, BT.BT_CLICK, BT.BT_BUTTON, BT.BT_LEAVE, BT.BT_CLICK,
|
|
BT.BT_LEAVE, BT.BT_CLICK, BT.BT_BUTTON, BT.BT_BUTTON, BT.BT_CLICK,
|
|
BT.BT_LEAVE, BT.BT_LEAVE, BT.BT_BUTTON]
|
|
|
|
# Set The Targets/Styles For The BalloonTip
|
|
for ii, widget in enumerate(controls):
|
|
tipballoon = BT.BalloonTip(topicon=icons[ii], toptitle=titles[ii],
|
|
message=messages[ii], shape=windowshapes[ii],
|
|
tipstyle=tipstyles[ii])
|
|
# Set The Target
|
|
tipballoon.SetTarget(widget)
|
|
# Set The Balloon Colour
|
|
tipballoon.SetBalloonColour(bgcolours[ii])
|
|
# Set The Font For The Top Title
|
|
tipballoon.SetTitleFont(titlefonts[ii])
|
|
# Set The Colour For The Top Title
|
|
tipballoon.SetTitleColour(titlecolours[ii])
|
|
# Set The Font For The Tip Message
|
|
tipballoon.SetMessageFont(messagefonts[ii])
|
|
# Set The Colour For The Tip Message
|
|
tipballoon.SetMessageColour(messagecolours[ii])
|
|
# Set The Delay After Which The BalloonTip Is Created
|
|
tipballoon.SetStartDelay(1000)
|
|
if ii == 9:
|
|
# Set The Delay After Which The BalloonTip Is Destroyed
|
|
tipballoon.SetEndDelay(3000)
|
|
|
|
# Store The Last BalloonTip Reference To Enable/Disable Globall The
|
|
# BalloonTip. You Can Store Any Of Them, Not Necessarily The Last One.
|
|
self.lasttip = tipballoon
|
|
self.gauge = gauge
|
|
self.count = 0
|
|
|
|
button2.Bind(wx.EVT_BUTTON, self.OnActivateBalloon)
|
|
self.Bind(wx.EVT_IDLE, self.IdleHandler)
|
|
|
|
frameSizer = wx.BoxSizer(wx.VERTICAL)
|
|
frameSizer.Add(panel, 1, wx.EXPAND)
|
|
self.SetSizer(frameSizer)
|
|
frameSizer.Layout()
|
|
self.Fit()
|
|
|
|
self.CenterOnParent()
|
|
|
|
|
|
def IdleHandler(self, event):
|
|
|
|
self.count = self.count + 1
|
|
|
|
if self.count >= 50:
|
|
self.count = 0
|
|
|
|
self.gauge.SetValue(self.count)
|
|
|
|
|
|
def CreateMenuBar(self):
|
|
|
|
# Make a menubar
|
|
file_menu = wx.Menu()
|
|
help_menu = wx.Menu()
|
|
|
|
TEST_QUIT = wx.NewIdRef()
|
|
TEST_ABOUT = wx.NewIdRef()
|
|
|
|
file_menu.Append(TEST_QUIT, "&Exit")
|
|
help_menu.Append(TEST_ABOUT, "&About")
|
|
|
|
menu_bar = wx.MenuBar()
|
|
|
|
menu_bar.Append(file_menu, "&File")
|
|
menu_bar.Append(help_menu, "&Help")
|
|
|
|
self.Bind(wx.EVT_MENU, self.OnAbout, id=TEST_ABOUT)
|
|
self.Bind(wx.EVT_MENU, self.OnQuit, id=TEST_QUIT)
|
|
self.Bind(wx.EVT_CLOSE, self.OnQuit)
|
|
|
|
return menu_bar
|
|
|
|
|
|
def OnQuit(self, event):
|
|
|
|
self.tbicon.RemoveIcon()
|
|
self.tbicon.Destroy()
|
|
self.Destroy()
|
|
|
|
|
|
def OnAbout(self, event):
|
|
|
|
msg = "This is the about dialog of the BalloonTip demo.\n\n" + \
|
|
"Author: Andrea Gavana @ 29 May 2005\n\n" + \
|
|
"Please report any bug/requests or improvements\n" + \
|
|
"to me at the following addresses:\n\n" + \
|
|
"andrea.gavana@agip.it\n" + "andrea_gavana@tin.it\n\n" + \
|
|
"Welcome To wxPython " + wx.VERSION_STRING + "!!"
|
|
|
|
dlg = wx.MessageDialog(self, msg, "BalloonTip Demo",
|
|
wx.OK | wx.ICON_INFORMATION)
|
|
dlg.SetFont(wx.Font(8, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "Verdana"))
|
|
dlg.ShowModal()
|
|
dlg.Destroy()
|
|
|
|
|
|
def OnActivateBalloon(self, event):
|
|
|
|
button = event.GetEventObject()
|
|
label = button.GetLabel()
|
|
tips = self.lasttip
|
|
|
|
if label == "Disable BalloonTip":
|
|
button.SetLabel("Enable BalloonTip")
|
|
tips.EnableTip(False)
|
|
else:
|
|
button.SetLabel("Disable BalloonTip")
|
|
tips.EnableTip(True)
|
|
|
|
event.Skip()
|
|
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
|
|
class TestPanel(wx.Panel):
|
|
def __init__(self, parent, log):
|
|
self.log = log
|
|
wx.Panel.__init__(self, parent, -1)
|
|
|
|
b = wx.Button(self, -1, " Test BalloonTip ", (50,50))
|
|
self.Bind(wx.EVT_BUTTON, self.OnButton, b)
|
|
|
|
|
|
def OnButton(self, evt):
|
|
self.win = BalloonTipDemo(self, self.log)
|
|
self.win.Show(True)
|
|
|
|
#----------------------------------------------------------------------
|
|
|
|
def runTest(frame, nb, log):
|
|
win = TestPanel(nb, log)
|
|
return win
|
|
|
|
#----------------------------------------------------------------------
|
|
|
|
|
|
overview = BT.__doc__
|
|
|
|
|
|
if __name__ == '__main__':
|
|
import sys,os
|
|
import run
|
|
run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
|
|
|