[파이썬] wxPython `wx.TreeCtrl`: 트리 뷰

In this blog post, we will explore how to use the wx.TreeCtrl widget in wxPython to create a tree view in Python applications. The tree view control is commonly used to display hierarchical data in a collapsible and expandable format, making it ideal for organizing and navigating complex data structures.

Installation

Before we begin, make sure you have wxPython installed. If not, you can install it using pip:

pip install wxPython

Creating a Simple Tree

Let’s start by creating a simple tree with a few nodes. First, import the necessary modules:

import wx

Next, create a new wx.Frame and add a wx.TreeCtrl widget to it:

class MyFrame(wx.Frame):
    def __init__(self, parent, title):
        super().__init__(parent, title=title, size=(400, 300))

        self.tree = wx.TreeCtrl(self)

Now that we have our tree widget, we can add some nodes to it. Each node can have a label and an associated data item. Let’s add a root node and a couple of child nodes:

class MyFrame(wx.Frame):
    def __init__(self, parent, title):
        super().__init__(parent, title=title, size=(400, 300))

        self.tree = wx.TreeCtrl(self)

        root = self.tree.AddRoot("Root")  # Add root node

        child1 = self.tree.AppendItem(root, "Child 1")  # Add child node
        child2 = self.tree.AppendItem(root, "Child 2")  # Add another child node

        self.tree.SetItemData(child1, "Data item 1")  # Set data item for child1
        self.tree.SetItemData(child2, "Data item 2")  # Set data item for child2

Finally, display the frame:

if __name__ == "__main__":
    app = wx.App()
    frame = MyFrame(None, "Tree View Demo")
    frame.Show()
    app.MainLoop()

Now you should see a simple tree view with a root node and two child nodes when you run the code.

Handling Tree Events

The wx.TreeCtrl widget provides various events that you can handle to respond to user interactions. For example, you can handle the EVT_TREE_ITEM_ACTIVATED event to perform a specific action when a tree node is double-clicked. To handle this event, add the following code to your frame class:

class MyFrame(wx.Frame):
    def __init__(self, parent, title):
        super().__init__(parent, title=title, size=(400, 300))
        
        self.tree = wx.TreeCtrl(self)
        # ...

        self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.on_tree_item_activated, self.tree)

Then define the event handler function:

def on_tree_item_activated(self, event):
    item = event.GetItem()
    data = self.tree.GetItemData(item)
    print(f"Node \"{self.tree.GetItemText(item)}\" activated with data: {data}")

Now, when you double-click on a tree node, the event handler will be called, and the node’s label and associated data will be printed to the console.

Conclusion

In this blog post, we covered the basics of creating a tree view using the wx.TreeCtrl widget in wxPython. We learned how to add nodes, set data items, and handle tree events. With this knowledge, you can now create interactive and organized tree views in your Python applications using wxPython.

For more information and detailed documentation, refer to the official wxPython documentation: https://docs.wxpython.org/.