为什么entry小部件在本例中不起作用?我将它放在一个框架中,tkinterpython

为什么entry小部件在本例中不起作用?我将它放在一个框架中,tkinterpython,python,tkinter,Python,Tkinter,这是我正在创建的一个基本时钟和闹钟,在这个过程中,我希望用户输入他们想要为闹钟设置的小时和分钟。但是这里的入口小部件没有响应 import time import tkinter as tk current_date, current_time = 0, 0 def current_info(timeinfo): #function to get the current time and date global current_date, current_time # cu

这是我正在创建的一个基本时钟和闹钟,在这个过程中,我希望用户输入他们想要为闹钟设置的小时和分钟。但是这里的入口小部件没有响应

import time 
import tkinter as tk


current_date, current_time = 0, 0
def current_info(timeinfo): #function to get the current time and date
    global current_date, current_time
    # current time
    current_time = time.strftime('%H:%M:%S')
    current_date = time.strftime(r'%m/%d/%Y')
    clock.after(200, timeinfo)

#Initialise the window
clock = tk.Tk()
clock.title('Easy CLock')
clock.configure(bg='#121212')
clock.columnconfigure(0, weight = 1)
clock.columnconfigure(1, weight = 1)
clock.columnconfigure(2, weight = 1)
clock.columnconfigure(3, weight = 1)


border_effects = {
    "flat": tk.FLAT,
    "sunken": tk.SUNKEN,
    "raised": tk.RAISED,
    "groove": tk.GROOVE,
    "ridge": tk.RIDGE,
}

#Logo will be under the main parent
logo = tk.PhotoImage(file = r'C:\Users\User\VSC\Alarm\Logo1.png')
logo_size = logo.subsample(5)

#Time and Date function
def time_date():
    current_info(time_date)
    #Displays the time
    c_time = tk.Label(f_time, text = current_time, fg='white', bg='#121212', font=('Verdana', 30))
    c_date = tk.Label(f_time, text = current_date, font=('Verdana', 10), fg='white', bg='#121212')
    c_time.grid(column=0, row=0)
    c_date.grid(column=0, row=1)

   
#alarm button command
def alarm_func(): 
    current_info(alarm_func)
    c_time = tk.Label(f_alarm, text = current_time, fg='white', bg='#121212', font=('Verdana', 10))
    c_date = tk.Label(f_alarm, text = current_date, font=('Verdana', 10), fg='white', bg='#121212')
   
    def pressed_enter(): #Command for the enter button
        set_label = tk.Label(f_alarm, text = f'Alarm has been set for {time_set}', fg ='white', bg = '#121212', borderwidth = 1, relief = border_effects['sunken'])
        set_label.grid(column = 4, row = 0, sticky = 'W')
       
    # Set the time and date for the alarm
    set_time = tk.StringVar()
    alarm_entry = tk.Entry(clock, textvariable = set_time)
    set_time.set('H : M')
    time_set = alarm_entry.get()
    
    #label and entry to set alarm / Enter Button
    c_label = tk.Label(f_alarm, text = 'Set Alarm: ', font = ('Verdana', 10), fg= 'white', bg ='#121212' )
    alarm_enter = tk.Button(f_alarm, text = 'Enter', font = ('Verdana', 7),  width = 5, command = pressed_enter)

    #Pack the widgets
    c_time.grid(row = 0, column = 0)
    c_date.grid(column = 1 , row = 0)
    alarm_enter.grid(row = 2, column = 3)
    c_label.grid(row = 2, sticky = 'W')
    alarm_entry.grid(row = 2, column = 1)
    

    #configure the empty columns
    f_alarm.columnconfigure(2, minsize = 10)

def recall_frame(event):
    if event == f_alarm:
        event.grid_forget()
        f_time.grid(column=0, row =1, columnspan = 4, sticky = 'N')
    elif event == f_time:
        event.grid_forget()
        f_alarm.grid(column=0, row=1, columnspan = 4, sticky = 'W')

def back_func():
    pass

#Creating Frames
f_time = tk.Frame(clock)  #Clock Button
f_alarm = tk.Frame(clock) #Alarm Buttton

#configure the frames
f_time.configure(bg = '#121212')
f_alarm.configure(bg = '#121212')

#Setting label in the frame
f_lbl = tk.Label(clock, text= ' Simplistic Clock', image = logo_size, font=('Verdana', 30), fg='white', bg='#121212', compound = tk.LEFT, padx = 35) 
time_but = tk.Button(clock, text='Clock', command= lambda :[time_date(), recall_frame(f_alarm)], bg='#f39c12', relief = border_effects['ridge'], pady = 7)
alarm_but = tk.Button(clock, text = 'Alarm', command = lambda :[alarm_func(), recall_frame(f_time)], bg='#f39c12', relief = border_effects['ridge'], pady = 7)
quit_but = tk.Button(clock, text='Exit', command = clock.quit, bg='#f39c12', relief = border_effects['ridge'], pady = 7)
back_but = tk.Button(clock, text = 'Back ', command = back_func, bg='#f39c12', relief = border_effects['ridge'], pady = 7)

f_lbl.config(borderwidth = 4, relief = border_effects['sunken'])

#Putting it on the frames
f_lbl.grid(column = 0, row = 0, columnspan = 5, sticky = 'EW')
time_but.grid(column = 0, row = 3, sticky = 'EW')
alarm_but.grid(column = 1, row = 3, sticky = 'EW')
quit_but.grid(column = 3, row = 3, sticky = 'EW')
back_but.grid(column = 2, row = 3, sticky = 'EW')

clock.mainloop()

我试着在框架外测试一个输入小部件,输入小部件能够工作,是因为框架f_报警没有在后台持续循环吗?

当有人点击你的按钮激活
按下的_enter()
功能时,每次它都会再次调用该函数,该函数将时间设置为H:M,并会在
set\u time.get()之后立即调用该值

每次单击按钮时,您也会创建一个新条目,因为您将
alarm\u Entry=tk.Entry(clock,textvariable=set\u time)
也在那里。您应该只将
set_time.get
放在该按钮的内部,以便它获取当前填充到条目中的值。其他的事情像

set_time = tk.StringVar()
alarm_entry = tk.Entry(clock, textvariable=set_time)
set_time.set('H : M') 

应该放在该函数之外,这样就不会在每次有人单击按钮时调用它们。

您创建了一个条目,将其内容设置为
'H:M'
,然后立即对其调用
.get()
。除了
'H:M'
之外,您还可能收到哪些结果?看起来您每秒要创建5次新的小部件集,因此用户在该条目中输入的任何内容都将很快被一个新条目覆盖。