[Fwd: Re: Using a window style in a Toplevel window]

craf prog at vtr.net
Thu Dec 9 07:12:09 EST 2010


--------- Mensaje reenviado --------
> De: Eric Brunel <eric.brunel at pragmadev.nospam.com>
> Para: python-list at python.org
> Asunto: Re: Using a window style in a Toplevel window
> Fecha: Thu, 09 Dec 2010 10:00:39 +0100
> Grupos de noticias: comp.lang.python
> 
> In article <mailman.185.1291395907.2649.python-list at python.org>,
>  craf <prog at vtr.net> wrote:
> 
> > Hi.
> > 
> > I use Python 3.1 and Tkinter.ttk 8.5 on Ubuntu 9.10.
> > 
> > CODE:----------------------------------------------------
> > 
> > module:FMain.py
> > 
> > from tkinter import ttk
> > from FSecondWindow import *
> > 
> > class App:
> >     def __init__(self,master):
> > 
> >         button1 = ttk.Button(master,text='Show
> > TopLevel',command=lambda:window())
> >         button1.pack()
> > 
> >        
> > master = Tk()
> > app = App(master)
> > style = ttk.Style()
> > style.theme_use('clam')
> > master.mainloop()
> > 
> > 
> > module:FSecondWindow.py
> > 
> > from tkinter import *
> > from tkinter import ttk
> > 
> > def window():
> >     t = Toplevel()
> >     button2 = Button(t,text='Hello').pack()    
> >     
> > 
> > CODE EXPLANATION:-------------------------------------------
> > 
> > 1. From the main module FMain.py call the window function that is
> > located in FSecondWindow module and create a toplevel window.
> > 
> > 2.I apply a theme called 'clam' to the master window to improve the
> > appearance of their widgets.
> > 
> > QUERY:--------------------------------------------------
> > 
> > How I can make the toplevel window also take the theme 'clam'?
> 
> Short answer: you can't. No directly anyway.
> 
> Long answer: As you might be aware, there are 2 widget sets in 
> tk/tkinter, the "old" one for which classes are directly in the tkinter 
> module, and the new one that are in the ttk submodule. Only the second 
> set supports theming, not the first one. Unfortunately, there are a few 
> widgets that exist only in the first set, and Toplevel is one of those. 
> So no theming is directly available for toplevels, and you can change 
> whatever you want via style.theme_use, it won't be reflected on 
> toplevels.
> 
> By the way, as you wrote the code above, it won't be reflected on your 
> button either, since you used the Button class, which is taken in 
> tkinter directly, so it is the "old" Button class, not the new one. To 
> get the new one, use ttk.Button, not Button.
> 
> For your toplevel, there is however a simple workaround: Since there is 
> a Frame widget in the new widget set, you can simply insert such a frame 
> in your toplevel, make sure it will take the whole space, and then 
> insert your widgets in this frame rather than in the toplevel directly. 
> The code for your 'window' function would then become:
> 
> def window()
>     t = Toplevel()
>     frm = ttk.Frame(t)
>     frm.pack(fill=BOTH, expand=True)
>     button2 = ttk.Button(frm, text='Hello')
>     button2.pack()
> 
> (Note also that I have put the creation of the button and its packing in 
> 2 lines. You should never do variable = widget.pack(…) since pack does 
> not return the widget. It always returns None, so doing so won't put 
> your widget in the variable).
> 
> The code above should do what you're after.
> 
> > Thanks in advance.
> 
> HTH
>  - Eric -


Hi Eric.

¡Thank you very much, for the answer.!

Regards

Cristian Abarzúa F




More information about the Python-list mailing list