2015-06-03 119 views
0

我的目標是最終有一些標籤和條目出現並與一週中的不同日期對應。我目前正致力於讓按鈕綁定生成不同的標籤,具體取決於一週中的哪一天被選中。這是有點工作,但不是我的期望,也不是我真正想要的。現在我必須點擊兩次按鈕才能更新標籤。我對編程還很陌生,我很感謝您提供的任何幫助!Tkinter按鈕綁定問題

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() 

更新:我意識到我的錯誤。我覺得很愚蠢。我換成

self.var1.set('') 

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

而且好像一切工作正常。希望這可以幫助另一位初學者!

+0

請不要使用編輯在問題中編寫答案。如果你覺得你自己找到了答案,你可以發佈自己問題的答案。這使答案與問題分離。提前致謝。 – fhdrsdg

回答

0

同時不要使用綁定和命令: (不要忘了寫你的進口線)

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() 

一個非常不同的(可能更好)的解決方案:

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) 
     for 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() 
+0

如果有人能告訴我我是否應該寫出兩個答案,請刪除第一個或.... –