Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 파이썬
- maven
- AI챗봇
- python
- jenkins
- 클라우드
- AI
- terraform
- 표준 라이브러리
- go
- 3티어 아키텍처
- GIT
- 리눅스
- 프로세스 관리
- open ai
- AWS
- nexus
- 사용자 계정 관리
- docker
- 애저
- awskrug
- 명령어
- 함수
- it기사
- Linux
- git hub
- 변수
- dockerfile
- aws사용자모임
- Azure
Archives
- Today
- Total
We are Architect
27. 파이썬으로 만드는 기상 상태 제공 프로그램 본문
* 어떤 프로그램을 만들었나?
- 기상상태 제공 프로그램을 만들어서 현재 전 세계에 있는 국가들의 날씨를 알 수 있게 만들었다.
- 특히 api를 어떻게 가져오는지 궁금하였고 가져온 api를 어떤 식으로 활용하는지가 가장 큰 궁금증이었다.
* 사용한 툴 들
- tkinter: UI를 제공해주는 파이썬 패키지. 버튼 및 프로그램 창 등의 기능을 제공.
- tkinter.font(): UI안에 입력되는 폰트의 설정기능을 제공해 주는 함수.
- requset: http메서드 방식들 제공하는 패키지.
* 추출한 패키지 및 모듈
# UI를 제공해 주는 패키지를 alias로 tk로 사용.
import tkinter as tk
# tkinter안에 font라는 모듈을 바로 사용 가능.
from tkinter import font
# request 패키지 불러옴.(url 불러오기)
import requests
* 정의한 함수들
# 버튼이 잘 작동하는지 확인하는 기능.
def test_function(entry):
print('button clicked : ', entry)
# get_weather(): 날씨정보 가져오는 함수
def get_weather(city):
# 키 값을 weather_key변수에 넣음.
weather_key = '사이트에서 가져온 API키 값'
# 버전이 아마 이상할듯
url = 'https://api.openweathermap.org/data/2.5/weather'
# 서버에 전달할 데이터를 저장하는 역할.
params = {'APPID': weather_key, 'q':city, 'units':'Metric'}
#url로 부터의 페이지 값을 가져오고 가져온 데이터를 딕셔너리에 저장한 값을 response변수에 저장.
response = requests.get(url, params = params)
# weather 변수안에 response값을 json형식으로 저장.
weather = response.json()
# josn 형식은 weather안에 있는 값들을 출력.
print(weather)
# weather안에 format_respomse로 온 데이터를 텍스트 화 함.
label['text'] = format_response(weather)
# format_response: 추출한 데이터를 사람이 읽기 쉽게 한줄씩 띄어서 포맷팅.
def format_response(weather):
try:
# weather 안에 key:'name'을 name변수에 넣음
name = weather['name']
# weather 안에 key:'weather'의 날씨 상태 값을 dec변수에 넣음
dec = weather['weather'][0]['description']
# weather 안에 key:'weather'의 현재 온도값을 temper변수에 넣음
temper = weather['main']['temp']
# 해당 값들을 모두 출력.
final_str = '도시: %s \n날씨: %s \n온도: (C)%s' %(name,dec,temper)
except:
# 문제가 생기면 출력.
final_str = '정보를 불러오는데 문제가 발생 했습니다.'
return final_str
- 날씨 제공 사이트에서 api 키 값을 가져올 때는 다음과 같이 한다.
https://home.openweathermap.org/users/sign_in
* tkinter를 이용한 UI생성 및 기능 적용
# 애플리케이션 기본 창을 생성하는 코드.
root = tk.Tk()
# 그래픽, 이미지, 도형을 배치하거나 그릴수 있는 위젯(Canvas) 사용
canvas = tk.Canvas(root, height=Height, width=Width)
# pack()은 Tkinter에서 제공하는 레이아웃 관리자
canvas.pack()
# tk.PhotoImage(): 이미지 파일을 로드
background_image = tk.PhotoImage(file='weather123.png')
# tk.Label(): 로드한 이미지를 넣을 라벨 위젯을 생성.
background_label = tk.Label(root,image=background_image)
# place(): 이미지를 원하는 위치에 배치.
background_label.place(x=0, y=0, relwidth=1, relheight=1)
# tk.Frame(): 입력 칸과 버튼을 포함할 칸을 만든다.
frame = tk.Frame(root,bg='#80c1ff',bd=5)
# 프레임을 설정 값에 맞게 배치한다.
frame.place(relx=0.5, rely=0.1, relwidth=0.75, relheight=0.1, anchor='n')
# tk.Button(): 버튼에 텍스트를 넣고 버튼 클릭시에 get_weather()함수를 호출.
button = tk.Button(frame, text='Search', font=40, command=lambda: get_weather(entry.get()))
# 버튼의 크기와 위치를 조절하는 함수.
button.place(relx=0.7, relwidth=0.3, relheight=1)
# 텍스트를 입력할 수 있는 필드를 생성
entry = tk.Entry(frame, font=40)
# 입력 필드의 위치와 크기를 조절.
entry.place(relwidth=0.65, relheight=1)
# 결과를 표시하는 프레임
lower_frame = tk.Frame(root, bg='#80c1ff', bd=10)
# relax: 가로중앙, rely: 창 상단 아래 25%, relwidth: 창의 75%너비와 높이 60%차지
lower_frame.place(relx=0.5, rely=0.25, relwidth=0.75, relheight=0.6, anchor='n')
# 내부에 위치하며 결과 텍스트를 표시
label = tk.Label(lower_frame, font=("Arial",18))
# 라벨이 lower_frame전체 높이와 넓이를 차지.
label.place(relwidth=1, relheight=1)
# 메인 이벤트 루프(무한 실행)을 하며 이벤트 작동 및 GUI를 유지 시켜준다.
root.mainloop()
* 완성된 프로그램
자료 참고 및 출처: 코딩하는 공대생님(keith Galli님 자료 참고) > https://blog.naver.com/allhpy35/221539530441
'Programing > Python' 카테고리의 다른 글
29. 파이썬으로 만드는 숫자 맞추기 게임 (0) | 2024.12.02 |
---|---|
28. 파이썬으로 하는 엑셀 작업 (0) | 2024.11.30 |
26. 파이썬으로 만드는 웹 스크래핑 (0) | 2024.11.24 |
25. 점프 투 파이썬 (외부 라이브러리) (0) | 2024.11.18 |
24. 점프 투 파이썬 (표준 라이브러리-3) (0) | 2024.11.18 |