2016-06-22 8 views
1

現在、PythonでTkinterライブラリを使用して経度と緯度のポイントを取り込んでファイルに出力するGUIを作成する方法を学習しています。基本的には、私はポイントのラインの正しいフォーマットを別のファイルにコピーしなければならないというプロセスを自動化しようとしています。Python Tkinter:forループを使用して作成されたウィジェットを削除します。

私はエントリーとボタンフィールドを作成して、「シェイプ」を生成するために必要なロング/ラットポイントの数を確認しました。ユーザーからのこの整数入力を使用して、forループで長い/緯度点を求める複数のウィジェットをGUIに入力します。私はそれが適切に機能しているが、今私は、これらのすべての長い/緯度の点をクリアし、他の形状が必要とするポイントの量をフィールドに再投入する能力を与える明確なボタンを持っているようにしようとしている。

は、これまでのところ、私が持っている:

def clearGrid(): 
    coordAmount = int(pointText.get()) 
    latLabel.grid_forget() 
    longLabel.grid_forget() 

    .....(contains code that populates the GUI) 
    #creating clear site Button 
    clearButton = Button(main_gui, text="Clear Sites!",command=clearGrid) 
    clearButton.grid(row=lastRow+1, column=5, pady=10) 

をしかし、私はに実行しています問題はクリアボタンがクリックされたときに、それが唯一のウィジェットではないそれらのすべての最新のインスタンスをクリアしていることです。したがって、ウィジェットのインスタンス/反復を5回作成するforループでは、ウィジェットの5番目のインスタンス/反復のみが削除されます。

私はクリアボタン機能をこれらのウィジェットの5つのインスタンスすべてを削除できるようにしようとしています。だからここ

は、私はあなたが通常のリストを経由して、すべてのそれらのウィジェットへの参照を保持する必要があるウィジェット

  def generatePoints(): 
      for x in range(0,3): 
       degLong_label = Label(main_gui, text="Degree:", height=2) 
       degLong_label.grid(row=y,column=6,sticky=E) 
       degLong = Entry(main_gui, width=4) 
       degLong.grid(row=y,column=7,sticky=W) 

       #minute 
       minLong_Label = Label(main_gui,text="Minutes:", height=2) 
       minLong_Label.grid(row=y,column=8,sticky=W) 
       minLong = Entry(main_gui,width=3) 
       minLong.grid(row=y,column=8,sticky=E) 

       #seconds 
       secLong_Label= Label(main_gui,text="Sec:",height=2) 
       secLong_Label.grid(row=y,column=9,sticky=W,padx=20) 
       secLong = Entry(main_gui,width=3) 
       secLong.grid(row=y,column=9,sticky=E,padx=20) 

       #direction 
      dirLong_Label = Label(main_gui,text="Direction:",padx=5,height=2) 
      dirLong_Label.grid(row=y,column=12,sticky=W) 
      dirLong = Entry(main_gui,width=3) 
      dirLong.grid(row=y,column=13) 

答えて

1

でGUIを移入していますかの短縮符号です。ループの前にリスト(list_of_widgets)を初期化して、ウィジェットを作成するたびにそのリストに追加してください。クリアすると、そのウィジェットのリストを繰り返して、それぞれのウィジェットを破壊することができます。それらをクリアしたら、リストをクリアして、ウィジェットを2度破壊しようとしないでください(その時点でTkinterはエラーになります)。あなたがを示し、その特定のウィジェット再び(新しいものはカウントされませんが、初期化)を計画されていない場合、あなたはおそらく、実際にウィジェットを破壊したい

def generatePoints(): 
    list_of_widgets = [] # or take the list as a parameter 
    for x in range(3): 
     degLong_label = Label(...) 
     degLong_label.grid(...) 
     list_of_widgets.append(degLong_label) 
     degLong = Entry(...) 
     degLong.grid(...) 
     list_of_widgets.append(degLong) 

     # et al. 

def clearGrid(list_of_widgets): 
    for widget in list_of_widgets: 
     widget.destroy() 

注意。

+0

ああ!それでおしまい!ありがとう! – exAns

関連する問題