3

ユーザーが tkinter エントリ ボックスに入力すると、コールバック関数をアクティブにしようとしています。effbot.orgによると、

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

上記のスクリプトは正常に動作しますが、これをメイン スクリプトにコピーすると、「パス」が出力されなくなります。エラーも発生しません。

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と)をトレースしようとしましたが、それらのオプションメニューでは正常に機能しているようです。anf_subsystem_menu何が起こっているのかわかりません。

4

1 に答える 1