[PMW] Rename a notebook's page - how?

Martin Franklin mfranklin1 at gatwick.westerngeco.slb.com
Tue Sep 30 21:43:17 CEST 2003


On Tue, 2003-09-30 at 17:59, F. GEIGER wrote:
> Thank you Martin,
> 
> but I've still troubles, because the tab has the new name now, but the page
> is in PMW still known with the old name.
> 
> I see this because I've registered for the raisecommand event:
> 
>    def _onSelect_(self, pageName):
>       Proxy.DataProxy().containerSelect(pageName)
>       return
> 
> And here pageName is the old name despite the fact that the new name is
> displayed on the tab.
> 
> Kind regards
> Franz GEIGER
> 
> 
> "Martin Franklin" <mfranklin1 at gatwick.westerngeco.slb.com> schrieb im
> Newsbeitrag news:mailman.1064934294.5084.python-list at python.org...
> > On Tue, 2003-09-30 at 14:49, F. GEIGER wrote:
> > > Hi again,
> > >
> > > I'd like to rename a page of a notebook. Deleting the page and adding a
> new
> > > one is not really an option, because the page is filled with other
> controls
> > > already. So I looked into Pmw.Notebook. There are quite a few lists and
> > > dicts which were to be changed and I wasn't successful in the first try.
> > >
> > > However, if nobody has ever done this, I'd have to rebuild the whole
> page
> > > after deleting/adding. I really hope there's an other way to go.
> > >
> > > Kind regards
> > > Franz GEIGER
> > >
> > >
> > >
> >
> >
> > You need to get hold of the "tab" widget and change it's text.
> >
> > nb = Pmw.NoteBook(root)
> > nb.pack()
> >
> >
> > nb.add("Page1")
> > nb.add("Page2")
> > nb.add("Page3")
> >
> >
> > tab = nb.tab("Page1")
> > tab["text"]= "Martin1"
> >


I've been trying to 'get round' this..... without much success
internally the NoteBook keeps track of it's pages using both a list of
names and a dictionary of name : page attributes 

so I thought you could mess around with these...  

    notebook._pageAttrs[newname] = notebook._pageAttrs[oldname]
    notebook.tab(oldname)["text"]=newname
    notebook._pageNames[index]=newname
    del notebook._pageAttrs[oldname]

However when you try to raise your newly renamed page it fails :-(
because the callback that lifts the page to the top has the page name 
stuck in it like so:

        if self._withTabs:
            # Create the button for the tab.
            def raiseThisPage(self = self, pageName = pageName):
                self.selectpage(pageName)
            tabOptions['command'] = raiseThisPage


Where pageName is the name given at the time the page was created
(the above code is from the insert method in PmwNotebook)

So you would have to do quite a lot of messing around....
replacing the above callback with your own at least...  This is where I
stopped trying...

So in order to keep it simple I would (in your own code) keep a
dictionary  of old vs new page names or something simple like that.
So you above method would look something like this:-


def _onSelect_(self, pageName):
    realPageName = self.myPageDict[pageName]
    Proxy.DataProxy().containerSelect(realPageName)
    return 



Or failing that convert the pageName into a page index (an integer)
using the notebook.index(pageName) method. 


HTH
Martin


P.S  Most people on this list do not top post.  (I'm not saying this is
good _or_ bad ;-) 


-- 
Martin Franklin <mfranklin1 at gatwick.westerngeco.slb.com>






More information about the Python-list mailing list