안녕하세요 ~
이번 포스팅에서는 가상화폐 금액을 표시할 수 있는 GUI 프로그램을 만들어보도록 하겠습니다.
GUI란?
: Graphical User Interface
: 그래픽 사용자 인터페이스
= 사용자가 편리하게 사용할 수 있도록 입출력 등의 기능을 아이콘으로 나타낸 것
= 보통 우리가 컴퓨터로 환경설정을 할 때 뜨는 창, 버튼 등등을 GUI라고 할 수 있다.
우리에게 흔히 시작 버튼을 누르면 보이는 다양한 아이콘들이 바로 GUI의 예시라고 할 수 있겠다.
pip install tkinter
pip install pyupbit
tkinter는 아나콘다 인터프리터를 사용할 시에 자동으로 깔려있다.
하지만, 아나콘다를 설치하지 않았다면 따로 터미널 창에 pip install tkinter로 라이브러리 설치해주기
tkinter라이브러리란
upbit 라이브러리는 업비트에서 가상화폐 데이터를 조회할 수 있는 라이브러리이다.
<tkinter를 사용하여 GUI 코드 만들기>
window 객체 생성하기
window = tinker.Tk()
타이틀 정의하기
window.title("타이틀")
GUI 사이즈 설정하기
window.geometry("가로x세로")
가로, 세로 크기 조절 못하게 설정하기
window.resizable(False, False)
문자열 출력하기
label = tkinter.Label(window 객체, text="출력하길 원하는 text")
label.pack()
window.mainloop()
label은 텍스트를 적은 딱지라고 생각하면 된다.
Tkinter에서 Button, Entry 등 "위젯"을 배치하기 위해서 아래의 3가지 방법을 이용할 수 있습니다.
- Place (절대좌표)
- Pack (상대위치)
- Grid (격자형 배치)
예시 button = tk.label(root, text="left")를 배치하기 위해 다음과 같이 적을 수 있다.
label.pack()안의 파라미터가 없을때는 중간 값이 top으로 설정되어서 위젯이 위로 가는 것을 볼 수 있다.
- Place : button.place(x=1, y=1)
- Pack : button.pack(side="left")
- Grid : button.grid(row=1, column=1)
center side는 없다고 뜨고, window.mainloop()를 활용하면 GUI를 계속 실행할 수 있다.
투박하지만, GUI 창이 아래와 같이 잘 뜨는것을 확인해볼 수 있다.
<1초마다 반복해서 동작하는 GUI 코드 만들기>
import tkinter.font
font = tkinter.font.Font(size = 원하는 폰트 사이즈)
tkinter.font 모듈을 임포트해서 폰트 크기를 바꿀 수 있다.
cnt = 0
def get_coin_1sec(): #1초마다 반복되는 함수 만들기
gloabl cnt #함수 밖에 있는 cnt를 사용하기 위해서 global cnt 전역변수 사용
now_btc_price = str(cnt)
cnt = cnt +1 #cnt는 1씩 늘어남
label.config(text = now_btc_price)
window.after(1000,
라벨을 수정할때는 config 함수를 사용한다. lable.config(text = 변경할 텍스트 입력)
window.after() 함수는 일정한 시간이 지난 후에 특정 함수 또는 메소드를 실행시키는 경우에 사용한다.
사용법은 after( 지연시간, 실행할 함수명, 함수에 넘길 인자1, 인자 2,...)이고, 지연 시간은 ms 단위이다.
after(1000, get_coin_1sec) => 1000ms 즉, 1초 후에 get_coin_1sec가 실행된다.
<1초마다 반복해서 비트코인 시세를 보여주는 GUI 코드 만들기>
thread란?
= 스레드는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다.
처음으로 스레드라는 개념이 나왔는데, 이 부분은 비동기 프로그래밍에 대한 이해가 선행되어야만 이해할 수 있을 것 같다.
비동기 프로그래밍이란?
동기(Synchronous) = 코드가 반드시 작성된 순서 그대로 실행 ex) 주문자가 짜장면을 받고, 배달부가 그릇을 받고, 다음 배달을 한다. |
비동기(Asynchronous) = 코드가 꼭 한줄 한줄 순서대로 실행되는 건 아닌 코드 = 쓰레드나 프로세스가 여럿이 돌고 있다는 말 -> 콜백 함수 ex) 주문자가 짜장면을 받는 시점의 결과를 미리 예약해두고, 배달부는 다음 배달을 한다. 주문자가 짜장면을 먹는 쓰레드나 프로세스 - 배달부가 다음 배달을 하는 쓰레드나 프로세스가 동시에 이뤄진다. |
즉, 위에서는 get_coin_price()에서 비트코인의 시세를 받아오는 논리적 구조와, 이를 1초 마다 받아서 gui 프로그램에 띄워주는 get_coin_1sec()의 논리적 구조가 동시에 이뤄지고 있다.
첫번째 스레드
import pyubit
import threading
import time
coin_price = 0
def get_coin_price():
global coin_price
while True:
coin_price = pyupbit.get_current_price("KRW-BTC")
time.sleep(0.1)
t1 = threading.Tread(target = get_coin_price)
t1.daemon = True
t1.start()
time 라이브러리의 sleep 함수를 사용하면 일정 시간동안 프로세스를 일시정지할 수 있다. sleep(10)이라고 하면, 10초간 프로세스를 중지한다.
get_coin_price 함수를 타겟으로 해서 스레딩한 후(하나의 프로세스로 만든 후) t1 변수에 저장한다. daemon은 스레드를 도와주는 역할을 한다. 이후, t1.start()로 스레드를 시작한다!
두번째 스레드에 관한 설명은 위의 <1초마다 반복되는 GUI 프로그램>의 설명을 참고하길 바란다.
이렇게 비트코인의 떡락한 실시간 가격이 잘 나온다.
올해 초에는 두 배였는데 절반 가까이 떨어진 모습이다.

Thread 쓰레드에 관해서는, #비동기프로그래밍 에 대한 이해가 우선 선행되어야 할것 같다.
공부할게 많네 ... ^^... 오늘 포스팅은 여기서 끝!
'파이썬 python > 파이썬 활용' 카테고리의 다른 글
[python] Playwright로 탐욕-공포 지수 웹 크롤링하기! (0) | 2022.10.30 |
---|---|
[python] 파이썬 텔레그램 봇으로 학교 급식 가져오기 ! (0) | 2022.10.19 |
[python] streamlit 으로 쉬운 웹앱 만들기, 비트코인 시세 출력해주는 웹앱 코드 만드는 법 ! (2) | 2022.10.06 |
[python] 파이썬 영어 문서를 한글로 번역하는 자동화 프로그램 만들기 (1) | 2022.10.02 |
[python] 오토마우스를 활용한 웹페이지 자동화 프로그램 만들기 (1) | 2022.09.30 |