2020년 12월 5일 토요일

[IronPython] WPF Tree View

WPF Tree View

import clr
clr.AddReference("PresentationFramework")
clr.AddReference("PresentationCore");
clr.AddReference('System.Data')
clr.AddReference('System.Windows.Forms')

import System
from System import *
from System.Data import *
from System.Type import GetType
from System.Threading.Tasks import Task
from System.Windows import *
from System.Windows.Controls import *
from System.Windows.Controls.Primitives import *
from System.Windows.Media import *
from System.Windows.Media.Imaging import *
from System.Windows.Media.Effects import *
from System.Windows.Shapes import Rectangle
from System.Windows.Data import Binding
from System.Windows.Ink import Stroke
from System.Windows.Forms import ( FolderBrowserDialog, DialogResult )
from Microsoft.Win32 import ( OpenFileDialog, SaveFileDialog )

import ctrl

class WpfTree(ctrl.WpfCtrl):
    def __init__(self,name="root",handler=None,**kwargs):
        self.root = TreeViewItem()
        self.root.Header = name
        self.root.IsExpanded = True
        self.ctrl = TreeView()
        self.ctrl.Items.Add(self.root)
        self.init(**kwargs)
        if handler: self.ctrl.SelectedItemChanged  += handler
    def add_root_item(self,label):
        return self.add_item(label)
    def add_item(self,label,parent=None):
        item = TreeViewItem()
        item.Header = label
        item.IsExpanded = True
        if parent: parent.Items.Add(item)
        else: self.root.Items.Add(item)
        return item
    def get_selected_item(self):
        return self.ctrl.SelectedItem
    def get_selected_item_text(self):
        return self.ctrl.SelectedItem.Header.ToString()
    def get_selected_item_path(self,delim=""):
        item = self.ctrl.SelectedItem
        return self.get_item_path(item,delim)
    def get_item_path(self,item,delim=""):
        path = item.Header.ToString()
        while type(item.Parent) == TreeViewItem:
            item = item.Parent
            path = item.Header.ToString() + delim + path
        return path
    def get_parent_item(self,item):
        return item.Parent
    def get_item_value(self,item):
        return item.Header.ToString()

if __name__ == "__main__":
    global tree_ctrl
    def tree_handler(s,e): 
        print( s.SelectedItem.Header.ToString(),  tree_ctrl.get_selected_item_text() )
    def button_handler(s,e): print( tree_ctrl.get_selected_item_path('/'))       
    import win
    app = win.Win("Button Demo",320,240)
    tree_ctrl = WpfTree(handler=tree_handler)
    item = tree_ctrl.add_root_item("Item1")
    tree_ctrl.add_item("Item1-1",item)
    tree_ctrl.add_item("Item1-2",item)
    item = tree_ctrl.add_root_item("Item2")
    tree_ctrl.add_item("Item2-1",item)
    tree_ctrl.add_item("Item2-2",item)
    app.set_content(tree_ctrl.ctrl)
    
    b = Button(); b.Content = "Button"; b.Click += button_handler
    app.add_statusbar(b)
    app.run()

댓글 없음:

댓글 쓰기