단축키로 버튼을 누르는 예제 코드입니다. 엄밀히 말하면 버튼을 실제로 클릭한다기 보다는 버튼 클릭시 호출되는 함수를 단축키 누를때 호출되도록 하는 것입니다. 2024. 4. 11. 최초작성 실행하면 두 개의 버튼이 보입니다. 버튼 1에 보이는 단축키 Ctrl + P를 누르면 아래 메시지가 출력됩니다. 버튼 1을 클릭시에도 동일한 메시지가 출력됩니다. 버튼 1이 클릭되었습니다! 버튼 2에 보이는 단축키 1을 누르면 아래 메시지가 출력됩니다. 버튼 2를 클릭시에도 동일한 메시지가 출력됩니다. 버튼 2가 클릭되었습니다! 전체 코드입니다. import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout from PyQt5..
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" 에러 해결 방법입니다. 2024. 3. 27 최초작성 2024. 3. 28 주의사항 추가 pyQt5만 사용할때에는 문제 없다가 opencv와 같이 사용시 다음과 같은 오류가 발생했습니다. QObject::moveToThread: Current thread (0x2a71090) is not the object's thread (0x2ddb230). Cannot move to target thread (0x2a71090) qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "/home/webnautes/miniconda3/envs/pyqt5/li..
pyQt5에서 libGL error: MESA-LOADER: failed to open 에러 발생시 해결방법입니다. 2024. 3. 25 최초작성 2024. 3. 27 오류수정 pyQt5 예제 코드를 실행하는 중에 다음과 같은 에러가 발생했지만 동작은 잘되는 상황이었습니다. libGL error: MESA-LOADER: failed to open radeonsi: /usr/lib/dri/radeonsi_dri.so: 동적 오브젝트 파일을 열 수 없습니다: 그런 파일이나 디렉터리가 없습니다 (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri, suffix _dri) libGL error: failed to load driver:..
Apple Silicon Macbook에 PyQt5를 설치하는 방법을 설명합니다. 예전에 pip 명령으로 PyQT5가 설치안되는 현상이 있어서 사용했던 방법입니다. 이제는 pip install pyqt5로 설치가능합니다. 2022. 7. 23 최초작성 2024. 3. 23 homebrew 설치방법 변경, pyqt5 설치 관련, 방법은 간단합니다. 다음 명령어 한 줄이면 설치가 완료됩니다. homebrew를 사용하여 설치된 python에서 동작합니다. % brew install pyqt5 위 명령을 사용하려면 homebrew를 설치해야 합니다. 다음 포스트를 참고하여 설치하세요. Apple Silicon Macbook, macOS에 Homebrew 설치하기 https://webnautes.tistory.c..
PyQtGraph 라이브러리를 사용하여 PyQt에서 그래프 그리는 예제 코드입니다. 2024. 2. 5 최초작성 다음 2개의 패키지를 설치해야 합니다. pip install pyqtgraph PyQt5 디폴트 배경색은 검은색이기 때문에 흰색으로 변경할 필요가 있습니다. 아래 예제 코드에서는 setBackground 메소드에 w를 지정하여 배경색이 흰색이 됩니다. import pyqtgraph as pg from PyQt5 import QtWidgets class MainWindow(QtWidgets.QMainWindow): def __init__(self): super().__init__() # Temperature vs time plot self.plot_graph = pg.PlotWidget() se..
PyQt5와 QML을 사용하는 간단한 예제코드입니다. 2023. 12. 9 최초작성 QML을 사용하여 UI를 따로 분리할 수 있다는 것을 알면서도 사용을 꺼렸는데 이렇게 UI를 분리하는 것도 괜찮겠다 싶어 간단한 예제 코드로 시도해보았습니다. 실행하면 중앙에 버튼이 있는 윈도우가 보입니다. 버튼을 클릭할때마다 메시지 박스가 보이게 됩니다. 확인을 클릭하면 메시지 박스가 사라집니다. 코드는 UI를 정의한 main.qml 파일과 PyQt5 코드를 작성해놓은 main.py 파일로 구성됩니다. main.qml QML을 사용하여 윈도우를 생성하고 중앙에 버튼을 배치합니다. 버튼이 클릭되면, 파이썬 코드 파일 main.py에 정의된 mainWindow 클래스에 있는 showMessage() 함수가 호출됩니다. im..
logging과 PyQt5를 사용하여 로그창을 구현한 예제입니다. 텍스트 파일에도 로그창에 보이는 내용이 따로 저장됩니다. 2022. 07. 21 최초작성 2022. 10. 30 한글 메시지 저장시 깨지는 현상 해결 2023. 06. 14 최종수정 - QTextEditLogger에 보여지는 로그 지우는 버튼 추가 Test Me 버튼을 클릭하면 로그가 추가됩니다. Clear 버튼을 클릭하면 QTextEditLogger에 보여지던 로그가 모두 지워집니다. 전체 소스코드입니다. import sys from PyQt5 import QtWidgets import logging date_strftime_format = "%d-%b-%y %H:%M:%S" message_format = "%(asctime)s - %(..
PyQT5에서 시그널이 thread-safe하다는 말을 발견하고는 여러 개의 스레드에서 시그널을 발생시켜 동일한 슬롯 함수를 호출할 때 문제가 없는지 테스트 해보았습니다. https://stackoverflow.com/questions/68287979/pyqt5-are-pyqtsignals-thread-safe 2023. 5. 18 최초작성 3개의 스레드에서 루프를 돌며 pyqtSignal을 사용하여 하나의 슬롯을 반복적으로 호출하도록 했습니다. import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout from PyQt5.QtCore import pyqtSignal, QThread from PyQt5.QtC..
QApplication의 인스턴스를 생성할 때 sys.argv를 전달해야 하는 이유를 다루고 있습니다. 2022. 9. 12 최초작성 모든 응용 프로그램이 작동하려면 QApplication 객체가 필요합니다. 이 객체는 GUI와 사용자 간 상호 작용을 제어하는 응용 프로그램의 기본 이벤트 루프를 시작하고 유지합니다. PyQt로 응용 프로그램을 개발할 때 다음처럼 QApplication 인스턴스를 생성하고 sys.argv를 전달했습니다. import sys from PyQt5.QtWidgets import QApplication app = QApplication(sys.argv) print(sys.argv) 다음처럼 실행하면 sys.argv의 내용을 출력해줍니다. sys.argv에는 커맨드라인에서 파이썬 ..
QTreeView에 json을 로드하여 보여주고 QTreeView에서 수정한 결과를 다시 json으로 저장하는 예제 코드입니다. 2022. 8. 17 최초작성 2022. 8. 18 추가관련 구현 처음 실행하면 ini 파일이 없기 때문에 코드에 넣어둔 디폴트 값을 사용하여 QTreeView를 채웁니다. 이후에는 생성된 ini 파일에서 로드하여 보여줍니다. QTreeView의 항목을 더블 클릭하여 원하는 항목을 변경할 수 있습니다. 마우스 우클릭하여 보이는 메뉴에서 QTreeVIew의 항목을 추가하거나 삭제할 수 있습니다. 트리구조에서 위치한 레벨에 따라 보이는 메뉴가 다릅니다. 프로그램 종료시 QTreeView에 있는 내용을 ini 파일에 저장합니다. 전체 소스 코드입니다. import os, sys, j..