如何在wxpython中为不同的wx.TreeCtrl项调用不同的函数?
如何为不同的wx.TreeCtrl项调用不同的函数。当我在第二个树项中调用Fun_ASTER时,它返回USGS项的最后一个值(树中的第一个项)如何在wxpython中为不同的wx.TreeCtrl项调用不同的函数?,tree,wxpython,function-call,Tree,Wxpython,Function Call,如何为不同的wx.TreeCtrl项调用不同的函数。当我在第二个树项中调用Fun_ASTER时,它返回USGS项的最后一个值(树中的第一个项) 如果您创建一个人们可以运行的编码示例,而不是剪切和粘贴部分代码,那么会有更多的人回答您的问题。 很少有人想猜测丢失的代码片段 让你的问题更容易回答 您将一个事件绑定到两个函数,因此将事件绑定到最后一个的函数将是运行的函数。 您可能希望执行该功能,查看所选项目并决定如何处理它,或者事件对象本身的某个细节可能会为您做出决定 无论哪种方式,这里都有一些代码可以
如果您创建一个人们可以运行的编码示例,而不是剪切和粘贴部分代码,那么会有更多的人回答您的问题。
很少有人想猜测丢失的代码片段 让你的问题更容易回答 您将一个事件绑定到两个函数,因此将事件绑定到最后一个的函数将是运行的函数。 您可能希望执行该功能,查看所选项目并决定如何处理它,或者事件对象本身的某个细节可能会为您做出决定 无论哪种方式,这里都有一些代码可以帮助您
import wx
import os
class MyFrame(wx.Frame):
def __init__(self, parent, id=wx.ID_ANY, title="", size=(660,300)):
super(MyFrame, self).__init__(parent, id, title, size)
self.panel = wx.Panel(self)
self.tree = wx.TreeCtrl(self.panel, id=wx.ID_ANY, pos=wx.DefaultPosition, size=(600,300),
style=wx.TR_DEFAULT_STYLE, validator=wx.DefaultValidator)
root = self.tree.AddRoot('Spectral Database')
files = []
self.dname = []
self.test = []
self.tree.AppendItem(root, 'USGS')
for dirname, dirnames, filenames in os.walk('./image'):
for filename in filenames:
files.append(os.path.join(dirname, filename))
self.test.append(filename)
self.tree.AppendItem(self.tree.GetLastChild(root), filename)
self.dname = files[:]
self.tree.AppendItem(root,'ASTER')
for dirname, dirnames, filenames in os.walk('./image2'):
for filename in filenames:
files.append(os.path.join(dirname, filename))
self.tree.AppendItem(self.tree.GetLastChild(root), filename)
self.dname = files[:]
self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.Fun_Selected, self.tree)
self.Show()
def Fun_Selected(self, event):
self.item = event.GetItem()
if self.item:
print("Selected: %s\n" % self.tree.GetItemText(self.item))
if __name__ == "__main__":
app = wx.App()
frame = MyFrame(None,title="The Main Frame")
app.MainLoop()
我追踪到了问题所在,实际上我忘了在ASTER/image2文件夹的self.test[]中添加文件名。谢谢。使用list
self.test
来存储文件名,您的工作量就翻了一番,因为从我的示例中可以看出,这些信息存储在树
对象中。也就是说,如果你的方法可行,就用它来运行。作为说明创建一个好问题重要性的额外说明,如果你发布了函数的代码Fun\u ASTER
,很多人会立即看到。对未来的提示。因为它是你发现自己的错误,最好的学习经验类型。欢迎来到堆栈溢出!谢谢萨克森州的罗尔夫。我尝试嵌入相同的代码,但它会引起缩进错误。来吧!您可以对树控件进行编码,但会抱怨缩进错误。真的(
import wx
import os
class MyFrame(wx.Frame):
def __init__(self, parent, id=wx.ID_ANY, title="", size=(660,300)):
super(MyFrame, self).__init__(parent, id, title, size)
self.panel = wx.Panel(self)
self.tree = wx.TreeCtrl(self.panel, id=wx.ID_ANY, pos=wx.DefaultPosition, size=(600,300),
style=wx.TR_DEFAULT_STYLE, validator=wx.DefaultValidator)
root = self.tree.AddRoot('Spectral Database')
files = []
self.dname = []
self.test = []
self.tree.AppendItem(root, 'USGS')
for dirname, dirnames, filenames in os.walk('./image'):
for filename in filenames:
files.append(os.path.join(dirname, filename))
self.test.append(filename)
self.tree.AppendItem(self.tree.GetLastChild(root), filename)
self.dname = files[:]
self.tree.AppendItem(root,'ASTER')
for dirname, dirnames, filenames in os.walk('./image2'):
for filename in filenames:
files.append(os.path.join(dirname, filename))
self.tree.AppendItem(self.tree.GetLastChild(root), filename)
self.dname = files[:]
self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.Fun_Selected, self.tree)
self.Show()
def Fun_Selected(self, event):
self.item = event.GetItem()
if self.item:
print("Selected: %s\n" % self.tree.GetItemText(self.item))
if __name__ == "__main__":
app = wx.App()
frame = MyFrame(None,title="The Main Frame")
app.MainLoop()