일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- shadow
- 포렌식
- Mobile
- SW에듀서포터즈
- 안티디버깅
- upx
- 모바일프로그래밍
- 침해사고대응
- Reversing
- K-sheild Jr
- ctf-d
- 파일해시생성
- crack
- 케쉴주
- Interceptor
- John the ripper
- tar
- Multimedia
- 디스크
- 리버싱핵심원리
- Autoware
- K-shield Jr 10기
- Frida
- disk
- swing
- ZIP
- Android
- 써니나타스
- CodeEngn
- Today
- Total
물먹는산세베리아
파이썬 tkinter를 이용해 gui 계산기 만들기(비트연산, 진법 변환) 본문
1. tkinter
가장 많이 사용되는 GUI 모듈 중 하나인 tkinter을 사용하였다. 먼저, tkinter 모듈을 포함시켰고, 그 안에 있는 Tk 클래스의 객체를 생성하여 하나의 윈도우가 생성되도록 하였다. 윈도우의 이름은 '계산기'라고 정했다.
2. click 함수 (버튼을 눌렀을 때 결과 나타내기)
가장 중심이 되는 건 eval(entr.get())이다. entry에서 가져온 문자열 내용대로 계산되는 부분이다. 따라서 사칙연산은 이 식만 있어도 쉽게 결과값이 나온다. key 값으로 '='을 입력 받으면 이때까지 받은 숫자와 연산자들도 계산하여 result에 넣어준다. 그리고 기존에 출력된 값을들 지운뒤 그 위에 result 값을 문자열로 바꾸어 새로 출력시킨다.
=를 누르기 전 숫자와 연산자들은 else: entry.insert(END,key)에서 윈도우에 출력된다. 숫자, 연산자 뿐만 아니라 알바벳 버튼을 누르면 알파벳이 그대로 출력된다. (A,B,C,D,E,F 버튼이 있었으나 원하는 대로 코드를 수정하지 못해 지움)
진법 변환을 위한 경우의 수들을 하나씩 if문으로 작성해 주었다. eval(entry.get())으로 도출해낸 값을 원하는 진법으로 변환하여 result에 넣어준다.
예를 들어 hex()을 활용하여 변환시켜주어도 되지만 이럴 경우 앞에 0x가 붙는다. 그래서 format( , 'h') 형식을 썼다.
[c]는 위 코드대로 지금까지 작성한 것들을 지워주는 역할을 한다.
3. 버튼 생성
이 코드에서는 버튼을 생성할 때 하나씩 만들어 주지 않고 배열에 작성한 뒤 반복문을 활용하였다. 버튼은 위와 같이 구성되어 있고, hex, dec, oct, bin을 누르면 해당하는 진수로 바뀌고, 비트 연산자 또한 누르면 계산이 된다.
먼저 lambda를 활용하였다. b를 x에 받아 click 함수에 넣어준 return 값을 cmd에 또 넣어준다. command로 cmd를 호출하고 ridge(버튼효과)를 준 버튼이 생성된다. 버튼에는 반복문 안에서 b에 해당하는 문자가 들어간다. (A를 10으로 수정하는 게 의미 없었던 이유) grid 메소드를 사용하여 테이블 형태로 배치하였고, 입력값과 결과값이 출력될 빈칸도 만들었다.
# 보완할 부분
1) 한번 진법을 바꾸면 다음에 인식할 때는 무조건 10진수로 인식한다. insert할 때 str로 변형하여 입력해서 문제가 되는 부분이다. 그래서 str을 벗기고 계산했는데 entry.insert()는 문자를 받기로 정해져 있기 때문에 원하는 결과가 나오지 않았다. 이전에 몇진법으로 변환하였는지에 따라 다음 계산고 거기에 맞춰 계산을 해야하는데 이를 좀 더 보완해야 할 것 같다.
2) 16진법의 경우 E까지도 15로 계산되는데 여기서 쓴 코드는 문자를 받고 =을 입력하면 오류가 출력된다. 알파벳을 숫자로 인식하지 않기 때문에 예외 처리가 되는 것이다. 여러가지 시도를 해 보았는데 A를 입력하더라도 출력될 때는 10이라도 출력되는 경우는 있었지만 근본적으로 check 함수는 10진수 중심이고 문자를 숫자로 인식하지 않았기 때문에 16진수로 계산할 때 쓸 함수를 따로 적는 식으로 보완해야 할 것 같다.
'Language > Python' 카테고리의 다른 글
pwntools 정리 (0) | 2021.04.28 |
---|---|
pwntools(1)_계산문제 (0) | 2020.09.15 |
파이썬 bs4, requests 모듈 이용하여 네이버 실시간 검색어 크롤러 만들기 (0) | 2020.09.08 |
파이썬 소캣 프로그래밍 이용해 파일 보내기 (0) | 2020.09.08 |
python 소켓프로그래밍으로 1:1 채팅 구현 (0) | 2020.09.07 |