1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
| # -*- coding: iso-8859-15 -*-
import wx
class MyDialogFrame(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
self.CreateWidgets()
self.DoLayout()
def CreateWidgets(self):
panel = wx.Panel(self, -1)
self.panel = panel
self.txtCtrl = wx.TextCtrl(panel, -1, "nouveau noeud")
self.btn = wx.Button(panel, -1, "ajouter")
def DoLayout(self):
szr = wx.GridBagSizer(5, 5)
szr.Add(self.txtCtrl, (0, 0), flag=wx.EXPAND)
szr.Add(self.btn, (1, 0), flag=wx.ALIGN_RIGHT)
szr.AddGrowableCol(0)
self.panel.SetSizer(szr)
class MyFrame(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
self.CreateWidgets()
self.DoLayout()
self.DoBinding()
self.Populate()
def CreateWidgets(self):
panel = wx.Panel(self, -1)
self.panel = panel
self.tc = wx.TreeCtrl(panel, -1)
self.btn = wx.Button(panel, -1,
"ajouter un fils au parent sélectionné")
def DoLayout(self):
szr = wx.GridBagSizer(5, 5)
szr.Add(self.tc, (0, 0), flag=wx.EXPAND)
szr.Add(self.btn, (1, 0), flag=wx.ALIGN_RIGHT)
szr.AddGrowableCol(0)
szr.AddGrowableRow(0)
self.panel.SetSizerAndFit(szr)
self.SetSize(self.GetBestSize())
def DoBinding(self):
self.Bind(wx.EVT_BUTTON, self.OnAddButton, self.btn)
self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelectItem, self.tc)
def Populate(self):
root = self.tc.AddRoot("root item")
self.tc.Expand(root)
def OnAddButton(self, evt):
# Tente de donner le focus à la fenêtre DialogFrame
# Si cela léve une exception, on en deduit que la fenetre
# ne doit pas exister: on l'instancie alors
# et créer le binding.
print "OnAddBtn"
try:
self.frEntry.SetFocus()
evt.Skip()
except AttributeError:
self.frEntry = MyDialogFrame(self, -1)
self.frEntry.Show(True)
self.SetDialogFrameTitle(self.tc.GetItemText(self.tc.GetSelection()))
self.Bind(wx.EVT_BUTTON, self.OnAddNode, self.frEntry.btn)
evt.Skip()
def OnAddNode(self, evt):
print "OnAddNode"
label = self.frEntry.txtCtrl.GetValue()
item = self.tc.GetSelection()
if not item.IsOk():
evt.Skip()
return False
self.tc.AppendItem(item, label)
evt.Skip()
def OnSelectItem(self, evt):
# modifie le titre de la fenetre de dialogue
print "OnSelectItem"
self.SetDialogFrameTitle(self.tc.GetItemText(evt.GetItem()))
evt.Skip()
def SetDialogFrameTitle(self, txt):
try:
title = u"Ajouter un enfant a l'item '%s'" % txt
self.frEntry.SetTitle(title)
except AttributeError:
pass
if __name__ == "__main__":
app = wx.PySimpleApp(redirect=False)
fr = MyFrame(None, -1, "fenêtre principale")
fr.Show(True)
app.MainLoop() |
Partager