2017-08-15 10 views
0

私はまずこの問題を解決する方法を考え出しましたが、根底にある原因は不明です。getterが使用されていない場合、タプルは数値を返します

私はtkinterを使用してさまざまな入力を受け入れ、必要に応じてpynmea2経由でGPS座標を取得し、すべての入力フィールドをCSVファイルに出力するシンプルなGPSタグャーを作成しました。ユーザーは入力フィールドをクリアして次のポイントに移動することができます。

昨日、ある特定のフィールドが1つ増えていることがわかったので、自動インクリメントするオプションを含めることは意味がありました。私はそうするためにtk.Checkbuttonを使いました。

内部およびCSVファイルで使用されるフィールド名は、タプルとして格納されます。時

fields = 'gs_rated_input_voltage', ... 'gs_equipment_location' 

はすべて満たされたテキストボックスの上にループ反復するために、現在の入力を保存するために命じて、その関数からそれらを返すされています。エントリは関数のリストとして格納され、戻り値の型は何も異なると宣言されていないので、タプルの内容がリストに格納されていると仮定しています。

入力をクリアするために命じた場合、特定のフィールドが充填され、チェックボックスがチェックされている場合は、値が格納され、スライス:

text = entry[1].get() 
mod_text = str(text) 
last_int = int(mod_text[-1:]) 
mod_text = mod_text[:-1] + str(last_int + 1) 
entry[1].delete(0, tk.END) 
entry[1].insert(0, mod_text) 

エントリは、数字、文字、およびハイフンが含まれていますが、最後の文字が確かに数字です - これはうまくいきますが、誰かがより良い方法を持っているならば、私はすべて耳にします。

私は、最初の行に.get()を含めなかった場合、入力されたものにかかわらず、いつでも、テキストは.58366352.58366416に設定されることに気づきました。数字、文字、ミックスなど

私はここで何が欠けているのか誰かが説明できますか?

答えて

2

次ないとき、あなたがやっていることについて考え、entrytkinter.Entryウィジェットのリストであると仮定すると:だからentry[1]はウィジェットです

text = entry[1] 
mod_text = str(text) 

。オブジェクトに対してstr()を呼び出すと、その文字列表現が要求されます。あなたがエントリのの内容をにするという保証はありません。

代わりに、のウィジェットへのパスが返されます。パスは、基本的に、ウィジェットがtkinterフレーム内に存在する記述です。これは、ウィジェットのマスターからのハイデシーのすべての名前の組み合わせで、ドットで区切られています。

だから値.58366352.58366416ウィジェット自体の名前は58366416であり、そしてそれは、その親として(名前がない)ルートを持つ名前58366352と異なるウィジェット内に存在することを意味します。

しかし、エントリウィジェットから実際のテキストを取得するには、Entry.get()に電話する必要があります。

+0

なぜ私は最初にそれを見なかったのかわかりません。エントリ[0]がラベルなので、ウィジェットに含まれるテキストであるエントリー[1]にラップされていました。 –

関連する問題