簡體   English   中英

Tkinter按鈕綁定問題

[英]Tkinter button bind issues

我的目標是最終使一些標簽和條目出現並與一周中的不同日子相對應。 我目前正在努力使按鈕綁定生成一個不同的標簽,具體取決於選擇的是星期幾。 這有點工作,但不是我的預期,也不是我真正想要的。 現在,我必須單擊兩次按鈕才能更新標簽。 我對編程還是很陌生,感謝您提供的任何幫助!

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)

似乎一切正常。 希望這可以在某種程度上幫助另一個初學者!

不要同時使用bind和command:(並且不要忘記編寫導入行)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM