Easy GUI on Python'
파이썬은 아주 다양한 모듈들이 많은 프로그램이라는 점은 모두 알고 계실 거라 생각합니다. 그중에서 간편하면서도, 쉽게 구현할 수 있는 그래픽 유저 인터페이스 모듈인 tkinter에 대해서 알아보도록 하겠습니다!!
tkinter모듈은 그래픽 유저 인터페이스툴킷에 대한 표준 파이썬 인터페이스입니다. 대부분 유닉스 플랫폼, 윈도, 맥, 리눅스 등 대부분의 시스템은 지원하기 때문에 거의 다 사용할 수 있다고 보아도 무방합니다. 우선 tkinter가 잘 있는지 확인해보도록 하겠습니다.
#윈도우 시스템
#커맨드 쉘창 연 후 아래 명령줄 입력 후 확인
#맥-리눅스
#터미널 실행 후 아래 명령줄 입력 후 확인
$ python -m tkinter
자 설치가 되어 있는 것을 확인하셨을 겁니다. tk안에도 무수히 많은 서브 클래스와 함수들이 존재합니다. 솔직히 처음 공부하면서 모듈 내부에 선언된 인터페이스를 모두 알 필요는 없습니다. 필요할 때마다 찾아서 프로그래밍하면 되니까요! 아래 링크 첨부해드릴 테니, 천천히 읽어보시기 바랍니다!!
TkDocs Home
Tk is the only cross-platform (Windows, Mac, Unix) graphical user interface toolkit designed exclusively for high-level dynamic languages, like Python, Tcl, Ruby, Perl, and many others. Whatever language you use, this site brings you the current, high-qual
tkdocs.com
저희는 빠르게 계산기 프로그램을 만들 생각입니다. 대부분 그래픽 모듈 입문 때 학습할 수 있는 수준이기 때문에 어렵지 않습니다. 파이썬의 클래스를 활용해서 만들었습니다. 코드를 보고 쭉 따라하시면 됩니다. 설명을 주석으로 대체할 예정이기 때문에 한 줄 한 줄 입력하면서 코드를 작성하면 되겠습니다!!
from tkinter import *
import tkinter.font as font
import tkinter as tk
class App: #전체적인 윈도우를 관리하는 클래스
def __init__(self):
self.root = Tk() #tkinter 내부의 Tk를 끌고와서 윈도우 속성값 설정
self.root.geometry("380x400") #사이즈는 원하시는 만큼..
self.root.title("Example Calculator") #생성될 프로그램의 제목
self.root.resizable(0,0) #리사이즈를 막습니다.
self.result = StringVar() #문자열 형태의 섹션으로 결괏값 및 입력값 출력에 사용
self.font = font.Font(size = 15)
self.screen = Entry(self.root, text = self.result, width = 30,
justify = 'right', font=(10), bd = 4) #전체적인 화면을 초기화
self.setScreen() #클래스 내부 멤버함수를 사용해서 self.screen 초기화
self.keyPad = [['Cal', u"\u221A", "/", "<-"],
["7", "8", "9", "*"],
["4", "5", "6", "-"],
["1", "2", "3", "+"],
["!", 0, ".", "="]] #버튼에 들어갈 문자열 값
self.button = {} #button을 담을 딕셔너리 변수
self.resultValue = 0 #사용자에게 반환될 결괏값
self.setGraphic() #멤버함수
def show(self):
self.root.mainloop() #Tk를 실행하는 멤버함수
def setScreen(self):
self.screen.grid(row = 0, columnspan = 4, padx = 15,
pady = 15, ipady= 15)
def cal(self, event):
btn = event.widget.cget("text")
try: #아래 제어문들은 버튼에 해당하는 값들에 상응하는 연산 수행을 진행할 영역
if btn == u"\u221A":
ret = float(int.get()) ** (0.5)
self.resultValue = str(ans)
self.result.set(str(ans))
elif btn == "c":
self.result.set("")
elif btn == "!":
def fact(n): return n if n < 2 else n * fact(n-1)
self.result.set(str(fact(int(self.result.get()))))
elif btn == "<-":
self.result.set(self.result.get()[:len(self.result.get()) - 1])
elif btn == "=":
self.resultValue = str(eval(self.result.get()))
self.result.set(self.resultValue)
else:
self.result.set(self.result.get() + str(btn))
except:
self.result.set("계산할 수 없는 형식입니다")
def setGraphic(self): #버튼 생성 코드 영역
for _ in range(len(self.keyPad)):
for _2 in range(len(self.keyPad[_])):
#2차원 배열로 선언되었기 때문에 각 행열값에 해당하는 버튼 생성
self.button["btn_"+str(self.keyPad[_][_2])] = Button(self.root, bd = 1, text = str(self.keyPad[_][_2]), font = self.font)
self.button["btn_" + str(self.keyPad[_][_2])].grid(
row=_+1, column=_2, padx =5, pady=5, ipadx=5, ipady=5
)
self.button["btn_" + str(self.keyPad[_][_2])].bind("<Button-1>", self.cal)
if __name__== "__main__":
app = App()
app.show()
이 정도로 짧게만 작성해보았습니다. 대부분의 입문 프로그램은 위와 같이 작성되며, 이항연산이라는 간단한 계산만 수행하기 때문에 코드의 양이 크진 않습니다.
이해가 잘 안가는 부분이 있다면, 댓글 남겨주시면 친절하게 설명드리도록 하겠습니다!!
감사합니다!!
'Python' 카테고리의 다른 글
[Python] pickle 라이브러리는 왜 써야 될까? (0) | 2023.04.05 |
---|---|
[Python 자료구조] list_map, filter 등 리스트 응용! (0) | 2021.01.28 |
[Python 자료구조] 연결리스트_implemented Linked List@_탐색, 순회, 추가 및 삭제 (0) | 2021.01.06 |
[Python 자료구조] 트리자료구조 구현_implemented Tree Structure@_탐색, 순회, 추가 및 삭제 (0) | 2021.01.04 |
[Python활용]파이썬 제너레이터를 이용한 파일 읽기 및 쓰기!! (1) | 2020.12.14 |
댓글