我试图在用户在 tkinter 输入框中输入内容时激活回调函数。根据effbot.org http://effbot.org/tkinterbook/variable.htm,
您可以使用trace方法将“观察者”回调附加到
多变的。每当内容更改时都会调用回调:
所以我厌倦了这个,
import Tkinter as tk
window2=tk.Tk()
anf_frame1=tk.Frame(window2,bg='white',relief='groove',bd=0,width=1190,height=175)
anf_frame1.place(x=10,y=50)
def myfunction(*args):
print 'pass'
stringvar1 = tk.StringVar(anf_frame1)
stringvar1.trace("w", myfunction)
anf_fault_entry=tk.Entry(anf_frame1,width=35,font=('calibri',(14)),bg='white',textvariable=stringvar1)
anf_fault_entry.grid(row=2,column=1,padx=(5,5))
window2.mainloop()
上面的脚本工作正常。但是当我将其复制到我的主脚本时,它不再打印出“pass”。它也不给我任何错误。
我已经确认没有其他变量名stringvar1
和相同的函数名myfunction
。而且没有打字错误,因为我只是使用复制粘贴功能。
我现在很困惑为什么当我将其复制到我的主脚本时它不起作用。
仅供参考,在复制跟踪回调之前和之后,我的主脚本正在正常工作。我的主脚本有 tkinter 窗口,其中有一些标签和输入框,这些标签和输入框不应影响上述操作。是什么导致了这个问题?我错过了什么?
- - 编辑 - -
def Entrybox_002():
def myfunction(*args):
print 'pass'
window2=tk.Toplevel(root)
md1.Drag_Window(window2, nf_sizex, nf_sizey, nf_posx, nf_posy, nf_title, nf_titlesize,nf_level)
''' New Entry labels & Dropdowns'''
#Frame to hold labels
anf_frame1=tk.Frame(window2,bg='white',relief='groove',bd=0,width=1190,height=175)
anf_frame1.place(x=10,y=50)
anf_frame2=tk.Frame(window2,bg='#CCF1FF',relief='groove',bd=0,width=700,height=85)
anf_frame2.place(x=50,y=140)
label_list=['JCN','Fault','System','Sub-System','Status','Faultcode']
for i in range (6):
tk.Label(anf_frame1,text=label_list[i],font=('calibri',(16)),bg='white').grid(row=1,column=i,padx=(40,40),pady=(5,5))
anf_jcn_number=tk.Label(anf_frame1,text=Calculate_linenumber(),font=('calibri',(16)),bg='white',fg='blue')
anf_jcn_number.grid(row=2,column=0)
stringvar1 = tk.StringVar(anf_frame1)
stringvar1.trace("w", myfunction)
anf_fault_entry=tk.Entry(anf_frame1,width=35,font=('calibri',(14)),bg='white',textvariable=stringvar1) #<------------------------ENTRY BOX THAT I AM TRYING TO TRACE
anf_fault_entry.grid(row=2,column=1,padx=(5,5))
anf_system_menu = md1.MyOptionMenu(anf_frame1, 'Select System', anf_system_choices,Subsytem_display)
anf_system_menu.grid(row=2,column=2,padx=(5,5))
(anf_system_menu.var).trace("w",myfunction)
anf_status_menu = md1.MyOptionMenu(anf_frame1, 'Select Status', anf_status_choices,Subsytem_display)
anf_status_menu.grid(row=2,column=4,padx=(5,5))
(anf_status_menu.var).trace("w",myfunction)
anf_faultcode_menu1 = md1.MyOptionMenu(anf_frame1, 'When fault found?', anf_faultcode_1,Operational_effect)
anf_faultcode_menu1.grid(row=2,column=5,padx=(5,5))
(anf_faultcode_menu1.var).trace("w",myfunction)
anf_date_button=tk.Button(anf_frame2,image=images.adf_date_chooser,text='Date',compound='left',font=('calibri',(12),'italic'),bg='white',command=Create_calendar)
anf_date_button.grid(row=1,column=0,padx=(15,15),pady=(5,5))
anf_ownership=tk.Label(anf_frame2,text='Reported by',font=('calibri',(14),'italic'),bg='#CCF1FF')
anf_ownership.grid(row=1,column=1,padx=(15,15),pady=(5,5))
anf_date_label=tk.Label(anf_frame2,text=today_date,font=('calibri',(14),'italic'),bg='#CCF1FF',fg='blue')
anf_date_label.grid(row=2,column=0,padx=(15,15),pady=(5,5))
anf_button1=tk.Button(window2,text='Submit',relief='groove',bd=1,font=('calibri',(12)),bg='green',padx=10,pady=3,command=Submit_Newfault)
anf_button1.place(x=1100,y=175)
anf_button1.config(state='normal',bg='grey')
这是创建输入框的函数(anf_fault_entry
)我问的是。它位于带有其他几个小部件的顶级窗口上。我尝试跟踪其他选项菜单(例如anf_system_menu
and anf_subsystem_menu
)使用与输入框相同的功能,但对于这些选项菜单来说似乎工作正常。我不知道发生了什么事。