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

F

F. GEIGER

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
 
M

Martin Franklin

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"






Regards
 
F

F. GEIGER

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 said:
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"






Regards
 
M

Martin Franklin

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 said:
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 ;-)
 
F

F. GEIGER

Martin Franklin said:
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 said:
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...

Many thanks for your effort, Martin!
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


That's a good idea! I'll go for that.

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


HTH
Martin


Many thanks again and kind regards
Franz GEIGER
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,774
Messages
2,569,596
Members
45,135
Latest member
VeronaShap
Top