프로그래밍 326

[Python] PyQt5 - askyesno, showerror, showinfo 대체하기

문제점 "tkinter.messagebox" 내의 askyesno, showerror, showinfo 함수들을 이용하여 메시창 알림을 잘 사용하고 있었습니다. from tkinter.messagebox import askyesno, showerror, showinfo 그런데 메시지 창이 나타나는 위치가 항상 화면에 중간에만 나타나는 문제가 있었습니다. 알림 메시지 창이 해당 함수를 호출하는 창의 중앙에 위치하도록 변경해야 했습니다. parent 매개변수에 부모 객체를 넘겨주면 부모 컨트롤의 중앙에 표시될 것이라는 글을 보고 적용해 보았으나 오류가 발생하였습니다. 해결 과정 "Tkinter, tkmessagebox keeps sending me to the root":https://stackoverflo..

[Python] 클래스 인스턴스 형변환 시, 주의할 점

파이썬에서 형변환은 꼭 필요하지 않습니다. 오히려 리터럴 형식의 변수에 대한 형변환을 제외하고는 굳이 형변환을 권장하지도 않는 것 같습니다.(지금 생각해 보니, 클래스 인스턴스의 형변환 자체가 필요없기도 하거니, 그런 문법이 없군요. ^^;) 특히나 클래스 인스턴스에 대한 형변환은 무의미할 정도입니다. 다음과 같은 코드를 보면, 어디서 문제가 있는지 감이 오신다면 다행이지만 저와 같이 델파이(파스칼)에 더 익숙한 개발자라면 도대체 문제가 뭔지 알 수가 없을 수 있습니다. (저도 왜 이게 문제가 되는 잘 몰랐습니다. ^^;) def handleGroupboxAllClick(self) -> None: """ 그룹박스 내 모든 체크박스의 선택을 토글하는 "All" 버튼 핸들러 : 모든 체크박스 항목의 선택을 ..

[Python] PySide2에서 'Python 코드 보기' 시, uic 관련 오류

문제점 새로 설치한 PC에서 파이썬을 설치한 이후에 PySide2를 설치하고 새로운 폼을 만든 후, "Python 코드 보기"를 실행하였더니, 다음과 같이 "uic"를 찾을 수 없다는 오류가 발생하였습니다. "코드 생성 실패" 오류 메시지 해결 방법 해결 방법은 간단합니다. "uic.exe" 파일을 검색하여 찾아보면, "PySide2" 패키지가 설치된 폴더에 함께 위치해 있습니다. "uic.exe" 파일이 있는 "PySide2" 패키지가 설치된 폴더로 가서, "bin" 폴더를 생성하고, 생성된 "bin" 폴더에 "uic.exe" 파일을 복사해 줍니다. 그리고 난 후, "Python 코드 보기"를 실행했을 때는 정상적으로 코드가 생성되어 표시됩니다.

[Python] Qt - QWidget 사라질 때, 처리하는 방법

개요 부모 클래스를 상속한 하위 클래스에서 여러 컨트롤을 추가하거나, 리소스를 사용하고 반환하려면 일반적으로 생성자에서 사용할 리소스를 만들거나 얻은 후, 소멸자에서 사용한 리소스를 반환하게 됩니다. 하지만, Python의 Qt에서는 gc의 의하여 때에 따라서 소멸자가 제대로 호출되지 않을 수도 있기 때문에 소멸자에서 사용한 리소스를 반환하는 것은 위험하고, 아래에 설명드리는 것과 같이 위젯이 닫힌다는 이벤트에서 처리합니다. QWidget.closeEvent() 오버라이딩 QtWidget에서 closeEvent() 메서드를 오버라이딩하여 위젯이 닫힐 때 필요한 작업(리소스 반환 등)을 수행할 수 있습니다. closeEvent() 메서드는 위젯이 닫힐 때 호출되는 이벤트 핸들러로서, 이 메서드를 오버라이딩..

[Python] JSON 문자열 다루기

개요 JSON 문자열을 dict로 변환하거나, 반대로 dict를 JSON 문자열로 변한하여 처리하는 방법을 알아보겠습니다. dict를 JSON 문자열로 변환하기 간단하게 json.dumps() 함수를 이용하면 됩니다. from json import dumps json_str = dumps(['foo', {'bar': ('baz', None, 1.0, 2)}]) print(json_str) """ Result>>> ["foo", {"bar": ["baz", null, 1.0, 2]}] """ 주의할 점은 한글과 같이 UTF 문자열 데이터가 포함되어 있는 dict를 dumps() 함수로 문자열로 변환을 시도하면 다음과 같이 인코딩되어 변환되기 때문에 바로 읽을 수가 없게 됩니다. from json impor..

[Python] E8363C Network Analyzer 화면캡쳐하기 (PyVISA)

개요 PyVISA를 이용하여 E8363C Network Analyzer 계측기의 현재 화면을 그대로 캡쳐하여 가져오는 방법을 알아 보도록 하겠습니다. 반복되는 내용은 이전 글인 "E4446A Spectrum Analyzer 화면캡쳐하기 (PyVISA)"를 참고하시기 바랍니다. SCPI 명령을 이용한 화면캡쳐하기 아래는 E8363C Network Analyzer 계측기의 현재 화면을 캡쳐하여 가져와 파일로 저장하는 코드입니다. from pyvisa import ResourceManager _host = '192.168.0.47' _port = 5000 rm = ResourceManager() # visa 객체를 생성합니다. # 지정한 HOST와 PORT를 사용하여 계측기에 접속합니다. pna_client ..

[Python] E4446A Spectrum Analyzer 화면캡쳐하기 (PyVISA)

개요 PyVISA를 이용하여 E4446A Spectrum Analyzer 계측기의 현재 화면을 그대로 캡쳐하여 가져오는 방법을 알아 보도록 하겠습니다. SCPI 명령을 이용한 화면캡쳐하기 아래는 E4446A Spectrum Analyzer 계측기의 현재 화면을 캡쳐하여 가져와 파일로 저장하는 코드입니다. from pyvisa import ResourceManager _host = '192.168.0.47' _port = 5025 rm = ResourceManager() # visa 객체를 생성합니다. # 지정한 HOST와 PORT를 사용하여 서버에 접속합니다. psa_client = rm.open_resource(f'TCPIP{_port}::{_host}::INSTR') print (psa_client...

[Python] pytube에서 "KeyError('streamingData')" 오류 발생 문제

문제점 및 증상 pytube를 이용하여 개인적인 유튜브 영상 다운로더를 만들어서 이용하고 있었는데, 얼마전부터 계속하여 "KeyError('streamingData')" 오류가 발생하며 영상 다운로드가 실패하였습니다. KeyError: 'streamingData' 해결 과정 구글 검색을 통하여 여러 가지를 확인해 보니, pytube 패키지를 새로 설치해보라는 것들이 많아서 "pytube"를 제거하고, "pytube3"를 설치해보고 하였으나 오히려 다른 문제가 발생하였습니다. ... File "C:\Dev\Python\Python310\lib\urllib\request.py", line 563, in error return self._call_chain(*args) File "C:\Dev\Python\Py..

[C] warning: implicit declaration of function ‘strnstr’

문제점 및 증상오랜만에 라즈베리파이 3에서 C로 작업할 일이 생겨서, 이것 저것 찾아가며 소스를 작성하던 중에 "strnstr()" 함수를 이용하려던 중에 다음과 같은 오류가 발생하였습니다.config_test.c:75:16: warning: implicit declaration of function ‘strnstr’; did you mean ‘strstr’? [-Wimplicit-function-declaration] pStartPort = strnstr(buff, read_count, "\"PORT\":"); ^~~~~~~ strstrconfig_test.c:75:14: warning: assignment to ‘char *’ from ‘int..

[정규식] 차량번호 형식 확인용 정규 표현식

개요우리 나라, 중국, 러시아 등지의 차량번호 형식을 확인하는 정규 표현식을 알아 보도록 하겠습니다. 차량번호 문자열에 공백은 없다고 가정합니다.한국 번호판용 정규 표현식2007년 이후 발급되는 신형 번호판은 아래 정규 표현식을 이용하여 형식이 맞는지 확인할 수 있습니다.^\d{1,4}[가-힣]\d{4}$영업용 차량이나 2007년 이전 구형 번호판의 경우 아래 정규 표현식을 이용하여 형식이 맞는지 확인할 수 있습니다.^[가-힣]{1,3}\d{1,4}[가-힣]\d{4}$"^" : 다음 정규식으로 문자열이 시작되어야 함"$" : 문자열의 마지막이 일치해야 함"\d{1,4}" : 숫자 1 ~ 4 개 일치"[가-힣]" : 한글 1자"\d{4}" : 숫자 4개"[가-힣]{1,3}" : 한글 1 ~ 3자중국 번호판..

프로그래밍 2023.04.18
728x90