我正在进行树控制,需要弄清楚双击的来源。
代码:
def _initElementsOfTreePanel(self, panel):
tree = wx.TreeCtrl(panel, -1, wx.Point(0, 0), wx.DefaultSize, wx.NO_BORDER | wx.TR_DEFAULT_STYLE)
root = tree.AddRoot("Elements")
items = []
imglist = wx.ImageList(16, 16, True, 2)
imglist.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, wx.Size(16, 16)))
imglist.Add(wx.ArtProvider_GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, wx.Size(16, 16)))
tree.AssignImageList(imglist)
# # Create the element Tree (the left hand side panel). Places in it all the found functions
def appendSubitems(item, func_list, tree):
print item
for func in func_list:
itemid = tree.AppendItem(item, func.__name__, 1)
print"GUIFrame._initElementsofTreePanel, func:",func.__name__,"id:",itemid
# print "TreeItemId:",
appendSubitems(tree.AppendItem(root, "Input functions", 0), self._elemdisco.input_functions, tree)
appendSubitems(tree.AppendItem(root, "Processing functions", 0), self._elemdisco.processing_functions, tree)
appendSubitems(tree.AppendItem(root, "Output functions", 0), self._elemdisco.output_functions, tree)
appendSubitems(tree.AppendItem(root, "Other functions", 0), self._elemdisco.other_functions, tree)
tree.ExpandAll()
self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self._addNodeToSchema, self.treePanel.tree)
def _addNodeToSchema(self,event):
print event.GetItem()
现在输出显示无论双击什么节点,它都会识别触发事件的同一项目。并且它对应于我知道我添加的任何项目的ID,并且没有根的ID。
任何人都知道如何获取树中对象的引用?我基本上想得到它的名字,但这个API不会让我:P
[编辑]:解决方案,但我认为这是一个框架错误。无论双击实际发生在何处,事件都没有理由返回相同的TreeItemID。
答案 0 :(得分:1)
def _addNodeToSchema(self,event):
pt = event.GetPoint()
item, _ = self.treePanel.tree.HitTest(pt)
if item:
print self.treePanel.tree.GetItemText(item) #this is the label of the node
显然必须得到点位置,并询问树有关在那个位置可以找到的任何元素:)不是非常OO,但我会接受它。
答案 1 :(得分:0)
'''具有拖动事件的多项选择,显示被拖动的项目
def On_Drag(self,event):
select = (self.custom_tree.GetSelections())
for i in range(len(select)):
print(self.custom_tree.GetItemText(select[i]))'''