안 쓰던 블로그

[파이썬] Tkinter로 gui계산기 만들기(기본 연산, 비트 연산, 진법 변환 포함) 본문

언어/파이썬

[파이썬] Tkinter로 gui계산기 만들기(기본 연산, 비트 연산, 진법 변환 포함)

proqk 2020. 9. 7. 23:14
반응형

Tkinter

Tkinter는 Tcl/Tk에 대한 파이썬 Wreapper로, Tcl/Tk를 파이썬에 사용할 수 있도록 한 GUI모듈이다

(Tcl은 Tool Command Language의 약자로 프로그래밍 언어라고 할 수 있으며, Tk는 크로스 플랫폼에 사용하는 GUI 툴킷이다)

Tkinter는 파이썬 표준 라이브러리라 기본 내장되어 있어서 쉽고 간단한 GUI 프로그램을 만들 때 좋다

 


기본 문장

from tkinter import *
tk = Tk()

label = Label(tk, text="라벨")
label.pack()

txt = Entry(tk)
txt.pack()

btn = Button(tk, text="버튼")
btn.pack()

tk.mainloop()

Tkinter 모듈을 import해서 TK 클래스 객체를 생성하고, 이 객채의 mainloop() 메서드를 호출한다

위에 코드를 실행하면 빈 다이얼로그가 화면에 뜬다

 

mainloop()는 이벤트 메시지 루프로, 키보드나 마우스 등의 이벤트로부터 오는 메시지를 받고 전달하는 역할은 한다

pack()은 위젯들을 부모 위젯에 모두 패킹한다

 

위치를 지정하고 싶다면 place나 grid를 사용한다


계산기 화면 및 기본 연산 구성

from tkinter import *
 
        
 
window = Tk()
window.title("Calculator")
 
display = Entry(window, width=27, bg="yellow")
display.grid(row=0, column=0, columnspan=5)
 
buttonText = [
        '', 'HEX', 'DEC', 'OCT', 'BIN', '',
        '&', '7', '8', '9', '/' ,'C',
        '|', '4', '5', '6', '*', '<<',
        '^', '1', '2', '3', '-', '>>',
        '~', '0', '.', '=', '+', '종료' ]
 
 
def click(key) :        
        if key == '=' :
                result = eval(display.get())
                display.delete(0, END)
                display.insert(END, result)
        elif key=='HEX':
            result=format(eval(display.get()), 'x')
            display.delete(0,END)
            display.insert(END,str(result))
        elif key=='DEC':
            result=format(eval(display.get()), 'd')
            display.delete(0,END)
            display.insert(END,str(result))
        elif key=='OCT':
            result=format(eval(display.get()), 'o')
            display.delete(0,END)
            display.insert(END,str(result))
        elif key=='BIN':
            result=format(eval(display.get()), 'b')
            display.delete(0,END)
            display.insert(END,str(result))
        elif key=='C':
            display.delete(0,END)
        elif key == '종료' :
                window.destroy()
        else :
                display.insert(END, key)
 
rowIndex = 1
colIndex = 0
 
for button_Text in buttonText :
        def process(t=button_Text) :
                click(t)
        Button(window, text=button_Text, width=5, command=process).grid(row=rowIndex, column=colIndex)
        colIndex += 1
        if colIndex>5 :
                rowIndex += 1
                colIndex = 0
       
window.mainloop()

진법 변환, 비트 계산까지 고려해서 디자인해 주었다

 

=이나 종료 버튼이 아닌 숫자 버튼을 누르면 입력 칸에 문자를 입력한다

=버튼을 누르면 해당 문자열을 eval하고 결과값을 출력한다. 원래 있던 수식은 delete한다

C버튼을 누르면 초기화 하고, 종료 버튼을 누르면 종료된다

 

        if key == '=' :
                result = eval(display.get())
                display.delete(0, END)
                display.insert(END, result)

이 부분에서 기본 연산 및 진법 변환까지 처리해 준다

 

 

진법 연산 부분

def click(key) :        
        if key == '=' :
                result = eval(display.get())
                display.delete(0, END)
                display.insert(END, result)
        elif key=='HEX':
            result=format(eval(display.get()), 'x')
            display.delete(0,END)
            display.insert(END,str(result))
        elif key=='DEC':
            result=format(eval(display.get()), 'd')
            display.delete(0,END)
            display.insert(END,str(result))
        elif key=='OCT':
            result=format(eval(display.get()), 'o')
            display.delete(0,END)
            display.insert(END,str(result))
        elif key=='BIN':
            result=format(eval(display.get()), 'b')
            display.delete(0,END)
            display.insert(END,str(result))
        elif key == '종료' :
                window.destroy()
        else :
                display.insert(END, key)

진변 변환은 문자열을 가져와서 format을 변경해서 출력하는 식으로 구현했다

반응형
Comments