如何在wxpython中为不同的wx.TreeCtrl项调用不同的函数?

如何在wxpython中为不同的wx.TreeCtrl项调用不同的函数?,tree,wxpython,function-call,Tree,Wxpython,Function Call,如何为不同的wx.TreeCtrl项调用不同的函数。当我在第二个树项中调用Fun_ASTER时,它返回USGS项的最后一个值(树中的第一个项) 如果您创建一个人们可以运行的编码示例,而不是剪切和粘贴部分代码,那么会有更多的人回答您的问题。 很少有人想猜测丢失的代码片段 让你的问题更容易回答 您将一个事件绑定到两个函数,因此将事件绑定到最后一个的函数将是运行的函数。 您可能希望执行该功能,查看所选项目并决定如何处理它,或者事件对象本身的某个细节可能会为您做出决定 无论哪种方式,这里都有一些代码可以

如何为不同的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()