Google Maps API로 구글맵 제작하기

이미지
개요 이번에는 파이썬 + 구글맵 + PyQt5 를 이용해 아래와 같은 프로그램을 만들어 보았습니다. 지명이나 위경도 좌표를 입력하고, 그리기 버튼을 누르면 구글에 REST 기반 요청신호 (Http Request)를 보내 지도를 이미지로 다운로드 받아 화면에 표시하는 방식입니다. 프로그램 실행 화면 지도에 GPS센서로부터 수신된 위경도 좌표를 표시할 일이 생겼는데, NAVER, KAKAO 지도는 국내만 지원되어 제외하고 구글 맵으로 연동해 보았습니다. 이 예제를 실행하기 위해서는 Google Cloud Platform(GCP) 에 사전에 가입하고 구글맵을 사용하기위한 Key를 발급받아야 합니다.   [GCP 소개 : 출처 GCP 홈] 이 키를 통해 구글로 정보를 요청하고 받아와서 출력하는 방식입니다. GCP는 구글맵뿐만 아니라 컴퓨팅, 네트워킹, 빅테이터 관련한 다양한 서비스를 제공합니다. 구글의 클라우드 서버가 존재하는 지역정보입니다. [GCP 리전 소개 : 출처 GCP 홈] 이 글에서 Google Maps Platform에 가입절차 및 Key를 받는 과정은 생략 합니다. ...

기상청 날씨정보 엑셀파일에서 데이터 불러오기 및 시각화 구현

이미지
개요 이번에 만든 주제는 기상청에서 제공하는 기상 자료 개방 포털 에서 다운 받은 날씨 데이터 엑셀 파일 을 읽어 들여, 값을 보여주고 챠트 로 만들어본 예제 입니다. 파이썬 언어로 만들어져 있으며 아래 패키지, 모듈을 활용해 구성하였습니다. PyQt5 + Pandas + Matplotlib 기상청 날씨 자료는 부산, 제주도의 2020년 1월 1일 ~ 1월 5일까지 데이터 이며, 매 시간별 기온, 강수량, 풍속, 습도 가 기록되어 있습니다. 샘플 엑셀 파일 프로그램을 실행하면 아래와 같이 메인 화면이 보이고, 여기서 엑셀 파일 열기 버튼을 선택해 해당파일을 로드 합니다. 선택된 엑셀 파일은 pandas 의 Dataframe 으로 읽어들인 후, PyQt5 의 QTableWidget 에 아래와 같이 표시됩니다. 엑셀 파일의 워크시트가 2개 (부산, 제주도) 이므로, 각각 QComboBox 에 시트 이름이 추가되어 변경시 각 시트를 변경해 보여줍니다. 챠트 보기 버튼을 선택하면 해당 지역의 기상 데이터를 pandas에서 제공하는 matplotlib 와 연동해 챠트로 보여주는 기능을 넣어 보았습니다. 소스코드 from PyQt5.QtWidgets import (QApplication, QWidget, QTableWidget, QTableWidgetItem, QVBoxLayout, QHBoxLayout, QPushButton, QComboBox, QFileDialog) from PyQt5.QtCore ...

PyQt를 활용한 PDF 파일생성, 저장, 인쇄

이미지
이번에 만든 예제는 python과 PyQt5를 이용해 pdf 파일 생성 과 프린터 인쇄 에 대한 주제를 다룹니다. pyinstaller로 제작된 실행파일 링크: 다운로드 프로그램의 실행 모습은 아래와 같습니다. 화면의 내용이 출력된 결과를 보여주기 위해 더미 테이블 데이터를 생성하고 버튼 2개로 구성해 보았습니다. [프로그램 실행화면] 하나의 더미 QTableWidget 과 2개의 QPushButton 으로 구성되어 있습니다. 1. 'Print PDF File' 버튼을 누른 경우 (프린터 창 띄우고 인쇄) [인쇄 창 열기] [프린터를 통해 실제 인쇄된 모습] 자세한 내용은 이어지는 코드 분석에서 설명드리겠지만, 대략 아래의 흐름으로 진행됩니다. QPrinter class 생성 (프린터) QPrinterDialog class 생성 (프린터 설정창) QPainter class 생성 (화면 출력 클래스) 출력하고자 하는 위젯(QTableWidget)을 QPainter에 맞춤 QTableWidget의 render() 함수를 이용한 인쇄 인쇄창에서 실제 프린터가 아닌 'Microsoft Print To PDF'를 선택한 경우, PDF파일 생성도 가능합니다. 2. 'Make PDF File' 버튼을 누른 경우 (PDF 파일 생성) 프로젝트의 기본 경로 (변경 가능)에 다음과 같은 PDF 파일 생성 ...

QComboBox를 이용한 단어자동완성

이미지
이번에는 Python과 PyQt5의 QComboBox를 이용한 자동완성 (AutoCompletion)을 살펴보겠습니다. 좀 쉽게 생각하고 만들어 보았으나, 만드는 과정에서 한가지 문제점이 있었습니다. 바로 QComboBox에 QLineEdit를 추가 해 목록을 수정가능 하게 만드는 과정에서, 입력한 단어가 QComboBox에 원치않게 추가되는 부분이 있었습니다. 예를 들면 콤보박스에 추가되는 아이템의 목록이 아래 리스트와 같다면, allWords = ['부서', '사원', '이름', '직급', '나이'] 아래와 같이 콤보박스의 아이템들이 보여집니다. "나" 라는 단어를 검색한 후 아래와 같이 아이템이 Popup 된 상태에서 엔터키를 누르면 "나"라는 단어가 의도치 않게 콤보박스의 목록에 삽입되어 나오는 문제입니다. 해결과정은 아래 소스코드분석에서 말씀드리겠습니다. 먼저 전체 코드는 아래와 같습니다. from PyQt5.QtWidgets import QApplication, QWidget, QComboBox, QLineEdit, QCompleter, QVBoxLayout from PyQt5.QtCore import Qt import sys QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True) class CWidget(QWidget): def __init__(self): super().__init__() # 단어 리스트 allWords = ['부서', '사원', '이름', '직급', '나이'] # QCombo 생성 ...

QLineEdit를 이용한 단어자동완성

이미지
입력창에 검색할 내용을 넣으면 자동으로 해당 단어의 추천단어를 찾아서 표시(AutoComplete) 해 주는 기능을 Python과 PyQt5를 이용해 만들어 보았습니다. 구글이나 네이버 검색창에 해당 문자의 일부분을 작성하면 단어를 자동 완성 해주는 기능이죠. 파이썬으로 아래와 같이 만들어 보았습니다. [프로그램 실행화면] 만약 파이썬 단어 리스트가 아래와 같다면, " python " 이란 단어가 "p"로 시작하는 단어중에서 가장 많으므로, "p"를 입력하면 "python"이 QLineEdit에서 먼저 표시되게 됩니다. allWords = ['ocean', 'coding', 'python', 'python', 'pizza'] 미리 만들어진 리스트 안 단어들의 내용을 분석해 (중복 단어) 가장 빈도수가 높은 단어를 우선 표시해주는 기능입니다. from PyQt5.QtWidgets import QApplication, QWidget, QLineEdit, QCompleter, QVBoxLayout from PyQt5.QtCore import Qt from collections import Counter import sys class CWidget(QWidget): def __init__(self): super().__init__() # 단어 리스트 allWords = ['ocean', 'coding', 'python', 'python', 'pizza'...

Matplotlib 실시간 차트 그리기

이미지
이번 시간에는 matplotlib 를 이용해 실시간 챠트 (FuncAnimation이용)를 구성하는 방법과 해당 챠트를 PyQt5와 연동하는 방법에 대해 소개합니다. sin 파 FuncAnimation Class를 이용해 실시간으로 그리기 [matplotlib + PyQt5 + FuncAnimation] 인터넷에 matplotlib를 이용해 챠트를 그리는 방법은 많이 소개되어 있지만, 실시간 챠트 예제는 자료가 거의 없어 직접 만들어 보았습니다.  Pyinstaller로 제작한 실행파일 : chart matplotlib 예시 matplotlib는 데이터를 여러 종류 챠트를 구성하고, 보기좋게 그래프로 시각화 시키는 파이 썬 패키지 입니다. 소스코드 import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout import matplotlib.pyplot as plt import matplotlib.animation as animation from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg import numpy as np QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True) class CWidget(QWidget): def __init__(self): super().__init__() # for PyQt embedding self.fig = plt.Figure() self.canvas = Figure...

포트리스 게임의 포물선 운동 구현하기

이미지
대학 시절 " 포트리스 "라는 게임이 있었습니다. 포탄이 날아가는 속도와 각도를 조절해 상대를 맞추는 게임인데, 비슷하게 파이썬으로 구현해 보았습니다. 실제 게임의 요소(적군, 충돌, 바람)는 코드 간단화를 위해 구현하지 않았습니다, 이 글을 참조해 여러분이 직접 한번 코드로 작성해 보면 좋겠습니다. 개요 Python, PyQt5 를 이용한 간단 게임 탱크에서 발사되는 포탄에 포물선 운동 을 적용 Widget, Game, Tank, Bullet 4개의 class를 이용한 객체지향적 설계  [실행화면] 설계 방향 키보드 좌우 (탱크 이동), 상하(포탑 각도) 처리  스페이스 키 눌러짐(탄환 속도 증가), 키 업(탄환 발사) 4개의 클래스로 구성 ( CWidget :배경, CGame :게임 관리, CTank :탱크, CBullet :포탄) Draw, Keyboard Event 처리는 CWidget이 CGame에 위임 CTank는 직사각형으로 그려지고, 대포, 포탄들, 각도, 발사속도를 가짐 CBullet은 하나의 포탄을 의미하는 클래스, 위치, 속도, 각도, 착탄 여부를 가짐 CTank 는 CBullet type 객체를 리스트로 저장 (발사 포탄은 다수이기 때문) 발사된 포탄(CBullet)은 스스로 자신의 위치를 갱신 (포물선 운동) 발사된 포탄의 좌표가 윈도우 바닥 Y 좌표보다 크면 착탄이므로 삭제 소스 코드 총 3개의 파일로 구성 (main.py, game.py, tank.py) main.py (main 함수, CWidget class) game.py (CGame class...

이 블로그의 인기 게시물

Qt Designer 설치하기

PyQt5 기반 동영상 플레이어앱 만들기