未定义名称“set\u hour”

2024-03-29 01:47:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用tkinter编写python代码。我想通过按“j”将标签set\ U hour的状态更改为“活动”。每次我运行我的代码,我得到一个错误,说设置\小时没有定义。我需要在这里使用“self”吗?为什么你能解释一下。谢谢

class SetClock:
def __init__(self, parent):
    self.myParent = parent

    self.current_datetime_label = tkinter.Label(root, text=datetime.datetime.now(), bg = "black", foreground="white").grid(row=1)
    #current_time_label.pack()

    self.menu_label = tkinter.Label(root, text="Menu", bg="sky blue", foreground="black",width=18).grid(row=2)
    self.set_day = tkinter.Label(root, text="Set Day", bg="blue",foreground="white",width=9,state="active").grid(row=2, column=1)
    self.set_hour = tkinter.Label(root, text="Set Hour",bg="blue",foreground="white",width=9).grid(row=2, column=2)
    self.set_mintutes = tkinter.Label(root, text="Set Minutes", bg="blue",foreground="white",width=10).grid(row=2, column=3)
    self.exit_label = tkinter.Label(root, text="Exit", bg="black", foreground="white").grid(row=2, column=4)

    self.day_menu_label = tkinter.Label(root, text="Day",bg="sky blue",width=18).grid(row=3)
    #menu_label.pack(side="right")
    #current_time_label.pack()

def navigate_menu(event):
    current_pressed = str(event.char)
    print("pressed", current_pressed)
    if current_pressed is 'j':
        print("ok")
        set_hour.config(state="active")

root = Tk()    
#frame = Frame(root)
setclock = SetClock(root)
root.title("Set Clock")
root.minsize(width=500,height=500)
root.bind("<Key>",SetClock.navigate_menu)
root.mainloop()

Tags: textselftkinterrootcurrentwidthlabelgrid
2条回答

grid()返回None,所以您必须

self.set_hour = tkinter.Label(...)
self.set_hour.grid(...)

您需要将navigate_menu定义为实例方法:

def navigate_menu(self, event):
    current_pressed = str(event.char)
    print("pressed", current_pressed)
    if current_pressed is 'j':
        print("ok")
        self.set_hour.config(state="active")

绑定时,请改为传递绑定方法:

root.bind("<Key>", setclock.navigate_menu)

另外,分开Label创建行和grid()行。否则,self.set_hour变成None,因为grid()方法返回None。你知道吗

self.set_hour = tkinter.Label(root, text="Set Hour",bg="blue",foreground="white",width=9)
self.set_hour.grid(row=2, column=2)

相关问题 更多 >