python - Tkinter button bind issues -


my goal have few labels , entries appear , correspond different days of week. working on getting button binding generate different label depending on day of week selected. it's sort of working, not how expected , not how want. right have click on button twice update label. i'm still pretty new programming , appreciate can provide!

root = tk() root.geometry('300x300') root.title('day')  frame3 = frame(root) frame4 = frame(root) frame3.grid()  dayframe = frame(frame4) class app(frame):     def __init__(self, master):         frame.__init__(self, master)         self.var1 = stringvar()         self.var1.set('')         self.sunbtn = button(frame3, text='sunday', command=lambda day='sunday': self.var1.set(day))         self.sunbtn.bind('<button-1>', self.openframe)         self.sunbtn.grid(row=1, column=0)         self.monbtn = button(frame3, text='monday', command=lambda day='monday': self.var1.set(day))         self.monbtn.bind('<button-1>', self.openframe)         self.monbtn.grid(row=1, column=1)      def openframe(self,*args):         frame4.grid()         dayframe.grid()         daylbl = label(dayframe, text=self.var1.get())         daylbl.grid(row=1, column=0)  app = app(root) app.mainloop() 

update: realized mistake. feel dumb. replaced

self.var1.set('') 

with

self.var1.trace('w', self.openframe) 

and seems working properly. can beginner @ point!

don't use bind , command @ same time: (and don't forget write import line)

from tkinter import *  root = tk() root.geometry('300x300') root.title('day')  frame3 = frame(root) frame4 = frame(root) frame3.grid()  dayframe = frame(frame4) class app(frame):     def __init__(self, master):         frame.__init__(self, master)         self.var1 = stringvar()         self.var1.set('')         self.sunbtn = button(frame3, text='sunday', command= lambda: self.openframe('sunday'))         self.sunbtn.grid(row=1, column=0)         self.monbtn = button(frame3, text='monday', command=lambda: self.openframe('monday'))         self.monbtn.grid(row=1, column=1)      def openframe(self, day):         frame4.grid()         dayframe.grid()         daylbl = label(dayframe, text=day)         daylbl.grid(row=1, column=0)  app = app(root) app.mainloop() 

a different (and better) solution:

from tkinter import * import calendar  root = tk() root.geometry('600x300') root.title('day')  frame3 = frame(root) frame4 = frame(root) frame3.grid()  dayframe = frame(frame4) class app(frame):     def __init__(self, master):         frame.__init__(self, master)                 frame4.grid()         dayframe.grid()         self.daylbl = label(dayframe, text="")         self.daylbl.grid(row=1, column=0)         i,  day in enumerate(calendar.day_name):             button = button(frame3, text=day, command= lambda day=day:\                 self.daylbl.configure(text=day))             button.grid(row=1, column=i)           app = app(root) app.mainloop() 

Comments

Popular posts from this blog

javascript - Bootstrap Popover: iOS Safari strange behaviour -

Magento/PHP - Get phones on all members in a customer group -

session - Logging Out Using PHP -