📄 customtreectrl.py
字号:
dlg = CheckDialog(self, -1)
dlg.ShowModal()
event.Skip()
def SetTreeButtons(self, selection):
bitmap_plus = opj("bitmaps/plus" + str(selection+1) + ".ico")
bitmap_minus = opj("bitmaps/minus" + str(selection+1) + ".ico")
bitmap = wx.Bitmap(bitmap_plus, wx.BITMAP_TYPE_ICO)
width = bitmap.GetWidth()
il = wx.ImageList(width, width)
il.Add(wx.Bitmap(bitmap_plus, wx.BITMAP_TYPE_ICO))
il.Add(wx.Bitmap(bitmap_plus, wx.BITMAP_TYPE_ICO))
il.Add(wx.Bitmap(bitmap_minus, wx.BITMAP_TYPE_ICO))
il.Add(wx.Bitmap(bitmap_minus, wx.BITMAP_TYPE_ICO))
self.il = il
self.tree.SetButtonsImageList(il)
def SetCheckRadio(self, selection):
if selection == 0:
self.tree.SetImageListCheck(13, 13)
else:
bitmap_check = opj("bitmaps/aquachecked.ico")
bitmap_uncheck = opj("bitmaps/aquanotchecked.ico")
bitmap_flag = opj("bitmaps/aquaflagged.ico")
bitmap_unflag = opj("bitmaps/aquanotflagged.ico")
il = wx.ImageList(16, 16)
il.Add(wx.Bitmap(bitmap_check, wx.BITMAP_TYPE_ICO))
il.Add(wx.Bitmap(bitmap_uncheck, wx.BITMAP_TYPE_ICO))
il.Add(wx.Bitmap(bitmap_flag, wx.BITMAP_TYPE_ICO))
il.Add(wx.Bitmap(bitmap_unflag, wx.BITMAP_TYPE_ICO))
self.tree.SetImageListCheck(16, 16, il)
def OnBackgroundImage(self, event):
if hasattr(self, "backgroundimage"):
self.tree.SetBackgroundImage(self.backgroundimage)
self.backbutton.Enable(False)
self.imagebutton.Enable(True)
event.Skip()
def OnChooseImage(self, event):
wildcard = "JPEG Files (*.jpg)|*.jpg|" \
"Bitmap Files (*.bmp)|*.bmp|" \
"PNG Files (*.png)|*.png|" \
"Icon Files (*.ico)|*.ico|" \
"GIF Files (*.gif)|*.gif|" \
"All files (*.*)|*.*"
dlg = wx.FileDialog(self, "Choose An Image File", ".", "", wildcard, wx.OPEN)
if dlg.ShowModal() == wx.ID_OK:
path = dlg.GetPath()
else:
dlg.Destroy()
return
dlg.Destroy()
bitmap = wx.Bitmap(path, wx.BITMAP_TYPE_ANY)
self.tree.SetBackgroundImage(bitmap)
self.backgroundimage = bitmap
event.Skip()
def OnBackgroundColour(self, event):
self.imagebutton.Enable(False)
self.backbutton.Enable(True)
self.tree.SetBackgroundImage(None)
event.Skip()
def OnChooseBackground(self, event):
col1 = event.GetValue()
self.tree.SetBackgroundColour(col1)
event.Skip()
def OnCheckNormal(self, event):
self.radiohorizontal.Enable(False)
self.radiovertical.Enable(False)
self.firstcolour.Enable(False)
self.secondcolour.Enable(False)
self.focus.Enable(True)
self.unfocus.Enable(True)
self.checkgradient.SetValue(0)
self.checkvista.SetValue(0)
self.tree.EnableSelectionGradient(False)
self.tree.EnableSelectionVista(False)
event.Skip()
def OnFocusColour(self, event):
col1 = event.GetValue()
self.tree.SetHilightFocusColour(col1)
event.Skip()
def OnNonFocusColour(self, event):
col1 = event.GetValue()
self.tree.SetHilightNonFocusColour(col1)
event.Skip()
def OnCheckGradient(self, event):
self.radiohorizontal.Enable(True)
self.radiovertical.Enable(True)
self.firstcolour.Enable(True)
self.secondcolour.Enable(True)
self.checknormal.SetValue(0)
self.checkvista.SetValue(0)
self.focus.Enable(False)
self.unfocus.Enable(False)
self.tree.SetGradientStyle(self.radiovertical.GetValue())
self.tree.EnableSelectionVista(False)
self.tree.EnableSelectionGradient(True)
event.Skip()
def OnHorizontal(self, event):
self.tree.SetGradientStyle(self.radiovertical.GetValue())
event.Skip()
def OnVertical(self, event):
self.tree.SetGradientStyle(self.radiovertical.GetValue())
event.Skip()
def OnFirstColour(self, event):
col1 = event.GetValue()
self.tree.SetFirstGradientColour(wx.Colour(col1[0], col1[1], col1[2]))
event.Skip()
def OnSecondColour(self, event):
col1 = event.GetValue()
self.tree.SetSecondGradientColour(wx.Colour(col1[0], col1[1], col1[2]))
event.Skip()
def OnVista(self, event):
self.radiohorizontal.Enable(False)
self.radiovertical.Enable(False)
self.firstcolour.Enable(False)
self.secondcolour.Enable(False)
self.checknormal.SetValue(0)
self.checkgradient.SetValue(0)
self.focus.Enable(False)
self.unfocus.Enable(False)
self.tree.EnableSelectionGradient(False)
self.tree.EnableSelectionVista(True)
event.Skip()
#---------------------------------------------------------------------------
# CustomTreeCtrl Demo Implementation
#---------------------------------------------------------------------------
class CustomTreeCtrl(CT.CustomTreeCtrl):
def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition,
size=wx.DefaultSize,
style=wx.SUNKEN_BORDER | CT.TR_HAS_BUTTONS | CT.TR_HAS_VARIABLE_ROW_HEIGHT | wx.WANTS_CHARS,
log=None):
CT.CustomTreeCtrl.__init__(self, parent, id, pos, size, style)
alldata = dir(CT)
treestyles = []
events = []
for data in alldata:
if data.startswith("TR_"):
treestyles.append(data)
elif data.startswith("EVT_"):
events.append(data)
self.events = events
self.styles = treestyles
self.item = None
il = wx.ImageList(16, 16)
for items in ArtIDs[1:-1]:
bmp = wx.ArtProvider_GetBitmap(eval(items), wx.ART_TOOLBAR, (16, 16))
il.Add(bmp)
smileidx = il.Add(images.getSmilesBitmap())
numicons = il.GetImageCount()
self.AssignImageList(il)
self.count = 0
self.log = log
# NOTE: For some reason tree items have to have a data object in
# order to be sorted. Since our compare just uses the labels
# we don't need any real data, so we'll just use None below for
# the item data.
self.root = self.AddRoot("The Root Item")
if not(self.GetTreeStyle() & CT.TR_HIDE_ROOT):
self.SetPyData(self.root, None)
self.SetItemImage(self.root, 24, CT.TreeItemIcon_Normal)
self.SetItemImage(self.root, 13, CT.TreeItemIcon_Expanded)
textctrl = wx.TextCtrl(self, -1, "I Am A Simple\nMultiline wx.TexCtrl", style=wx.TE_MULTILINE)
self.gauge = wx.Gauge(self, -1, 50, style=wx.GA_HORIZONTAL|wx.GA_SMOOTH)
self.gauge.SetValue(0)
combobox = wx.ComboBox(self, -1, choices=["That", "Was", "A", "Nice", "Holyday!"], style=wx.CB_READONLY|wx.CB_DROPDOWN)
textctrl.Bind(wx.EVT_CHAR, self.OnTextCtrl)
combobox.Bind(wx.EVT_COMBOBOX, self.OnComboBox)
for x in range(15):
if x == 1:
child = self.AppendItem(self.root, "Item %d" % x + "\nHello World\nHappy wxPython-ing!")
self.SetItemBold(child, True)
else:
child = self.AppendItem(self.root, "Item %d" % x)
self.SetPyData(child, None)
self.SetItemImage(child, 24, CT.TreeItemIcon_Normal)
self.SetItemImage(child, 13, CT.TreeItemIcon_Expanded)
for y in range(5):
if y == 0 and x == 1:
last = self.AppendItem(child, "item %d-%s" % (x, chr(ord("a")+y)), ct_type=2, wnd=self.gauge)
elif y == 1 and x == 2:
last = self.AppendItem(child, "Item %d-%s" % (x, chr(ord("a")+y)), ct_type=1, wnd=textctrl)
elif 2 < y < 4:
last = self.AppendItem(child, "item %d-%s" % (x, chr(ord("a")+y)))
elif y == 4 and x == 1:
last = self.AppendItem(child, "item %d-%s" % (x, chr(ord("a")+y)), wnd=combobox)
else:
last = self.AppendItem(child, "item %d-%s" % (x, chr(ord("a")+y)), ct_type=2)
self.SetPyData(last, None)
self.SetItemImage(last, 24, CT.TreeItemIcon_Normal)
self.SetItemImage(last, 13, CT.TreeItemIcon_Expanded)
for z in range(5):
if z > 2:
item = self.AppendItem(last, "item %d-%s-%d" % (x, chr(ord("a")+y), z), ct_type=1)
elif 0 < z <= 2:
item = self.AppendItem(last, "item %d-%s-%d" % (x, chr(ord("a")+y), z), ct_type=2)
elif z == 0:
item = self.AppendItem(last, "item %d-%s-%d" % (x, chr(ord("a")+y), z))
self.SetItemHyperText(item, True)
self.SetPyData(item, None)
self.SetItemImage(item, 28, CT.TreeItemIcon_Normal)
self.SetItemImage(item, numicons-1, CT.TreeItemIcon_Selected)
self.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDClick)
self.Bind(wx.EVT_IDLE, self.OnIdle)
self.eventdict = {'EVT_TREE_BEGIN_DRAG': self.OnBeginDrag, 'EVT_TREE_BEGIN_LABEL_EDIT': self.OnBeginEdit,
'EVT_TREE_BEGIN_RDRAG': self.OnBeginRDrag, 'EVT_TREE_DELETE_ITEM': self.OnDeleteItem,
'EVT_TREE_END_DRAG': self.OnEndDrag, 'EVT_TREE_END_LABEL_EDIT': self.OnEndEdit,
'EVT_TREE_ITEM_ACTIVATED': self.OnActivate, 'EVT_TREE_ITEM_CHECKED': self.OnItemCheck,
'EVT_TREE_ITEM_CHECKING': self.OnItemChecking, 'EVT_TREE_ITEM_COLLAPSED': self.OnItemCollapsed,
'EVT_TREE_ITEM_COLLAPSING': self.OnItemCollapsing, 'EVT_TREE_ITEM_EXPANDED': self.OnItemExpanded,
'EVT_TREE_ITEM_EXPANDING': self.OnItemExpanding, 'EVT_TREE_ITEM_GETTOOLTIP': self.OnToolTip,
'EVT_TREE_ITEM_MENU': self.OnItemMenu, 'EVT_TREE_ITEM_RIGHT_CLICK': self.OnRightDown,
'EVT_TREE_KEY_DOWN': self.OnKey, 'EVT_TREE_SEL_CHANGED': self.OnSelChanged,
'EVT_TREE_SEL_CHANGING': self.OnSelChanging, "EVT_TREE_ITEM_HYPERLINK": self.OnHyperLink}
mainframe = wx.GetTopLevelParent(self)
if not hasattr(mainframe, "leftpanel"):
self.Bind(CT.EVT_TREE_ITEM_EXPANDED, self.OnItemExpanded)
self.Bind(CT.EVT_TREE_ITEM_COLLAPSED, self.OnItemCollapsed)
self.Bind(CT.EVT_TREE_SEL_CHANGED, self.OnSelChanged)
self.Bind(CT.EVT_TREE_SEL_CHANGING, self.OnSelChanging)
self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)
self.Bind(wx.EVT_RIGHT_UP, self.OnRightUp)
else:
for combos in mainframe.treeevents:
self.BindEvents(combos)
if hasattr(mainframe, "leftpanel"):
self.ChangeStyle(mainframe.treestyles)
if not(self.GetTreeStyle() & CT.TR_HIDE_ROOT):
self.SelectItem(self.root)
self.Expand(self.root)
def BindEvents(self, choice, recreate=False):
value = choice.GetValue()
text = choice.GetLabel()
evt = "CT." + text
binder = self.eventdict[text]
if value == 1:
if evt == "CT.EVT_TREE_BEGIN_RDRAG":
self.Bind(wx.EVT_RIGHT_DOWN, None)
self.Bind(wx.EVT_RIGHT_UP, None)
self.Bind(eval(evt), binder)
else:
self.Bind(eval(evt), None)
if evt == "CT.EVT_TREE_BEGIN_RDRAG":
self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)
self.Bind(wx.EVT_RIGHT_UP, self.OnRightUp)
def ChangeStyle(self, combos):
style = 0
for combo in combos:
if combo.GetValue() == 1:
style = style | eval("CT." + combo.GetLabel())
if self.GetTreeStyle() != style:
self.SetTreeStyle(style)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -