📄 customtreectrl.py
字号:
def OnCompareItems(self, item1, item2):
t1 = self.GetItemText(item1)
t2 = self.GetItemText(item2)
self.log.write('compare: ' + t1 + ' <> ' + t2 + "\n")
if t1 < t2:
return -1
if t1 == t2:
return 0
return 1
def OnIdle(self, event):
if self.gauge:
try:
if self.gauge.IsEnabled() and self.gauge.IsShown():
self.count = self.count + 1
if self.count >= 50:
self.count = 0
self.gauge.SetValue(self.count)
except:
self.gauge = None
event.Skip()
def OnRightDown(self, event):
pt = event.GetPosition()
item, flags = self.HitTest(pt)
if item:
self.item = item
self.log.write("OnRightClick: %s, %s, %s" % (self.GetItemText(item), type(item), item.__class__) + "\n")
self.SelectItem(item)
def OnRightUp(self, event):
item = self.item
if not item:
event.Skip()
return
if not self.IsItemEnabled(item):
event.Skip()
return
# Item Text Appearance
ishtml = self.IsItemHyperText(item)
back = self.GetItemBackgroundColour(item)
fore = self.GetItemTextColour(item)
isbold = self.IsBold(item)
font = self.GetItemFont(item)
# Icons On Item
normal = self.GetItemImage(item, CT.TreeItemIcon_Normal)
selected = self.GetItemImage(item, CT.TreeItemIcon_Selected)
expanded = self.GetItemImage(item, CT.TreeItemIcon_Expanded)
selexp = self.GetItemImage(item, CT.TreeItemIcon_SelectedExpanded)
# Enabling/Disabling Windows Associated To An Item
haswin = self.GetItemWindow(item)
# Enabling/Disabling Items
enabled = self.IsItemEnabled(item)
# Generic Item's Info
children = self.GetChildrenCount(item)
itemtype = self.GetItemType(item)
text = self.GetItemText(item)
pydata = self.GetPyData(item)
self.current = item
self.itemdict = {"ishtml": ishtml, "back": back, "fore": fore, "isbold": isbold,
"font": font, "normal": normal, "selected": selected, "expanded": expanded,
"selexp": selexp, "haswin": haswin, "children": children,
"itemtype": itemtype, "text": text, "pydata": pydata, "enabled": enabled}
menu = wx.Menu()
item1 = menu.Append(wx.ID_ANY, "Change Item Background Colour")
item2 = menu.Append(wx.ID_ANY, "Modify Item Text Colour")
menu.AppendSeparator()
if isbold:
strs = "Make Item Text Not Bold"
else:
strs = "Make Item Text Bold"
item3 = menu.Append(wx.ID_ANY, strs)
item4 = menu.Append(wx.ID_ANY, "Change Item Font")
menu.AppendSeparator()
if ishtml:
strs = "Set Item As Non-Hyperlink"
else:
strs = "Set Item As Hyperlink"
item5 = menu.Append(wx.ID_ANY, strs)
menu.AppendSeparator()
if haswin:
enabled = self.GetItemWindowEnabled(item)
if enabled:
strs = "Disable Associated Widget"
else:
strs = "Enable Associated Widget"
else:
strs = "Enable Associated Widget"
item6 = menu.Append(wx.ID_ANY, strs)
if not haswin:
item6.Enable(False)
item7 = menu.Append(wx.ID_ANY, "Disable Item")
menu.AppendSeparator()
item8 = menu.Append(wx.ID_ANY, "Change Item Icons")
menu.AppendSeparator()
item9 = menu.Append(wx.ID_ANY, "Get Other Information For This Item")
menu.AppendSeparator()
item10 = menu.Append(wx.ID_ANY, "Delete Item")
if item == self.GetRootItem():
item10.Enable(False)
item11 = menu.Append(wx.ID_ANY, "Prepend An Item")
item12 = menu.Append(wx.ID_ANY, "Append An Item")
self.Bind(wx.EVT_MENU, self.OnItemBackground, item1)
self.Bind(wx.EVT_MENU, self.OnItemForeground, item2)
self.Bind(wx.EVT_MENU, self.OnItemBold, item3)
self.Bind(wx.EVT_MENU, self.OnItemFont, item4)
self.Bind(wx.EVT_MENU, self.OnItemHyperText, item5)
self.Bind(wx.EVT_MENU, self.OnEnableWindow, item6)
self.Bind(wx.EVT_MENU, self.OnDisableItem, item7)
self.Bind(wx.EVT_MENU, self.OnItemIcons, item8)
self.Bind(wx.EVT_MENU, self.OnItemInfo, item9)
self.Bind(wx.EVT_MENU, self.OnItemDelete, item10)
self.Bind(wx.EVT_MENU, self.OnItemPrepend, item11)
self.Bind(wx.EVT_MENU, self.OnItemAppend, item12)
self.PopupMenu(menu)
menu.Destroy()
def OnItemBackground(self, event):
colourdata = wx.ColourData()
colourdata.SetColour(self.itemdict["back"])
dlg = wx.ColourDialog(self, colourdata)
dlg.GetColourData().SetChooseFull(True)
if dlg.ShowModal() == wx.ID_OK:
data = dlg.GetColourData()
col1 = data.GetColour().Get()
self.SetItemBackgroundColour(self.current, col1)
dlg.Destroy()
def OnItemForeground(self, event):
colourdata = wx.ColourData()
colourdata.SetColour(self.itemdict["fore"])
dlg = wx.ColourDialog(self, colourdata)
dlg.GetColourData().SetChooseFull(True)
if dlg.ShowModal() == wx.ID_OK:
data = dlg.GetColourData()
col1 = data.GetColour().Get()
self.SetItemTextColour(self.current, col1)
dlg.Destroy()
def OnItemBold(self, event):
self.SetItemBold(self.current, not self.itemdict["isbold"])
def OnItemFont(self, event):
data = wx.FontData()
font = self.itemdict["font"]
if font is None:
font = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT)
data.SetInitialFont(font)
dlg = wx.FontDialog(self, data)
if dlg.ShowModal() == wx.ID_OK:
data = dlg.GetFontData()
font = data.GetChosenFont()
self.SetItemFont(self.current, font)
dlg.Destroy()
def OnItemHyperText(self, event):
self.SetItemHyperText(self.current, not self.itemdict["ishtml"])
def OnEnableWindow(self, event):
enable = self.GetItemWindowEnabled(self.current)
self.SetItemWindowEnabled(self.current, not enable)
def OnDisableItem(self, event):
self.EnableItem(self.current, False)
def OnItemIcons(self, event):
bitmaps = [self.itemdict["normal"], self.itemdict["selected"],
self.itemdict["expanded"], self.itemdict["selexp"]]
wx.BeginBusyCursor()
dlg = TreeIcons(self, -1, bitmaps=bitmaps)
wx.EndBusyCursor()
dlg.ShowModal()
def SetNewIcons(self, bitmaps):
self.SetItemImage(self.current, bitmaps[0], CT.TreeItemIcon_Normal)
self.SetItemImage(self.current, bitmaps[1], CT.TreeItemIcon_Selected)
self.SetItemImage(self.current, bitmaps[2], CT.TreeItemIcon_Expanded)
self.SetItemImage(self.current, bitmaps[3], CT.TreeItemIcon_SelectedExpanded)
def OnItemInfo(self, event):
itemtext = self.itemdict["text"]
numchildren = str(self.itemdict["children"])
itemtype = self.itemdict["itemtype"]
pydata = repr(type(self.itemdict["pydata"]))
if itemtype == 0:
itemtype = "Normal"
elif itemtype == 1:
itemtype = "CheckBox"
else:
itemtype = "RadioButton"
strs = "Information On Selected Item:\n\n" + "Text: " + itemtext + "\n" \
"Number Of Children: " + numchildren + "\n" \
"Item Type: " + itemtype + "\n" \
"Item Data Type: " + pydata + "\n"
dlg = wx.MessageDialog(self, strs, "CustomTreeCtrlDemo Info", wx.OK | wx.ICON_INFORMATION)
dlg.ShowModal()
dlg.Destroy()
def OnItemDelete(self, event):
strs = "Are You Sure You Want To Delete Item " + self.GetItemText(self.current) + "?"
dlg = wx.MessageDialog(None, strs, 'Deleting Item', wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_QUESTION)
if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
dlg.Destroy()
return
dlg.Destroy()
self.DeleteChildren(self.current)
self.Delete(self.current)
self.current = None
def OnItemPrepend(self, event):
dlg = wx.TextEntryDialog(self, "Please Enter The New Item Name", 'Item Naming', 'Python')
if dlg.ShowModal() == wx.ID_OK:
newname = dlg.GetValue()
newitem = self.PrependItem(self.current, newname)
self.EnsureVisible(newitem)
dlg.Destroy()
def OnItemAppend(self, event):
dlg = wx.TextEntryDialog(self, "Please Enter The New Item Name", 'Item Naming', 'Python')
if dlg.ShowModal() == wx.ID_OK:
newname = dlg.GetValue()
newitem = self.AppendItem(self.current, newname)
self.EnsureVisible(newitem)
dlg.Destroy()
def OnBeginEdit(self, event):
self.log.write("OnBeginEdit" + "\n")
# show how to prevent edit...
item = event.GetItem()
if item and self.GetItemText(item) == "The Root Item":
wx.Bell()
self.log.write("You can't edit this one..." + "\n")
# Lets just see what's visible of its children
cookie = 0
root = event.GetItem()
(child, cookie) = self.GetFirstChild(root)
while child:
self.log.write("Child [%s] visible = %d" % (self.GetItemText(child), self.IsVisible(child)) + "\n")
(child, cookie) = self.GetNextChild(root, cookie)
event.Veto()
def OnEndEdit(self, event):
self.log.write("OnEndEdit: %s %s" %(event.IsEditCancelled(), event.GetLabel()))
# show how to reject edit, we'll not allow any digits
for x in event.GetLabel():
if x in string.digits:
self.log.write(", You can't enter digits..." + "\n")
event.Veto()
return
self.log.write("\n")
def OnLeftDClick(self, event):
pt = event.GetPosition()
item, flags = self.HitTest(pt)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -