firstlabel_label3 = ttk.Label(firstlabel, text ="콤보1: ") # 콤보박스 추가
firstlabel_label3.grid(column=0, row=2)

label2_combo = tk.StringVar() #레이블1의 텍스트 입력 박스2
label2_combo = ttk.Combobox(firstlabel, width=30, textvariable=label2_combo)
label2_combo['values'] = ('option1','option2', 'option3','option4')
label2_combo.current(0)
label2_combo.grid(column=1, row=2)
label2_combo.configure(state='readonly')  #콤보박스의 텍스트를 편집 불가능하게 읽기 전용으로 하는 것이다

 

def Excute:

print ( label2_combo.get())  # def 콜백함수와 쓰는경우, 콤보박스의 데이터 출력이 가능

해당 py파일이 있는 폴더에서,

아래 명령 실행

 

1) 콘솔창없이 exe 한개로 묶지 않고 패키지로 폴더의 GUI exe파일로 만드는 것

pyinstaller --windowed --noconsole {파일명}.py

 

2)콘솔창 없이 exe 한개로 GUI exe파일로 만드는 것

pyinstaller --onefile --noconsole {파일명}.py

 

'취미로 하는 프로그래밍 > 짭짤한 파이썬' 카테고리의 다른 글

[pandas] DB 특정 열 중복 제거  (0) 2019.07.14
[pandas] 엑셀 시트명으로 DB 불러오기  (0) 2019.07.14
re-컴파일  (0) 2018.07.28
flask 서버 구동  (0) 2018.06.16
파이썬 api json 파싱  (0) 2018.06.16

굉장히 간단한
업비트 코인 시세 조회용 GUI
이미 만들어둔 upbeatref.py를 import 해야함

 

===================

import tkinter as tk
from tkinter import ttk
from tkinter import scrolledtext
import upbeatref

win = tk.Tk()
win.title("API test")

tabcontrol = ttk.Notebook(win)

tab1 = ttk.Frame(tabcontrol) #2개의 탭을 나누는 것
tabcontrol.add(tab1, text="업비트")
tab2 = ttk.Frame(tabcontrol)
tabcontrol.add(tab2, text="빗썸")
tabcontrol.pack(expand=1, fill="both")

#==========================================================================

firstlabel = ttk.LabelFrame(tab1, text="조회 조건") # 첫번째 테이블에서 레이블 프레임을 만듬
firstlabel.grid (column=0, row=0, padx=8, pady=4)

firstlabel_label1 = ttk.Label(firstlabel, text ="코인 이름: ") # 레이블프레임에 소속된 제목(레이블1)
firstlabel_label1.grid(column=0, row=0)

label1_textbox = tk.StringVar() #레이블1의 텍스트 입력 박스1
label1_textbox = ttk.Entry(firstlabel, width=30, textvariable=label1_textbox )
label1_textbox.grid(column=1, row=0)

#==========================================================================

#액션 클릭버튼 추가

def Execute():

 try:
ResultViewlabel_ScrollBox.delete(1.0, tk.END) # 콘솔창 다 지우기 (초기화)
action.configure(text="실행중") # 버튼의 실행 중 상태변경
action.configure(state="disabled")
print (label1_textbox.get()) #텍스트 박스 입력한 내용을 get
ResultViewlabel_ScrollBox.insert(tk.INSERT, "현재 " + label1_textbox.get() + "의 가격은 " + str ( upbeatref.CoinAPI(label1_textbox.get())) + "원입니다" + "\n")
ResultViewlabel_ScrollBox.see(tk.END) #중요한 거다. 스크롤이 길어지면 최하단을 보게 한다

action.configure(text="시세 조회") # 버튼의 실행완료 상태 변경
action.configure(state="abled")

except:
ResultViewlabel_ScrollBox.insert(tk.INSERT, "ERROR : 코인 이름을 다시 확인해 주세요" + "\n")
ResultViewlabel_ScrollBox.see(tk.END) #중요한 거다. 스크롤이 길어지면 최하단을 보게 한다
action.configure(text="시세 조회") # 버튼의 실행완료 상태 변경
action.configure(state="abled")

action = ttk.Button(firstlabel, text="시세 조회", command=Execute)
action.grid(column=0, row=2, sticky="W")

#==========================================================================

ResultViewlabel = ttk.LabelFrame(tab1, text="결과 확인") # 실행결과를 확인하는 콘솔창
ResultViewlabel.grid (column=0, row=3, padx=8, pady=4)

ResultViewlabel_ViewLabel = ttk.Label(ResultViewlabel, text ="Console: ")
ResultViewlabel_ViewLabel.grid(column=0, row=0, sticky="W")

ResultViewlabel_ScrollBox = scrolledtext.ScrolledText(ResultViewlabel, width=40, height=10, wrap=tk.WORD, font=('Normal',9))
ResultViewlabel_ScrollBox.grid(column=0, row=1) # 스크롤 형식의 텍스트박스 창 (콘솔창)

win.mainloop()

============================================================================

upbeatref.py

import json
import requests
import urllib
from urllib.request import Request, urlopen

def CoinAPI(a):
coincodedict = coincodedict = {'비트코인': 'KRW-BTC', '대시': 'KRW-DASH', '이더리움': 'KRW-ETH', '네오': 'KRW-NEO', '메탈': 'KRW-MTL', '라이트코인': 'KRW-LTC', '스트라티스': 'KRW-STRAT', '리플': 'KRW-XRP', '이더리움클래식': 'KRW-ETC', '오미세고': 'KRW-OMG', '스테이터스네트워크토큰': 'KRW-SNT', '웨이브': 'KRW-WAVES', '피벡스': 'KRW-PIVX', '넴': 'KRW-XEM', '지캐시': 'KRW-ZEC', '모네로': 'KRW-XMR', '퀀텀': 'KRW-QTUM', '골렘': 'KRW-GNT', '리스크': 'KRW-LSK', '스팀': 'KRW-STEEM', '스텔라루멘': 'KRW-XLM', '아더': 'KRW-ARDR', '코모도': 'KRW-KMD', '아크': 'KRW-ARK', '스토리지': 'KRW-STORJ', '그로스톨코인': 'KRW-GRS', '버트코인': 'KRW-VTC', '어거': 'KRW-REP', '아인스타이늄': 'KRW-EMC2', '에이다': 'KRW-ADA', '스팀달러': 'KRW-SBD', '블록틱스': 'KRW-TIX', '파워렛저': 'KRW-POWR', '머큐리': 'KRW-MER', '비트코인골드': 'KRW-BTG', '아이콘': 'KRW-ICX', '이오스': 'KRW-EOS', '스톰': 'KRW-STORM', '트론': 'KRW-TRX', '크립토닷컴': 'KRW-MCO', '시아코인': 'KRW-SC', '기프토': 'KRW-GTO', '이그니스': 'KRW-IGNIS', '온톨로지': 'KRW-ONT', '디크레드': 'KRW-DCR', '질리카': 'KRW-ZIL', '폴리매쓰': 'KRW-POLY', '제로엑스': 'KRW-ZRX', '시린토큰': 'KRW-SRN', '룸네트워크': 'KRW-LOOM', '비트코인캐시': 'KRW-BCH', '애드토큰': 'KRW-ADT', '애드엑스': 'KRW-ADX', '베이직어텐션토큰': 'KRW-BAT', '아이오에스티': 'KRW-IOST', '디마켓': 'KRW-DMT', '리퍼리움': 'KRW-RFR', '시빅': 'KRW-CVC', '에브리피디아': 'KRW-IQ', '아이오타': 'KRW-IOTA', '오에스티': 'KRW-OST', '메인프레임': 'KRW-MFT', '온톨로지가스': 'KRW-ONG', '가스': 'KRW-GAS', '메디블록': 'KRW-MEDX', '센티넬프로토콜': 'KRW-UPP', '엘프': 'KRW-ELF', '카이버네트워크': 'KRW-KNC', '비트코인에스브이': 'KRW-BSV', '쎄타토큰': 'KRW-THETA', '왁스': 'KRW-WAX', '엔도르': 'KRW-EDR', '쿼크체인': 'KRW-QKC', '콘텐츠프로토콜토큰': 'KRW-CPT', '비트토렌트': 'KRW-BTT', '모스코인': 'KRW-MOC'}
urlTicker = urllib.request.urlopen('https://api.upbit.com/v1/ticker?markets=' +str(coincodedict[a]) )
readTicker = urlTicker.read()
jsonTicker = json.loads(readTicker.decode('utf-8'))
return str(int(jsonTicker[0]['trade_price']))

 

+ Recent posts