Reputation: 5271
So I have this code snippet:
for p in self.ProductNames:
OptionMenuVar = StringVar()
menu = OptionMenu(self.FrameProducts, OptionMenuVar, *self.ProductNames)
OptionMenuVar.set(p)
AgeVar = StringVar()
AgeEntry = Entry(self.FrameProducts,width=15,textvariable=AgeVar,state="readonly",justify=CENTER)
which generates this UI:
How do I trace changes in OptionMenuVar
and update AgeVar
based on the selected value?
I've read The Variable Classes. I guess I know how to trace changes in OptionMenuVar
but I still don't know how to:
AgeVar
according to the new valueUpvotes: 0
Views: 1692
Reputation: 5271
So this is the way to do it:
def OnOptionMenuChnage(omv,av, *pargs):
print omv.get(), av.get()
# do more. set av value based on omv value
OptionMenuVar.trace("w", lambda *pargs: OnOptionMenuChnage(OptionMenuVar,AgeVar, *pargs))
for p in self.ProductNames:
OptionMenuVar = StringVar()
menu = OptionMenu(self.FrameProducts, OptionMenuVar, *self.ProductNames)
OptionMenuVar.set(p)
AgeVar = StringVar()
AgeEntry = Entry(self.FrameProducts,width=15,textvariable=AgeVar,state="readonly",justify=CENTER)
def OnOptionMenuChnage(omv,av, *pargs):
print omv.get(), av.get()
# do more. set av value based on omv value
OptionMenuVar.trace("w", lambda *pargs: OnOptionMenuChnage(OptionMenuVar,AgeVar, *pargs))
All the credit to Marcin answer.
Upvotes: 2