2016-12-14 6 views
-1

2番目の関数にエントリフィールド値を渡そうとしていますが、空の文字列しか取得できません。誰かが私に行方不明を教えてもらえますか?Python 3とTKinter - my_var.get()を通じてエントリ値を取得できません

def fenetre_changer_nom_joueur(self,joueur): 

    self.changer_nom_main = Tk() 
    self.changer_nom_main.geometry('300x200') 
    self.string_nom_joueur = StringVar() 
    Entry(self.changer_nom_main, textvariable=self.string_nom_joueur).grid(row=2, column=2, sticky=W) 
    Button(self.changer_nom_main, text="Enregistrer",command = lambda: self.changer_nom_joueur(joueur), padx=10, 
      pady=10).grid(row=3, column=1, sticky=W) 
    Button(self.changer_nom_main, text="Fermer", width=13, 
      command=lambda: self.fermer_fenetre(self.changer_nom_main), padx=10, 
      pady=10).grid(row=3, column=2, sticky=W) 
    self.changer_nom_main.mainloop() 


def changer_nom_joueur(self, joueur): 
    """ 
    This is where I'm tring to get the Entry field value. But the .get() return an emptry string 
    """ 
    temp = self.string_nom_joueur.get() 
    joueur.nom = temp 
+0

あなたのコードはうまく動作します。何かを入力して「Enregistrer」ボタンをクリックすると、入力したものに「temp」が設定されます。あなたが完全な実例を示していないので、残りのコードを推測したとき、私は間違っていると考えました。 –

答えて

-1
Entry(self.changer_nom_main, textvariable=self.string_nom_joueur)..... 

この行はself.string_nom_joueurするtextvariableを設定します。ここに私のコードです。私はあなたがしたいことは反対であると思います。 self.string_nom_joueurをtextvariableにします。

最初すなわち変数にエントリを割り当てる必要があります:

self.entrynamefield = Entry(self.changer_nom_main, textvariable=self.string_nom_joueur)..... 

次にあなたがself.string_nom_joeuerを設定する.SET()メソッドを使用する必要があります。

self.string_nom_joeuer.set(self.entrynamefield.get()) 

あなたの後あなたの文字列変数を設定して、あなたの関数changer_nom_joueurは ".get()"に何かを持っています

+0

'textvariable'属性を使用している場合、ウィジェットを変数に割り当てる必要はありません。 –

+0

textvariableが割り当てられていないときはどうやってそれを呼び出しますか?複数のエントリウィジェットがある場合、どのようにtextvariableを区別しますか? – liamhawkins

+0

私はあなたの質問を理解していません。あなたはtextvariableを "呼び出す"ことはありません。これはウィジェットの属性です。ウィジェットを入力すると、関連するtextvariableの値が自動的に更新されます。変数に '.get()'を呼び出すことで値を取得できます(例: 'self.string_nom_joueur.get()')。複数のエントリウィジェットがある場合、通常は複数の 'StringVar'を持ちます。つまり、あなたは 'textvariable'を使わず、ウィジェットから直接値を取得するだけです。 –

関連する問題