views:

82

answers:

2

Hi,

I am currently using wx.CustomTree, to use to display a series of configuration settings. I generally fill them with wx.TextCtrl / wx.Combobox, to allow the user to edit / enter stuff. Here is my code:

class ConfigTree(CT.CustomTreeCtrl):
    """
        Holds all non gui drawing panel stuff
    """
    def __init__(self, parent):
        CT.CustomTreeCtrl.__init__(self, parent,
                                   id = common.ID_CONTROL_SETTINGS,
                                   style = wx.TR_DEFAULT_STYLE | wx.TR_HAS_BUTTONS
                                        | wx.TR_HAS_VARIABLE_ROW_HEIGHT | wx.TR_SINGLE)
        #self.HideWindows()
        #self.RefreshSubtree(self.root)
        self.population_size_ctrl = None
        self.SetSizeHints(350, common.FRAME_SIZE[1])
        self.root = self.AddRoot("Configuration Settings")
        child = self.AppendItem(self.root, "Foo", wnd=wx.TextCtrl(self, wx.ID_ANY, "Lots Of Muffins"))

The problem is, any children nodes, the data for these nodes is not filled in. When i basically expand the configuration settings tree node. I see the "Foo" node, however the textbox is empty. This is the same for both text node, Until i actually click on the child node. I've looked tried every form of update / etc. Does anyone have any ideas?


To: Anurag Uniyal

Firstly sorry for not giving the rest of the code. I've gotten around this problem by simply resizing the window everytime i demo the application.

So i tried the code on my Macbook Pro running Mac OS X, with newest wx and python 2.6. I still have the same problem, however i noticed resizing the window, or even touching the scrollbar fixes the issue.

I also noticed however, there is absolutely NO problems running on Windows Vista / Windows 7.

So trying this on another macbook running an older version of wx + python. Results in the same problem :(

Is there anyway to force the panel to redraw it self? Which i am pretty sure happens when i resize the window.

If you don't have any ideas then i'll strip it down and make a demo example, im home and won't be at work until later tommorow.

+1  A: 

I tested it on window with wx version 2.8.10.1 and it works, which OS and wx version you are using?

here is self contained code, which can be copy-pasted and run

import wx
import wx.lib.customtreectrl as CT

class ConfigTree(CT.CustomTreeCtrl):
    """
        Holds all non gui drawing panel stuff
    """
    def __init__(self, parent):
        CT.CustomTreeCtrl.__init__(self, parent,
                                   id = -1,
                                   style = wx.TR_DEFAULT_STYLE | wx.TR_HAS_BUTTONS
                                        | wx.TR_HAS_VARIABLE_ROW_HEIGHT | wx.TR_SINGLE)
        self.population_size_ctrl = None
        self.SetSizeHints(350, 350)
        self.root = self.AddRoot("Configuration Settings")
        child = self.AppendItem(self.root, "Foo", wnd=wx.TextCtrl(self, wx.ID_ANY, "Lots Of Muffins"))

def main():
    app = wx.App()
    frame = wx.Frame(None, title="Test tree", size=(500,500))
    p = wx.Panel(frame, size=(500,500))
    tree = ConfigTree(p)
    tree.SetSize((500,500))
    frame.Show()
    app.MainLoop()

if __name__ == '__main__':
    main()
Anurag Uniyal
Updated my question :)
UberJumper
+1  A: 

You can use RefreshItems if you are using virtual controls, or you could refresh the panel, which would update the contents of all the children windows (widgets).

voyager