繁体   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