GUI計算機の難題






pythonを使用してGUI計算機を作成しました.( 2 + 2 = 4 )

Tkinter


  • Tcl/TkをPythonのPython Wrapperとして使用する軽量級GUIモジュール.
    - Tcl : Tool Command Language
    -Tk:プラットフォームにまたがるGUIツールキット

  • Tkinterのメインサイクル()
    -複数のモジュールでコンポーネントを作成し、トリガを設定し、実行フローの最後にユーザー入力を待つ
    (待ち続けない場合は1回のみ実行して閉じます)
    (UIの継続的なメンテナンスが必要)
    (コードの最後のセグメントではなく、プログラムフローの最後のセグメントにある必要があります)
  • 計算機作成コード

    import tkinter as tk            # python 표준인터페이스 tkinter
    
    disValue = 0
    operator = {'+':1, '-':2, '/':3, '*':4, 'C':5, '=':6}
    stoValue = 0
    opPre = 0                       # 현재값, 연산자, 저장된 값, 이전 연산자
    
    def number_click(value):
        # print('숫자',value)
        global disValue
        disValue = (disValue*10) + value
        str_value.set(disValue)     # 화면에 숫자 나타냄
    
    def clear():
        global disValue, stoValue, opPre
        disValue = 0                # 주요 변수 초기화
        stoValue = 0    
        opPre = 0
        str_value.set(str(disValue))  # 화면 지움.
    
    
    def operator_click(value):
        # print('명령', value)
        global disValue, operator, stoValue, opPre
        op = operator[value]      # value의 값에 따라 연산자를 숫자로 변경(+ -> 1)
        if op == 5:  # C
            clear()
        elif disValue == 0:
            opPre  = 0
        elif opPre == 0:             # 연산자가 한번도 클릭되지 않았을 때
            opPre = op			     # 현재 눌린 연산자가 있으면 저장
            stoValue = disValue	     # 현재까지의 숫자 저장
            disValue = 0		     # 연산자 이후 숫자를 받기위해 초기화
            str_value.set(disValue)  # 0으로 다음 숫자 받을 준비
        elif op == 6:
            if opPre == 1:
                disValue = stoValue + disValue
            if opPre == 2:
                disValue = stoValue - disValue
            if opPre == 3:
                disValue = stoValue / disValue
            if opPre == 4:
                disValue = stoValue * disValue
            
            str_value.set(str(disValue))   # 최종 결과값 출력
            disValue = 0
            stoValue = 0
            opPre = 0
        else:
            clear()
    
    
    
    
    def button_click(value):
        # print(value)
        try:
            value = int(value)      # 정수로 변환 
            number_click(value)		# 정수인 경우 number_click( )를 호출
        except:
            operator_click(value)	# 정수가 아닌 경우 operator_click() 호출
           
    
    
    
    win = tk.Tk()
    win.title('계산기')
    
    str_value = tk.StringVar()
    str_value.set(str(disValue))
    dis = tk.Entry(win, textvariable=str_value, justify = 'right', bg = 'pink', fg = 'red')
    dis.grid(column = 0, row = 0, columnspan = 4, ipadx = 140, ipady = 30)
    
    callItem = [['1','2','3','4'],
                ['5','6','7','8'],
                ['9', '0', '+', '-'],
                ['/', '*', 'C', '=']]
    
    for i, items in enumerate(callItem):
        for k, item in enumerate(items):
    
            try:
                color = int(item)
                color = 'black'
            except:
                color = 'green'
    
            bt = tk.Button(win, 
                 text=item, 
                 width = 10, 
                 height = 5,
                 bg = 'black',
                 fg=color,
                 command = lambda cmd=item: button_click(cmd)
                 )
            bt.grid(column=k, row = i + 1)
    
    
    
    # btn = tk.Button(win, text='1', width = 10, height = 5)
    # btn.grid(column = 0, row = 1)
    # 하나씩 표현하는 방뻡
    
    
    
    
    win.mainloop()
    
    ソース:https://www.codingnow.co.kr/python/