電卓

from tkinter import *
from tkinter import ttk

LAYOUT = [
['7','8','9','/'],
['4','5','6','*'],
['1','2','3','-'],
['0','C','=','+'],
]

#記号をまとめた定数
CAL = ('+','-','*','/','**','//')

class dentakuApp(ttk.Frame):
"""電卓アプリ(予定)."""

def __init__(self,master = None):
    super().__init__(master)
    self.exp_list = ['0']
    self.create_style()
    self.create_widgets()




 
def create_style(self):
    """ボタン、ラベルのスタイルを変更"""
    style = ttk.Style()

    #ラベルのスタイルを上書き
    style.configure(
        'TLabel', font=('Helvetica',20),
        background = 'black', foreground = 'white',
    )




def create_widgets(self):
     """ウィジェットの作成"""
     self.display_var = StringVar()
     self.display_var.set('0')  #初期値を0にする
     #計算結果の表示ラベル
     display_label = ttk.Label(self, textvariable = self.display_var)

     display_label.grid(column = 0, row = 0, columnspan = 4, sticky = (N,S,E,W))
     
     #レイアウト作成
     for y,row in enumerate(LAYOUT, 1):
         for x, char in enumerate(row):
             button = ttk.Button(self, text = char)
             button.grid(column = x, row = y, sticky = (N,S,E,W))
             button.bind('<Button-1>',self.calc)
     self.grid(column = 0, row = 0, sticky = (N,S,E,W))



     #横の引き伸ばし
     self.columnconfigure(0, weight = 1)
     self.columnconfigure(1, weight = 1)
     self.columnconfigure(2, weight = 1)
     self.columnconfigure(3, weight = 1)

     #縦の引き伸ばし 0番目の結果表示欄だけ元の大きさのまま

     self.rowconfigure(0, weight = 0)
     self.rowconfigure(1, weight = 1)
     self.rowconfigure(2, weight = 1)
     self.rowconfigure(3, weight = 1)
     self.rowconfigure(4, weight = 1)


     #ウインドウ自体の引き伸ばし設定
     self.master.columnconfigure(0, weight = 1)
     self.master.rowconfigure(0, weight = 1)
def calc(self,event):
    char = event.widget['text']    #押されたウィジェットのテキスト部分を取得

    #最後に押したボタンの内容
    last = self.exp_list[-1]
    #ボタンの場合
    if char == '=':
        if last in CAL:
            self.exp_list.pop()

        exp = eval(''.join(self.exp_list))
        self.exp_list = [str(exp)]

    #Cボタンクリア
    elif char == 'C':
        self.exp_list = ['0']

    # 記号を押した場合
    elif  char in CAL:
        if last == char == '/':
            self.exp_list[-1] += '/'
        elif last == char == '*':
            self.exp_list[-1] += '*'
        elif last in CAL:
            self.exp_list[-1] = char
        else:
            self.exp_list.append(char)

    #それ以外、数字を押した場合
    else:
        if last == '0':
            self.exp_list[-1] = char
        elif last in CAL:
            self.exp_list.append(char)
        else:
            self.exp_list[-1] += char

    #リストに格納している式を文字列にして画面に反映
    self.display_var.set(
        ''.join(self.exp_list)
    )

def main():
gamen = Tk()
gamen.title('簡単電卓')
dentakuApp(gamen)
gamen.mainloop()

if name == 'main':
main()

END

Close