ボタン付きのGUI電卓を作成するコードを作成しようとして、Tkinterヘルプを検索しようとしましたが、ヘルプを取得できませんでした。表示されている数値の値を表示するために、下部のコメントアウトされたセクションを組み込むにはどうすればよいですか?私のコードに提案を自由に追加してください。
編集:@abarnertが提案したようにコードを修正しましたが、コードを実行すると、常に無効な操作が書き込まれます。これを修正する方法がわかりません。誰かが私のコードを修正するためのより良いアイデアを持っていますか?操作を機能させる必要があります。私が編集したコードは以下のとおりです。
from math import sqrt
from tkinter import *
window = Tk()
window.title("Welcome to Calculator ")
window.configure(background = "white")
Label (window, text = "Calculator", bg = "white") .grid(row = 0, column =
0, sticky = N)
#click function
def click():
n = n_textentry.get()
m = m_textentry.get()
operation = operation_textentry.get()
if operation == 1:
print(n + m)
elif operation == 2:
print(n - m)
elif operation == 3:
print(n * m)
elif operation == 4:
print(n / m)
elif operation == 5:
print(n ** m)
elif operation == 6:
print(sqrt(n))
else:
print("Invalid Operation ")
#to create the box for the first number and store it
Label (window, text = "Enter the first number", bg = "white") .grid(row =
1, column = 0, sticky = N)
n_textentry = Entry(window, width = 10, bg = "white")
n_textentry.grid(row = 2, column = 0, sticky = N)
Button(window, text = "Submit", width = 6, command=click) .grid(row = 3,
column = 0, sticky = N)
#to create the box for the second number
Label (window, text = "Enter the second number", bg = "white") .grid(row =
5, column = 0, sticky = N)
m_textentry = Entry(window, width = 10, bg = "white")
m_textentry.grid(row = 6, column = 0, sticky = N)
Button(window, text = "Submit", width = 6, command=click) .grid(row = 7,
column = 0, sticky = N)
#to show list of options
Label (window, text = ''' Enter 1 for addition
Enter 2 for subtraction
Enter 3 for multiplication
Enter 4 for division
Enter 5 for exponentiation
Enter 6 for square root *This will only work for 1st choice*''', bg =
"white") .grid(row = 9, column = 0, sticky = W)
operation_textentry = Entry(window, width = 10, bg = "white")
operation_textentry.grid(row = 10, column = 0, sticky = N)
Button(window, text = "Submit", width = 6, command=click) .grid(row = 11,
column = 0, sticky = N)
GUIプログラムでは、GUIが起動して実行されると、イベントハンドラーへのコールバックでのみコードを実行できます。これはイベントドリブンプログラミングと呼ばれ、最初は慣れるまでに時間がかかることがあります。
たとえば、ユーザーが最初のSubmit
ボタンをクリックすると、関数が呼び出されますclick
。その関数の中で、あなたはそこで適切なことを何でもすることができます。
3つのボタンすべてに同じclick
関数を呼び出させました。ここではあまり意味がありません。
実際、なぜ3つの別々のボタンが必要なのですか?典型的なGUIの典型的なフォームを考えてみてください。たくさんの入力フィールドがあり、ユーザーがすべてのフィールドに入力した後にクリックする単一の「送信」ボタンがあります。それでは、最初の2つのボタンを廃棄して、最後に1つだけ持ってみましょう。
これで、そのclick
関数内で、「適切なことを何でも行う」ことができます。しかし、ここで何が適切ですか?
最初に行う必要があるのは、3つのEntry
ボックスから値を取得することです。しかし、3つすべてを同じ変数に格納しようとしたため、3つすべてにアクセスすることはできず、最後の1つだけにアクセスできます。したがって、これを3回行う代わりに、次のようにします。
textentry = Entry(window, width = 10, bg = "white")
…それらすべてに異なる名前を付けます。
n_entry = Entry(window, width = 10, bg = "white")
# ...
m_entry = Entry(window, width = 10, bg = "white")
# ...
operation_entry = Entry(window, width = 10, bg = "white")
そして今、あなたのclick
関数は3つの値すべてを得ることができます:
def click():
n = n_entry.get()
m = m_entry.get()
operation = operation_entry.get()
もちろん、これらは文字列になりますinput()
。コマンドラインアプリで呼び出したときに返されるものとまったく同じです。したがって、ここでも同じことを行う必要があります。つまり、電話int
または電話をかけたりfloat
、エラーを処理したりする必要があります。
ただし、それを実行すると、残りはclick
既存のコメントアウトされたコードにすることができます。(これらのbreak
ステートメントを削除する必要があることを除いて、ここから抜け出すためのループはありません。)
if operation == 1:
print(n + m)
elif operation == 2:
print(n - m)
# etc.
ただし、これらのprint
呼び出しを変更して、代わりに結果をGUIに表示することもできます。たとえば、Label
という名前の空があり、results_label
そのテキストをなどに設定する場合がstr(n+m)
あります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加