我的代码是HyperTreeList的示例,我将其与可通过Doubleclick进行编辑的预定义列一起使用。 我希望所有列都可以被编辑。因此,我需要检查doubleclick事件在哪一列中。
我该怎么做?
到目前为止,这是我的代码:
import wx
import wx.lib.agw.hypertreelist as HTL
class MyFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, -1, "HyperTreeList Demo")
self.tree = HTL.HyperTreeList(self)
self.tree.AddColumn("First column")
self.tree.AddColumn("Column 1")
self.tree.AddColumn("Column 2")
root = self.tree.AddRoot("Root")
parent = self.tree.AppendItem(root, "First child")
child = self.tree.AppendItem(parent, "First Grandchild")
self.tree.AppendItem(root, "Second child")
self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnEditItem, self.tree)
def OnEditItem(self, evt):
item = self.tree.GetSelection()
itemParent = item.GetParent()
if itemParent != None:
itemParentText = itemParent.GetText()
if itemParentText == "First child":
# How to check in which column the event was?
self.tree.EditLabel(item, 1)
app = wx.App(0)
frame = MyFrame(None)
app.SetTopWindow(frame)
frame.Show()
app.MainLoop()
答案 0 :(得分:1)
也许您可以尝试这样的事情:
self.tree.GetMainWindow().Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDClick)
def OnLeftDClick(self, event):
pt = event.GetPosition()
item, flags, column = self.tree.HitTest(pt)
if item and (flags & wx.TREE_HITTEST_ONITEMLABEL):
# Use the column return value as you wish
self.tree.EditLabel(item, column)
event.Skip()