V Tue, 18 Jan 2011 11:54:37 +0100 Helmut Jarausch <jarau...@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 <jarau...@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@python.org > > > http://mail.python.org/mailman/listinfo/tkinter-discuss > > > > > > > _______________________________________________ > > Tkinter-discuss mailing list > > Tkinter-discuss@python.org > > http://mail.python.org/mailman/listinfo/tkinter-discuss > > > > > _______________________________________________ Tkinter-discuss mailing list Tkinter-discuss@python.org http://mail.python.org/mailman/listinfo/tkinter-discuss