wxPython, paneinfo et treectrl

Le
BH
Bonjour,

J'essaie désespérément de créer une frame avec un PaneInfo, puis de
remplir ce pane info avec un TreeCtrl.
Impossible, je ne dois pas bien comprendre comment s'embriquent les choses.

Est-ce qu'une âme chartitable pourrait m'aider à débugger ce code ?

Merci!

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#-
import wx
import wx.aui
import os, sys
#-
class MyFrame(wx.Frame):
def __init__(self, parent, id=-1, title='wx.aui Test',
size=(800, 600), style=wx.DEFAULT_FRAME_STYLE):
wx.Frame.__init__(self, parent, id, title, (0,0), size, style)

self._mgr = wx.aui.AuiManager(self)
mb = wx.MenuBar()
file_menu = wx.Menu()
file_menu.Append(wx.ID_OPEN, "Open")
file_menu.Append(wx.ID_EXIT, "Exit")
mb.Append(file_menu, "File")
self.SetMenuBar(mb)

self.statusbar = self.CreateStatusBar(2, wx.ST_SIZEGRIP)
self.statusbar.SetStatusWidths([-2, -3])
self.statusbar.SetStatusText("Ready", 0)
self.statusbar.SetStatusText("Welcome To wxPython!", 1)

# create several text controls
# add the panes to the manager
self._mgr.AddPane(CreateTreeCtrl(self, -1), wx.aui.AuiPaneInfo().
Name("Qmax").Caption("Tree Pane").

Left().Layer(1).Position(1).CloseButton(True).MaximizeButton(True))
# tell the manager to 'commit' all the changes just made
self._mgr.Update()

self.Bind(wx.EVT_MENU, self.OpenFile, id=wx.ID_OPEN)
self.Bind(wx.EVT_CLOSE, self.OnClose)
self.Bind(wx.EVT_MENU, self.OnClose, id=wx.ID_EXIT)


def OnClose(self, event):
# deinitialize the frame manager
self._mgr.UnInit()
# delete the frame
self.Destroy()


def OpenFile(self, evt):
wildcard = "Sphinx QUE (*.que)|*.que|"
"All files (*.*)|*.*"
self.statusbar.SetStatusText("CWD: %s" % os.getcwd())

dlg = wx.FileDialog(
self, message="Choose a file",
defaultDir=os.getcwd(),
defaultFile="",
wildcard=wildcard,
style=wx.OPEN | wx.MULTIPLE | wx.CHANGE_DIR
)

if dlg.ShowModal() == wx.ID_OK:
paths = dlg.GetPaths()

self.statusbar.SetStatusText('You selected %d files:' %
len(paths))

for path in paths:
self.statusbar.SetStatusText(' %s' % path)

dir = os.path.split(path)[0]
file = os.path.split(path)[1]

self.statusbar.SetStatusText("%s" % path)




class CreateTreeCtrl(wx.TreeCtrl):
def __init__(self, parent,id=wx.ID_ANY, pos=wx.DefaultPosition,
size=wx.DefaultSize,
style=wx.TR_DEFAULT_STYLE |
wx.NO_BORDER):
wx.TreeCtrl.__init__(self, parent, id, pos, size, style)

def populateTreeCtrl(self, datas):
self.datas = {'matrice':datas}
if self.datas['matrice'] == {}:
self.root = self.AddRoot("Root Demo Item")
item1 = self.AppendItem (self.root, "Item1",0)
item2 = self.AppendItem (self.root, "Item2",0)
self.Expand(self.root)
else:
pass


def TestProgram():
app = wx.App(0)
frame = MyFrame(None)
frame.Show()
app.MainLoop()

if __name__ == '__main__':
TestProgram()
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jerome
Le #629716
BH wrote:
Bonjour,


Bonjour


J'essaie désespérément de créer une frame avec un PaneInfo, puis de
remplir ce pane info avec un TreeCtrl.
Impossible, je ne dois pas bien comprendre comment s'embriquent les choses.

Est-ce qu'une âme chartitable pourrait m'aider à débugger ce code ?


Est-ce que tu pourrais nous donner un code qui ne marche pas pour qu'on
puisse le débugger plutôt ?

En testant rapidement ton code, ton TreeCtrl est créé, tu peux rajouter
des choses dedans sans problème. La barre de titre n'est pas présente
car tu n'as ajouté qu'un seul pane à ton manager. En rajoutant un pane
au milieu tu la verras apparaître.

Je te conseillerai de renommer ta classe CreateTreeCtrl en MyTreeCtrl
qui est plus parlant et de créer une variable d'instances dans ta frame
self.tc = myTreeCtrl()

Tu pourras ensuite faire plus facilement des
self.tc.populateTreeCtrl(datas) pour mettre à jour le widget.


Merci!


De rien
Jérôme

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#----------------------------------------------------------------------------

import wx
import wx.aui
import os, sys
#----------------------------------------------------------------------------

class MyFrame(wx.Frame):
def __init__(self, parent, id=-1, title='wx.aui Test',
size=(800, 600), style=wx.DEFAULT_FRAME_STYLE):
wx.Frame.__init__(self, parent, id, title, (0,0), size, style)

self._mgr = wx.aui.AuiManager(self)
mb = wx.MenuBar()
file_menu = wx.Menu()
file_menu.Append(wx.ID_OPEN, "Open")
file_menu.Append(wx.ID_EXIT, "Exit")
mb.Append(file_menu, "File")
self.SetMenuBar(mb)

self.statusbar = self.CreateStatusBar(2, wx.ST_SIZEGRIP)
self.statusbar.SetStatusWidths([-2, -3])
self.statusbar.SetStatusText("Ready", 0)
self.statusbar.SetStatusText("Welcome To wxPython!", 1)

# create several text controls
# add the panes to the manager
self._mgr.AddPane(CreateTreeCtrl(self, -1), wx.aui.AuiPaneInfo().
Name("Qmax").Caption("Tree Pane").

Left().Layer(1).Position(1).CloseButton(True).MaximizeButton(True))
# tell the manager to 'commit' all the changes just made
self._mgr.Update()

self.Bind(wx.EVT_MENU, self.OpenFile, id=wx.ID_OPEN)
self.Bind(wx.EVT_CLOSE, self.OnClose)
self.Bind(wx.EVT_MENU, self.OnClose, id=wx.ID_EXIT)


def OnClose(self, event):
# deinitialize the frame manager
self._mgr.UnInit()
# delete the frame
self.Destroy()


def OpenFile(self, evt):
wildcard = "Sphinx QUE (*.que)|*.que|"
"All files (*.*)|*.*"
self.statusbar.SetStatusText("CWD: %sn" % os.getcwd())

dlg = wx.FileDialog(
self, message="Choose a file",
defaultDir=os.getcwd(),
defaultFile="",
wildcard=wildcard,
style=wx.OPEN | wx.MULTIPLE | wx.CHANGE_DIR
)

if dlg.ShowModal() == wx.ID_OK:
paths = dlg.GetPaths()

self.statusbar.SetStatusText('You selected %d files:' %
len(paths))

for path in paths:
self.statusbar.SetStatusText(' %sn' % path)

dir = os.path.split(path)[0]
file = os.path.split(path)[1]

self.statusbar.SetStatusText("%sn" % path)




class CreateTreeCtrl(wx.TreeCtrl):
def __init__(self, parent,id=wx.ID_ANY, pos=wx.DefaultPosition,
size=wx.DefaultSize,
style=wx.TR_DEFAULT_STYLE |
wx.NO_BORDER):
wx.TreeCtrl.__init__(self, parent, id, pos, size, style)

def populateTreeCtrl(self, datas):
self.datas = {'matrice':datas}
if self.datas['matrice'] == {}:
self.root = self.AddRoot("Root Demo Item")
item1 = self.AppendItem (self.root, "Item1",0)
item2 = self.AppendItem (self.root, "Item2",0)
self.Expand(self.root)
else:
pass


def TestProgram():
app = wx.App(0)
frame = MyFrame(None)
frame.Show()
app.MainLoop()

if __name__ == '__main__':
TestProgram()


BH
Le #629715
BH wrote:
Bonjour,


Bonjour


J'essaie désespérément de créer une frame avec un PaneInfo, puis de
remplir ce pane info avec un TreeCtrl.
Impossible, je ne dois pas bien comprendre comment s'embriquent les
choses.

Est-ce qu'une âme chartitable pourrait m'aider à débugger ce code ?


Est-ce que tu pourrais nous donner un code qui ne marche pas pour qu'on
puisse le débugger plutôt ?

En testant rapidement ton code, ton TreeCtrl est créé, tu peux rajouter
des choses dedans sans problème. La barre de titre n'est pas présente
car tu n'as ajouté qu'un seul pane à ton manager. En rajoutant un pane
au milieu tu la verras apparaître.

Je te conseillerai de renommer ta classe CreateTreeCtrl en MyTreeCtrl
qui est plus parlant et de créer une variable d'instances dans ta frame
self.tc = myTreeCtrl()

Tu pourras ensuite faire plus facilement des
self.tc.populateTreeCtrl(datas) pour mettre à jour le widget.


Merci!


De rien
Jérôme


Merci beaucoup, j'étais pas très loin du but mais après deux jours de
recherches je commençait à perdre espoir.

Le code ci-dessous fonctionne bien.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#----------------------------------------------------------------------------
import wx
import wx.aui
import wx.grid
import os, sys
#----------------------------------------------------------------------------
class MyFrame(wx.Frame):
def __init__(self, parent, id=-1, title='wx.aui Test',
size=(800, 600), style=wx.DEFAULT_FRAME_STYLE):
wx.Frame.__init__(self, parent, id, title, (0,0), size, style)

self._mgr = wx.aui.AuiManager(self)
mb = wx.MenuBar()
file_menu = wx.Menu()
file_menu.Append(wx.ID_OPEN, "Open")
file_menu.Append(wx.ID_EXIT, "Exit")
mb.Append(file_menu, "File")
self.SetMenuBar(mb)

self.statusbar = self.CreateStatusBar(2, wx.ST_SIZEGRIP)
self.statusbar.SetStatusWidths([-2, -3])
self.statusbar.SetStatusText("Ready", 0)
self.statusbar.SetStatusText("Welcome To wxPython!", 1)

self.tc = MyTreeCtrl(self, -1)
# create several text controls
# add the panes to the manager
self._mgr.AddPane(self.tc, wx.aui.AuiPaneInfo().
Name("test7").Caption("Client Size Reporter").

Left().Layer(1).CloseButton(True).MaximizeButton(True))

self._mgr.AddPane(self.CreateGrid(),
wx.aui.AuiPaneInfo().Name("grid_content").
CenterPane())
# tell the manager to 'commit' all the changes just made
self._mgr.Update()

self.Bind(wx.EVT_MENU, self.OpenFile, id=wx.ID_OPEN)
self.Bind(wx.EVT_CLOSE, self.OnClose)
self.Bind(wx.EVT_MENU, self.OnClose, id=wx.ID_EXIT)


def OnClose(self, event):
# deinitialize the frame manager
self._mgr.UnInit()
# delete the frame
self.Destroy()


def OpenFile(self, evt):
wildcard = "Sphinx QUE (*.que)|*.que|"
"All files (*.*)|*.*"
self.statusbar.SetStatusText("CWD: %sn" % os.getcwd())

dlg = wx.FileDialog(
self, message="Choose a file",
defaultDir=os.getcwd(),
defaultFile="",
wildcard=wildcard,
style=wx.OPEN | wx.MULTIPLE | wx.CHANGE_DIR
)

if dlg.ShowModal() == wx.ID_OK:
paths = dlg.GetPaths()

self.statusbar.SetStatusText('You selected %d files:' %
len(paths))

for path in paths:
self.statusbar.SetStatusText(' %sn' % path)

dir = os.path.split(path)[0]
file = os.path.split(path)[1]

self.statusbar.SetStatusText("%sn" % path)
self.tc.populateTreeCtrl({})
self._mgr.Update()



def CreateGrid(self):

grid = wx.grid.Grid(self, -1, wx.Point(0, 0), wx.Size(150, 250),
wx.NO_BORDER | wx.WANTS_CHARS)
grid.CreateGrid(50, 20)

return grid

class MyTreeCtrl(wx.TreeCtrl):
def __init__(self, parent,id=wx.ID_ANY, pos=wx.DefaultPosition,
size=wx.DefaultSize,
style=wx.TR_DEFAULT_STYLE |
wx.NO_BORDER):
wx.TreeCtrl.__init__(self, parent, id, pos, size, style)
imglist = wx.ImageList(16, 16, True, 2)
imglist.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER,
wx.ART_OTHER, wx.Size(16,16)))
imglist.Add(wx.ArtProvider_GetBitmap(wx.ART_NORMAL_FILE,
wx.ART_OTHER, wx.Size(16,16)))
self.AssignImageList(imglist)

def populateTreeCtrl(self, datas):
self.datas = {'matrice':datas}
if self.datas['matrice'] == {}:
self.root = self.AddRoot("Root Demo Item")
item1 = self.AppendItem (self.root, "Item1",0)
item2 = self.AppendItem (self.root, "Item2",0)
self.Expand(self.root)
else:
pass


def TestProgram():
app = wx.App(0)
frame = MyFrame(None)
frame.Show()
app.MainLoop()

if __name__ == '__main__':
TestProgram()



#!/usr/bin/env python
# -*- coding: utf-8 -*-
#----------------------------------------------------------------------------

import wx
import wx.aui
import os, sys
#----------------------------------------------------------------------------

class MyFrame(wx.Frame):
def __init__(self, parent, id=-1, title='wx.aui Test',
size=(800, 600), style=wx.DEFAULT_FRAME_STYLE):
wx.Frame.__init__(self, parent, id, title, (0,0), size, style)

self._mgr = wx.aui.AuiManager(self)
mb = wx.MenuBar()
file_menu = wx.Menu()
file_menu.Append(wx.ID_OPEN, "Open")
file_menu.Append(wx.ID_EXIT, "Exit")
mb.Append(file_menu, "File")
self.SetMenuBar(mb)

self.statusbar = self.CreateStatusBar(2, wx.ST_SIZEGRIP)
self.statusbar.SetStatusWidths([-2, -3])
self.statusbar.SetStatusText("Ready", 0)
self.statusbar.SetStatusText("Welcome To wxPython!", 1)

# create several text controls
# add the panes to the manager
self._mgr.AddPane(CreateTreeCtrl(self, -1), wx.aui.AuiPaneInfo().
Name("Qmax").Caption("Tree Pane").

Left().Layer(1).Position(1).CloseButton(True).MaximizeButton(True))
# tell the manager to 'commit' all the changes just made
self._mgr.Update()

self.Bind(wx.EVT_MENU, self.OpenFile, id=wx.ID_OPEN)
self.Bind(wx.EVT_CLOSE, self.OnClose)
self.Bind(wx.EVT_MENU, self.OnClose, id=wx.ID_EXIT)


def OnClose(self, event):
# deinitialize the frame manager
self._mgr.UnInit()
# delete the frame
self.Destroy()


def OpenFile(self, evt):
wildcard = "Sphinx QUE (*.que)|*.que|"
"All files (*.*)|*.*"
self.statusbar.SetStatusText("CWD: %sn" % os.getcwd())

dlg = wx.FileDialog(
self, message="Choose a file",
defaultDir=os.getcwd(),
defaultFile="",
wildcard=wildcard,
style=wx.OPEN | wx.MULTIPLE | wx.CHANGE_DIR
)

if dlg.ShowModal() == wx.ID_OK:
paths = dlg.GetPaths()

self.statusbar.SetStatusText('You selected %d files:' %
len(paths))

for path in paths:
self.statusbar.SetStatusText(' %sn' % path)

dir = os.path.split(path)[0]
file = os.path.split(path)[1]

self.statusbar.SetStatusText("%sn" % path)




class CreateTreeCtrl(wx.TreeCtrl):
def __init__(self, parent,id=wx.ID_ANY, pos=wx.DefaultPosition,
size=wx.DefaultSize,
style=wx.TR_DEFAULT_STYLE |
wx.NO_BORDER):
wx.TreeCtrl.__init__(self, parent, id, pos, size, style)

def populateTreeCtrl(self, datas):
self.datas = {'matrice':datas}
if self.datas['matrice'] == {}:
self.root = self.AddRoot("Root Demo Item")
item1 = self.AppendItem (self.root, "Item1",0)
item2 = self.AppendItem (self.root, "Item2",0)
self.Expand(self.root)
else:
pass


def TestProgram():
app = wx.App(0)
frame = MyFrame(None)
frame.Show()
app.MainLoop()

if __name__ == '__main__':
TestProgram()




Publicité
Poster une réponse
Anonyme