2016-05-03 11 views
-1

この入力ボックスのテキスト入力をリストに保存してから印刷します。ボタンを押したときに入力を保存することはできず、単にプレースホルダ変数が出力されます。入力ウィジェットから変数を保存する

names = [] 

from tkinter import* 

class Trip: 
    def __init__(self, parent): 
     E_name = "q" 
     self.En_name = "g" 
     self.En_name = str(self.En_name) 
     self.go = Frame(parent, width = 500, height = 450, bg = "snow", pady = 30, padx = 10) 
     self.go.grid(row = 1, column = 0) 
     self.go.grid_propagate(0) # to reserve space required for frame 
     self.tet = Frame(parent, width = 500, height = 450, bg = "snow") 

     name = Label(self.go, text = "Name:", bg = "snow") 
     name.grid(row = 1, column = 0, sticky = E) 
     self.E_name = Entry(self.go, width = 40, textvariable = self.En_name) 
     self.E_name.grid(row = 1, column = 1, sticky = W, pady = 4) 


     menuButton = Button(self.go, text = "Continue", command = self.breakeverything) 
     menuButton.grid(row = 8, column = 1, pady = 4) 

    def breakeverything(self): 
     names.append(self.En_name) 
     print (names[0]) 
     self.E_name.delete(0, "end") 

#main routine 
if __name__ == "__main__": 
    root = Tk() 
    root.title("Traveller Details") 
    play = Trip(root) 
    root.geometry("500x450+0+0") 
    root.mainloop() 

答えて

2

textvariabletkinter.StringVar()、ない原始的な文字列であると考えられます。あなたのアプリケーションは、それを必要とすべきではないほど単純です。 、self.En_nameを取り出しtextvariableを取り出し、そしてちょうど(もはや適切な名前であるべきである)breakeverything()Entryウィジェットの現在の値を取得する:

def breakeverything(self): 
    names.append(self.E_name.get()) 
    print(names[-1]) # printing the last name in the list seems more useful 
    self.E_name.delete(0, "end") 

私もTrip.__init__namesを移動し、それを作る推薦します他のすべてと同様にインスタンス変数はself.names = []です。スコープを把握しやすくなります。

+0

申し訳ありませんが、私はより良い方法を見つけました! –

1

あなたは(あなたがそのようなStringVarなどの特別なTkinterの変数の1つを使用する必要があります)が誤ってtextvariableを使用しているが、あなたはすべてでそれを使用する必要はありません。あなたがtextvariableを使用してoを主張する場合、StringVarを使用

self.E_name = Entry(self.go, width = 40) 
... 
print("you entered: " + self.E_name.get()) 

をして、代わりにその上getメソッドを呼び出します:単純にあなたが値をしたいときgetメソッドを呼び出して、ウィジェットへの参照を保存

self.En_name = StringVar() 
self.E_name = Entry(..., textvariable=self.En_name) 
... 
print("you entered: " + self.En_name.get()) 
+0

あまりにも複雑で、本当の人に尋ねないでください! –

+0

@AlanJones:それについて何が複雑ですか? 2行のコードを変更するだけです。ウィジェットまたは関連する変数の 'get'メソッドを呼び出す必要があります。それがうまくいくように設計されています。ウィジェットからデータを取り出す他の方法はありません。 –

関連する問題