2월, 2020의 게시물 표시

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'

이 블로그의 인기 게시물

Qt Designer 설치하기

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