[Tkinter-discuss] grid manager does propagate width - why?

Martin B. spooky.ln at tbs-software.com
Tue Jan 18 13:37:07 CET 2011


V Tue, 18 Jan 2011 11:54:37 +0100
Helmut Jarausch <jarausch at igpm.rwth-aachen.de> napsáno:

sry, my english is not good. But your prob is simple.
you defined 'grid' method in class. 
but calling self.grid(column=1, row=0) after Tk.Entry.__init__() cause
your problem. this call your defined 'grid' method.
Entry not be positioned in grid. this 'grid' Frame.

solution is rename your 'grid' method such as 'fgrid' or something else
and from main call NameE.fgrid(column=0, row=0)

this works
<code>

import tkinter as Tk

class LabEntry(Tk.Entry) :
  def __init__(self,root,label,**args) :
    
    self.Frame= Tk.Frame(root)
    Lab=Tk.Label(self.Frame,text=label)
    Lab.grid(column=0,row=0)
    
    Tk.Entry.__init__(self,self.Frame,**args)
    self.grid(column=1,row=0)
  
  def fgrid(self,**args) :
    self.Frame.grid(**args)

def Finish() :
  root.destroy()

root= Tk.Tk()
root.protocol('WM_DELETE_WINDOW',Finish)
Name= Tk.StringVar()
Name.set('')
#NameF= Tk.Frame(root)
#NameF.grid(column=0,row=0)
#Tk.Label(NameF,text='Name :').grid(column=0,row=0)
#NameE= Tk.Entry(NameF,textvariable=Name,width=25)
#NameE.grid(column=1,row=0)
#Tk.mainloop()
NameE= LabEntry(root,'Name :',textvariable=Name,width=25)
NameE.fgrid(column=0,row=0)
Tk.mainloop()

</code>


> Thanks Martin, but now LabEntry is derived from Tk.Frame.
> Therefore any method calls to the Entry widget within the LabEntry 
> widget like a bind method call, doesn't work anymore.
> What was wrong with my example?
> 
> Helmut.
> 
> On 01/18/11 11:46:03, Martin B. wrote:
> > V Tue, 18 Jan 2011 11:23:30 +0100
> > Helmut Jarausch <jarausch at igpm.rwth-aachen.de> napsáno:
> > 
> > hi, 
> > i make little rewrite your LabEntry.
> > seems to work
> > 
> > <code>
> > 
> > import tkinter as Tk
> > 
> > class LabEntry(Tk.Frame) :
> >   def __init__(self,root,label,**args) :
> >     super().__init__()
> >     
> >     entry = Tk.Entry(self, **args)
> >     entry.grid(column=1, row=0)
> >     Lab=Tk.Label(self,text=label)
> >     Lab.grid(column=0,row=0)
> > 
> > def Finish() :
> >   root.destroy()
> > 
> > root= Tk.Tk()
> > root.protocol('WM_DELETE_WINDOW',Finish)
> > Name= Tk.StringVar()
> > Name.set('')
> > NameE= LabEntry(root,'Name :',textvariable=Name,width=25)
> > NameE.grid(column=0,row=0)
> > Tk.mainloop()
> > 
> > </code>
> > 
> > > Hi,
> > > 
> > > I have two version of a simple labeled entry widget.
> > > 
> > > import Tkinter as Tk
> > > 
> > > class LabEntry(Tk.Entry) :
> > >   def __init__(self,root,label,**args) :
> > >     self.Frame= Tk.Frame(root)
> > >     Lab=Tk.Label(self.Frame,text=label)
> > >     Lab.grid(column=0,row=0)
> > >     Tk.Entry.__init__(self,self.Frame,**args)
> > >     self.grid(column=1,row=0)
> > >   
> > >   def grid(self,**args) :
> > >     self.Frame.grid(**args)
> > > 
> > > def Finish() :
> > >   root.destroy()
> > > 
> > > root= Tk.Tk()
> > > root.protocol('WM_DELETE_WINDOW',Finish)
> > > Name= Tk.StringVar()
> > > Name.set('')
> > > NameF= Tk.Frame(root)
> > > NameF.grid(column=0,row=0)
> > > Tk.Label(NameF,text='Name :').grid(column=0,row=0)
> > > NameE= Tk.Entry(NameF,textvariable=Name,width=25)
> > > NameE.grid(column=1,row=0)
> > > Tk.mainloop()
> > > 
> > > -------------------------------------------------
> > > 
> > > This version, which doesn't use LabEntry, reserves space for 25 
> > > characters in the entry widget.
> > > 
> > > But, replacing the last 6 lines by
> > > 
> > > NameE= LabEntry(root,'Name :',textvariable=Name,width=25)
> > > NameE.grid(column=0,row=0)
> > > Tk.mainloop()
> > > 
> > > the (internal) entry widget has only size 0 initially.
> > > Why?
> > > 
> > > Many thanks for a hint,
> > > Helmut.
> > > _______________________________________________
> > > Tkinter-discuss mailing list
> > > Tkinter-discuss at python.org
> > > http://mail.python.org/mailman/listinfo/tkinter-discuss
> > > 
> > 
> > _______________________________________________
> > Tkinter-discuss mailing list
> > Tkinter-discuss at python.org
> > http://mail.python.org/mailman/listinfo/tkinter-discuss
> > 
> 
> 
> 



More information about the Tkinter-discuss mailing list