Python の Tkinter ライブラリを使用してシンプルな計算機アプリケーションを作成する方法


こんな感じでtkinterを使ってシンプルな計算機を作ることができます。

モジュールのインポートと関数定義:

import tkinter as tk
from tkinter import font

def handle_button_click(symbol):
    current = entry.get()
    entry.delete(0, tk.END)
    entry.insert(tk.END, current + symbol)

def calculate():
    try:
        expression = entry.get()
        expression = expression.replace("x", "*").replace("÷", "/")
        result = eval(expression)
        output.config(text="結果: " + str(result))
    except:
        output.config(text="できないよ")

この部分では、Tkinter モジュールと Tkinter のfontモジュールをインポートし、計算機アプリケーションで使用する関数を定義しています。

handle_button_click(symbol)関数は、数字ボタンと演算子ボタンがクリックされたときに呼び出され、入力フィールドに対応する数字や演算子を挿入します。

calculate()関数は、「実行」ボタンがクリックされたときに呼び出され、エントリーフィールド内の数式を計算し、結果を表示します。演算子 "x" と "÷" はそれぞれ "*" と "/" に変換してeval()関数を用いて計算されます。エラーが発生した場合は「できないよ」と表示されます。

ウィンドウの設定とウィジェットの構成:

window = tk.Tk()
window.title("計算機")
window.configure(bg="#222222")

ここでは、Tkinter ウィンドウを作成し、タイトルを設定し、背景色を指定しています。

入力フィールドと出力ラベルの構成:

entry = tk.Entry(window, width=30, font=("Arial", 18), bd=0)
entry.grid(row=0, column=0, columnspan=4, padx=10, pady=10, ipady=10)

output = tk.Label(window, text="結果: ", font=("Arial", 14), bg="#222222", fg="#ffffff")
output.grid(row=1, column=0, columnspan=4, padx=10, pady=10)

ここでは、計算機のラベル入力エリアと出力を作成し、ウィンドウ内で適切な位置に配置しています。

数字ボタンの配置:

button_symbols = [
    "7", "8", "9",
    "4", "5", "6",
    "1", "2", "3",
    "0"
]

for i, symbol in enumerate(button_symbols):
    button = tk.Button(window, text=symbol, command=lambda symbol=symbol: handle_button_click(symbol), font=("Arial", 14), padx=20, pady=10, bd=0, bg="#444444", fg="#ffffff")
    button.grid(row=(i // 3) + 2, column=i % 3, padx=5, pady=5)

数字ボタンを作成し構成するループです。ボタンごとに対応する数字が表示され、クリックされると関数が呼び出されますhandle_button_click()

演算子ボタンの構成:

add_button = tk.Button(window, text="+", command=lambda: handle_button_click("+"), font=("Arial", 14), padx=20, pady=10, bd=0, bg="#ff9500", fg="#ffffff")

演算子ボタン (「+」、「-」、「x」、「÷」) も同様に作成され、クリックされると対応する演算子が入力フィールドに入力されます。

実行とクリアボタンの配置:

calculate_button = tk.Button(window, text="実行", command=calculate, font=("Arial", 14), padx=20, pady=10, bd=0, bg="#4cd964", fg="#ffffff")
calculate_button.grid(row=6, column=0, columnspan=4, padx=5, pady=5)

clear_button = tk.Button(window, text="クリア", command=lambda: entry.delete(0, tk.END), font=("Arial", 14), padx=20, pady=10, bd=0, bg="#ff3b30", fg="#ffffff")
clear_button.grid(row=7, column=0, columnspan=4, padx=5, pady=5)

「実行」ボタンは計算を行うためのボタンであり、「クリア」ボタンはエントリーフィールドの内容をクリアするためのボタンです。それぞれクリックされると、対応する関数が呼び出されます。

フォントの設定

font.nametofont("TkDefaultFont").configure(size=14)

アプリケーション内のデフォルトのフォントのサイズを設定しています。

メインループの開始:

window.mainloop()

Tkinter ウィンドウのメインループを開始し、ユーザーのアクションを待ちます。

あんまりすべてのコードを書いてしまうと勉強にならないのですがやってみたいっていう人だけのために一応書いておきます。


import tkinter as tk
from tkinter import font

def handle_button_click(symbol):
    current = entry.get()
    entry.delete(0, tk.END)
    entry.insert(tk.END, current + symbol)

def calculate():
    try:
        expression = entry.get()
        expression = expression.replace("x", "*").replace("÷", "/")
        result = eval(expression)
        output.config(text="結果: " + str(result))
    except:
        output.config(text="できないよ")
window = tk.Tk()
window.title("計算機")
window.configure(bg="#222222")
entry = tk.Entry(window, width=30, font=("Arial", 18), bd=0)
entry.grid(row=0, column=0, columnspan=4, padx=10, pady=10, ipady=10)
output = tk.Label(window, text="結果: ", font=("Arial", 14), bg="#222222", fg="#ffffff")
output.grid(row=1, column=0, columnspan=4, padx=10, pady=10)
button_symbols = [
    "7", "8", "9",
    "4", "5", "6",
    "1", "2", "3",
    "0"
]

for i, symbol in enumerate(button_symbols):
    button = tk.Button(window, text=symbol, command=lambda symbol=symbol: handle_button_click(symbol), font=("Arial", 14), padx=20, pady=10, bd=0, bg="#444444", fg="#ffffff")
    button.grid(row=(i // 3) + 2, column=i % 3, padx=5, pady=5)
add_button = tk.Button(window, text="+", command=lambda: handle_button_click("+"), font=("Arial", 14), padx=20, pady=10, bd=0, bg="#ff9500", fg="#ffffff")
add_button.grid(row=2, column=3, padx=5, pady=5)
subtract_button = tk.Button(window, text="-", command=lambda: handle_button_click("-"), font=("Arial", 14), padx=20, pady=10, bd=0, bg="#ff9500", fg="#ffffff")
subtract_button.grid(row=3, column=3, padx=5, pady=5)
multiply_button = tk.Button(window, text="x", command=lambda: handle_button_click("x"), font=("Arial", 14), padx=20, pady=10, bd=0, bg="#ff9500", fg="#ffffff")
multiply_button.grid(row=4, column=3, padx=5, pady=5)
divide_button = tk.Button(window, text="÷", command=lambda: handle_button_click("÷"), font=("Arial", 14), padx=20, pady=10, bd=0, bg="#ff9500", fg="#ffffff")
divide_button.grid(row=5, column=3, padx=5, pady=5)
calculate_button = tk.Button(window, text="実行", command=calculate, font=("Arial", 14), padx=20, pady=10, bd=0, bg="#4cd964", fg="#ffffff")
calculate_button.grid(row=6, column=0, columnspan=4, padx=5, pady=5)
clear_button = tk.Button(window, text="クリア", command=lambda: entry.delete(0, tk.END), font=("Arial", 14), padx=20, pady=10, bd=0, bg="#ff3b30", fg="#ffffff")
clear_button.grid(row=7, column=0, columnspan=4, padx=5, pady=5)
font.nametofont("TkDefaultFont").configure(size=14)
window.mainloop()


この記事が気に入ったらサポートをしてみませんか?