PythonでGUIを使った関数電卓の作成

PythonでGUIを使用した関数電卓を作成するには、一般的にtkinterライブラリを使用します。tkinterはPython標準ライブラリに含まれており、シンプルなGUIアプリケーションの開発に最適です。以下に、関数電卓を作成する過程を順序立てて説明します。

ステップ1: 必要なライブラリのインストール

まず、必要なライブラリをインポートします。tkinterはGUI作成のため、mathは数学関数の計算のために使用します。

tkinterのインストール

pip install tkinter

tkinterのインポート

import tkinter as tk
from tkinter import messagebox
import math

ステップ2: メインウィンドウの設定

次に、メインウィンドウを設定します。ウィンドウのタイトルやサイズを指定します。

# メインウィンドウの作成
root = tk.Tk()
root.title("関数電卓")
root.geometry("400x600")

ステップ3: エントリウィジェットの作成

計算式の入力と結果の表示のためにエントリウィジェットを作成します。

# エントリウィジェットの作成
entry = tk.Entry(root, width=28, font=('Arial', 24), bd=10, insertwidth=2, borderwidth=4)
entry.grid(row=0, column=0, columnspan=4)

ステップ4: ボタンの作成

電卓の各ボタンを作成します。数字、演算子、特殊関数(sin, cos, logなど)のボタンを作成します。

# ボタンのラベルと位置を定義
buttons = [
    '7', '8', '9', '/',
    '4', '5', '6', '*',
    '1', '2', '3', '-',
    '0', '.', '=', '+',
    'sin', 'cos', 'tan', 'log',
    '(', ')', 'C', 'sqrt'
]

# ボタンの作成と配置
row = 1
col = 0
for button in buttons:
    def command(x=button):
        on_button_click(x)
    tk.Button(root, text=button, padx=20, pady=20, font=('Arial', 18), command=command).grid(row=row, column=col)
    col += 1
    if col > 3:
        col = 0
        row += 1

ステップ5: ボタンクリック時の処理関数

各ボタンがクリックされたときに呼び出される関数を定義します。数字や演算子をエントリに追加したり、計算を実行したりします。

def on_button_click(button):
    current_text = entry.get()
    
    if button == '=':
        try:
            result = eval(current_text)
            entry.delete(0, tk.END)
            entry.insert(tk.END, str(result))
        except Exception as e:
            messagebox.showerror("Error", "無効な入力です")
    elif button == 'C':
        entry.delete(0, tk.END)
    elif button in ['sin', 'cos', 'tan', 'log', 'sqrt']:
        try:
            if button == 'sqrt':
                result = math.sqrt(float(current_text))
            elif button == 'log':
                result = math.log10(float(current_text))
            else:
                func = getattr(math, button)
                result = func(math.radians(float(current_text)))
            entry.delete(0, tk.END)
            entry.insert(tk.END, str(result))
        except Exception as e:
            messagebox.showerror("Error", "無効な入力です")
    else:
        entry.insert(tk.END, button)

ステップ6: メインループの実行

最後に、メインループを実行してアプリケーションを開始します。

# メインループの開始
root.mainloop()

全体のコード

全体のコードをまとめると以下のようになります。

import tkinter as tk
from tkinter import messagebox
import math

# メインウィンドウの作成
root = tk.Tk()
root.title("関数電卓")
root.geometry("400x600")

# エントリウィジェットの作成
entry = tk.Entry(root, width=28, font=('Arial', 24), bd=10, insertwidth=2, borderwidth=4)
entry.grid(row=0, column=0, columnspan=4)

# ボタンのクリック時の処理関数
def on_button_click(button):
    current_text = entry.get()
    
    if button == '=':
        try:
            result = eval(current_text)
            entry.delete(0, tk.END)
            entry.insert(tk.END, str(result))
        except Exception as e:
            messagebox.showerror("Error", "無効な入力です")
    elif button == 'C':
        entry.delete(0, tk.END)
    elif button in ['sin', 'cos', 'tan', 'log', 'sqrt']:
        try:
            if button == 'sqrt':
                result = math.sqrt(float(current_text))
            elif button == 'log':
                result = math.log10(float(current_text))
            else:
                func = getattr(math, button)
                result = func(math.radians(float(current_text)))
            entry.delete(0, tk.END)
            entry.insert(tk.END, str(result))
        except Exception as e:
            messagebox.showerror("Error", "無効な入力です")
    else:
        entry.insert(tk.END, button)

# ボタンのラベルと位置を定義
buttons = [
    '7', '8', '9', '/',
    '4', '5', '6', '*',
    '1', '2', '3', '-',
    '0', '.', '=', '+',
    'sin', 'cos', 'tan', 'log',
    '(', ')', 'C', 'sqrt'
]

# ボタンの作成と配置
row = 1
col = 0
for button in buttons:
    def command(x=button):
        on_button_click(x)
    tk.Button(root, text=button, padx=20, pady=20, font=('Arial', 18), command=command).grid(row=row, column=col)
    col += 1
    if col > 3:
        col = 0
        row += 1

# メインループの開始
root.mainloop()

このコードを実行すると、Pythonとtkinterを使用したシンプルな関数電卓が表示され、基本的な計算といくつかの関数(sin, cos, tan, log, sqrt)が使用できます。

タイトルとURLをコピーしました