2016-05-03 12 views
0

Tkinterの仕組みをちょっと調べてみました。 私は小さなプログラムを作った。例えば、あなたは2辺の長さをタイプすることができる。これは私のコードです:Tkinter入力を数学的な和としてどのように使うことができますか?

from tkinter import * 
from math import * 

def show_entry_fields(): 
    print("Lengte: %s\nBreedte: %s" % (e1.get(), e2.get())) 

master = Tk() 
Label(master, text="Lengte").grid(row=0) 
Label(master, text="Breedte").grid(row=1) 

Label(master, text="Oppervlakte").grid(row=2) 

e1 = Entry(master) 
e2 = Entry(master) 

e1.grid(row=0, column=1) 
e2.grid(row=1, column=1) 

Button(master, text='Quit', command=master.quit).grid(row=3, column=0, sticky=W, pady=4) 
Button(master, text='Show', command=show_entry_fields).grid(row=3, column=1, sticky=W, pady=4) 

mainloop() 

私はTkinterでの動作を理解していないため、数学はまだ使用していません。

私が欲しいのは、ユーザーが正方形の2辺(長さ&の幅、私はその部分をよくしました)を入力させ、プログラムが正方形の面積を計算することです。

お願いします!

EDIT:

from tkinter import * 

def show_entry_fields(): 
    print("Lengte: %s\nBreedte: %s" % (e1.get(), e2.get())) 

master = Tk() 
Label(master, text="Lengte").grid(row=0) 
Label(master, text="Breedte").grid(row=1) 
Label(master, text="Oppervlakte").grid(row=2) 

def show_entry_fields(): 
    area_label['Oppervlakte'] = str(Oppervlakte) 

e1 = Entry(master) 
e2 = Entry(master) 

e1.grid(row=0, column=1) 
e2.grid(row=1, column=1) 

Button(master, text='Quit', command=master.quit).grid(row=3, column=0, sticky=W, pady=4) 
Button(master, text='Show', command=show_entry_fields).grid(row=3, column=1, sticky=W, pady=4) 

mainloop() 
+1

数学のTkinterの外に数学のように動作します。あなたは、数字と文字列の違いを理解していることを確認しなければなりません。これは初心者のための主な固執ポイントです。 –

+1

ちょっとした注意:eval( "3 * 5")のようなことをするためにevalを使うのが魅力的かもしれませんが、これは不適切で時には危険なevalの使用です。 –

答えて

1

あなたはそれの内側にあるものは何でも得るために持っているようにあなたは、エントリウィジェットの.get()メソッドを使用することができます。

これは文字列です。したがって、これらの入力で数学演算を実行できるようにするには、まずそれらをints/floatに変換する必要があります。

isdigit()を使用して入力が整数かどうかを確認できます。これは、文字列が整数かどうかをテストします。これは、例外を避けるために文字列をintにキャストする前にこれをチェックできるようにします。

単純に浮動小数点のtry/exceptを使用できます。

mathモジュールはここでは不要なインポートと思われます。基本的な操作を使って、これをPythonに組み込むことができます。

例:(Iは入力が実際にここに整数であると仮定しました)

バック isdigitに行く
def show_entry_fields(): 

    length, width = int(e1.get()), int(e2.get()) 
    area = length * width 
    print("The area is", area) 

...あなたは以前に述べたように、彼らは実際に整数であることを確認できました。

ValueError: invalid literal for int() with base 10: 'some_string' 

次のことができます(空白文字列として返します)何もまたは他のいくつかの文字列がエントリに入力しないと、たとえば、あなたは、次のエラーメッセージが出ます(intに)変換してみました

entry_one_value = e1.get() 
if entry_one_value.isdigit(): 
    some_var = int(entry_one_value) 

浮動小数点数に変換する場合はどうなりますか?あなたは直前に言及している場合を除きてみてください/使用することができます。

entry_one_value = e1.get() 
try: 
    some_var = float(entry_one_value) 
except ValueError: 
    print("Error. Not a floating point number!") 

編集:面積を計算した後、あなたはおそらくGUIでこれを表示することができるようになるでしょう。

ラベルウィジェットを変数として保存して、テキストを設定できるようにしましょう。 .grid()ウィジェットがNoneを返すと、ウィジェットへの参照を実際に使用することができなくなるため、これを2行に分割します。

area_label = Label(master, text="N/A") 
area_label.grid(row=some_row) 

次に、前の機能では、ラベルテキストを設定することができます。

def show_entry_fields(): 

    .... 
    area_label['text'] = str(area) 

編集私の以前に編集した編集からあなたの編集を編集する:Tkinterでは

from tkinter import * 

def show_entry_fields(): 
    length, width = int(e1.get()), int(e2.get()) 
    area = length * width 
    area_label['text'] = str(area) 

master = Tk() 
Label(master, text="Lengte").grid(row=0) 
e1 = Entry(master) 
e1.grid(row=0, column=1) 

Label(master, text="Breedte").grid(row=1) 
e2 = Entry(master) 
e2.grid(row=1, column=1) 

area_label = Label(master, text="Oppervlakte") 
area_label.grid(row=2) 

Button(master, text='Quit', command=master.quit).grid(row=3, column=0, sticky=W, pady=4) 
Button(master, text='Show', command=show_entry_fields).grid(row=3, column=1, sticky=W, pady=4) 

mainloop() 
+0

コメントありがとうございました!しかし、私が望むのは、長さと幅のように、白い欄に領域が印刷されているということです。 GUIを必要とするだけで、両方はありません –

+0

編集を参照してください。コメントしたとおりに編集していました:) – Pythonista

+0

何を待っていますか?私は最後の部分を取得しない、私はエラーが発生します。 –

関連する問題