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
Post a Comment