프로그래밍/Python 80

[PyQt5] 사용자 위젯에서 배경 그리기

개요 위젯을 상속받은 사용자 위젯의 배경을 커스터마이징하여 그리는 방법을 알아보도록 하겠습니다. 배경 그리기 Qt에서 배경 등은 QPainter 객체를 통하여 그릴 수 있습니다. 이를 위해서는 paintEvent() 이벤트 처리 함수를 오버라이드 합니다. 다음 예제는 paintEvent() 함수를 override하고 간단하게 배경을 붉은색으로 칠하는 예제입니다. import sys from PyQt5.QtWidgets import QWidget, QApplication from PyQt5.QtGui import QPainter, QColor, QPen class MyWidget(QWidget): def __init__(self): super().__init__() self.initUI() def init..

[Qt] 창을 전체화면으로 표시하기

개요 특정 윈도우 창을 파워포인트 프리젠테이션 화면처럼 모니터 전체를 채워서 표시해야할 경우가 있습니다. 이를 Qt에서는 어떻게 구현하는지 알아보도록 하겠습니다. 전체화면으로 창 띄우기 특정 창을 파워포인트 프리젠테이션 화면처럼 모니터 전체를 채워서 표시 방법은 간단하게 "showFullScreenMode()" 함수를 호출하면 됩니다. 다음은 "showFullScreenMode()"를 이용한 간단한 예제입니다. from PyQt5.QtWidgets import QApplication, QMainWindow class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("Fullscreen Window") #..

[python] itertools.pairwise() 함수 사용법

GStreamer로 작업을 하다보면, 파이프라인 구축을 위하여 생성된 항목들을 연결 (link)해주어야 합니다. C에서는 gst_bin_add_many() 함수가 있어서 간단하게 구현이 가능한데, 파이썬에서는 해당 함수 대신 Element.link_many() 함수를 이용해야 합니다. 그래서 link_many() 함수가 어떻게 구현이 되어 있는지 궁금하여 찾아 보니, 다음과 같이 구현되어 있었습니다. from itertools import tee def pairwise(iterable): "s -> (s0,s1), (s1,s2), (s2, s3), ..." a, b = tee(iterable) next(b, none) return zip(a, b) Gst.Element에 다음과 같이 link_many()..

[Python] Flask 서버 멀티 스레드로 구동하기

문제점 및 증상 Qt를 이용한 GUI와 함께 간단한 Flask 웹 서비스를 이용해야하는 상황이 있었습니다. 처음에는 다음과 같이 Flask를 MVC 형식으로 구현하고, Flask 실행부만 스레드로 구현하면 아무런 문제가 없을 줄 알고 실행해 보았습니다만, 다음과 같은 오류가 발생되고 정상적으로 실행되지 않았습니다. Exception in thread Thread-6 (handleFlask): Traceback (most recent call last): File "C:\Dev\Python\Python310\lib\threading.py", line 1016, in _bootstrap_inner self.run() File "C:\Dev\Python\Python310\lib\threading.py", li..

[python] sqlalchemy (mysql.connector.errors.DatabaseError) 1273 (HY000): Unknown collation: 'utf8mb4_0900_ai_ci'

문제점 및 증상 MariaDB와 연동하는 과정에서 다음과 같은 오류가 발생하였습니다. sqlalchemy (mysql.connector.errors.DatabaseError) 1273 (HY000): Unknown collation: 'utf8mb4_0900_ai_ci' 시험 환경 MariaDB : 10.6.4 Database charset : utf8mb4 TABLE COLLATE : utf8mb4_unicode_ci 해결 방안 해결 방법은 아주 간단합니다. 다음과 같이 DB 연결 문자열 마지막에 "?charset=utf8mb4&collation=utf8mb4_general_ci"를 추가해 주시면 됩니다. db_url = f"mysql+mysqlconnector://{conf.get(JKEY_USERN..

[Python] 발생한 Exception의 클래스를 확인하는 방법은?

발생 상황 데이터베이스에 연결하여 데이터를 추가(insert)하는 작업에서 Exception이 발생하였습니다. Exception이 발생한 원인은 테이블에 유일키가 있었는데, 중복된 값을 추가하여 "IntegrityError" 오류가 발생한 것이었습니다. 정확하게 IntegrityError만 except 처리를 하면 되겠지만, "except Exception as e:" 구문 하나로 해결할 수 없나 하는 생각에 그럼 발생한 Exception의 클래스를 확인하여 "IntegrityError" 오류만 별도 처리하면 되지 않을까? 하는 생각에 관련 자료를 찾아보게 되었습니다. Exception의 클래스 이름 확인 방법 참고자료를 보면, Exception의 클래스 이름 확인 방법은 간단하게 다음과 같이 할 수 있..

[python-VISA] 잡음지수 분석기의 측정값 읽어오기

개요 잡음지수 분석기(Noise Figure Analyzer)에서 측정 포인트값을 읽어오는 방법에 대해 알아 보겠습니다. 이용한 잡음지수 분석기(Noise Figure Analyzer)는 Agilent N8975A 모델입니다. 측정 포인트값 읽어오기 다음은 측정 포인트 정보들을 읽어오는 예제입니다. from pyvisa import ResourceManager from time import sleep _GPIB = 8 _port = 0 rm = ResourceManager(r'C:\WINDOWS\system32\visa64.dll') client = rm.open_resource(f'GPIB{_port}::{_GPIB}::INSTR') print (client.query('*IDN?')) point_co..

[python] 각종 옵션/설정 정보를 JSON으로 다루기

개요 윈도우 환경에서 작업을 할 적에는 *.ini 형식의 파일로 옵션/설정 정보를 관리하였고, 관련 API 등이 편하게 되어 있어서 이용에 전혀 불편함이 없었는데, 파이썬의 configParse를 이용하려니 만족스럽지가 못하였습니다. 그러던 차에 JSON 형식의 파일이 파이썬의 dict 형과 1:1 대응이 된다는 점에서 착안하여 다음과 같이 옵션/설정 정보를 관리하였더니 INI 형식보다 더 유연하고 사용하기가 좋았습니다. 본 글에서는 파이썬에서 각종 옵션/설정 정보를 JSON으로 다루는 방법을 정리해 보겠습니다. 키 이름 상수 정의하기 자바스크립트에서 JSON 데이터를 다루거나, 파이썬의 dict 형 자료를 이용할 때, 꼭 문제가 되는 것이 키 이름에서 오타가 나서 알 수 없는 곳에서 헤맸던 경험이 종종..

[Python] 파워메터 측정 데이터 가져오기

파워메터 (Power Meter)를 PyVISA를 이용하여 측정 데이터를 가져오는 방법을 알아 보겠습니다. 먼저 예제 코드를 보면 다음과 같습니다. from pyvisa import ResourceManager host, port = '192.168.0.11', 0 conn_str = f'TCPIP{port}::{host}::INSTR' rm = ResourceManager(r'C:\WINDOWS\system32\visa64.dll') # VISA 객체를 생성합니다. print(f'PowerMeter {host}:{port} connecting...') power_meter = rm.open_resource(conn_str) print (power_meter.query('*IDN?')) power_met..

[Python] GPIB 를 통한 계측기 제어 실패기

이더넷을 통한 TCPIP 연결로 계측기 제어는 아무런 문제 없이 잘 수행해 왔었는데, 꼭 GPIB로 계측기를 제어해야할 상황이 발생하였습니다. 연결 문자열만 변경하면 특별한 문제 없이 바로 계측기 제어에 문제가 없을줄 알았지만, 연결부터 되지 않아서 몇 일을 헤맸습니다. GPIB 를 통한 계측기 연결을 위해 헤맸던 그 상황들을 기록해 둡니다. GPIB 연결 오류 발생 확인 파이썬을 설치하면 기본 제공되는 "IDLE Shell"에서 "ResourceManager.list_resources()"로 연결된 계측기를 다음과 같이 확인해 보았습니다. Python 3.10.0 (tags/v3.10.0:b494f59, Oct 4 2021, 19:00:18) [MSC v.1929 64 bit (AMD64)] on wi..

728x90