일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 현대통신
- 매터
- 파이썬
- 해외주식
- 퀄컴
- 애플
- Espressif
- 미국주식
- 홈네트워크
- raspberry pi
- MQTT
- Bestin
- Apple
- matter
- 코스피
- 나스닥
- 엔비디아
- 공모주
- 월패드
- 배당
- homebridge
- 힐스테이트 광교산
- ConnectedHomeIP
- RS-485
- 티스토리챌린지
- esp32
- Python
- 오블완
- 국내주식
- Home Assistant
- Today
- Total
목록PyQt5 (12)
YOGYUI
분양받은 아파트 입주 시작일(5/17)이 코앞으로 다가왔다 분명히 아파트는 다 지어졌는데 나는 현금이 없다... 현금없는 서민에게 필요한건 역시 주택담보대출! 집단대출 상담받으면서 대출가능금액, 대출기한 및 금리같은 중요한 정보들을 들었는데, 매달 내야하는 이자 및 원금(원리금) = 내가 실제로 내야하는 돈에 대해서는 상담사가 계산기를 두들겨주는 것만 보고는 까먹어버렸다... 대출 이자 계산을 해주는 웹사이트가 워낙 많기 때문에 인터넷만 가능한 환경이면 금방 계산 가능한 세상이긴 하지만, 개발자라면 계산기정도는 직접 만들어보는 것도 시간때우기용으로 적당하다 ㅎㅎ Python으로 만들었고, UI는 PyQt5를 활용했다 https://github.com/YOGYUI/Mortgage-Loan-Calculato..
PyQt5 - Set maximum value over 0x7FFFFFFFF of Spin Box PyQt5의 QSpinBox는 4바이트 부호 있는 정수 (singed integer)를 표현할 수 있다 (자세히 알아보지는 않았는데, QSpinBox 내부 QLineEdit의 validator가 Qt에서 제공하는 default QIntValidator인듯?) from PyQt5.QtWidgets import * app = QApplication([]) spinbox = QSpinBox() lineedit = spinbox.lineEdit() validator = lineedit.validator() print(validator) In [1]: print(validator) Out[1]: (그냥 QValida..
Mac OS에서 PyQt5로 윈도우를 만들어서 메뉴바를 추가하면 default로 상단 작업표시줄에 메뉴바가 표시된다 (테스트 당시 OSX 버전은 11.5.2, PyQt5 버전은 5.15.4) [테스트 코드] if __name__ == '__main__': import sys from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import * app = QCoreApplication.instance() if app is None: app = QApplication(sys.argv) window = QMainWindow() menubar = QMenuBar(window) window.setMenuBar(menubar) menu1..
일전에 PyQt를 사용해서 내가 직접 만든 웹브라우저(링크)로 내 블로그를 방문하는 테스트를 진행했는데, 네이버 애널리틱스의 '사용자 웹브라우저' 분석에 'Chrome 83' 항목이 새로 생긴 것을 볼 수 있었다 QtWebEngine의 Chromium 버전은 다음과 같다고 한다 내 개발환경이 Qt 5.15.2니깐 Chromium 83이 코어로 사용되었다는 것을 알게 되었다 ㅎㅎ 일일이 Qt 버전을 확인하지 않고 브라우저 버전 정보를 가져올 수 있는 방법을 찾다가, 자바스크립트로 'navigator.userAgent'를 호출하면 된다는 것을 확인했다 https://www.w3schools.com/jsref/prop_nav_useragent.asp Navigator userAgent Property Navi..
4. 네비게이션 툴바 만들기 북마크바를 만들려고 하다보니, 탭 안의 위젯이 url 에디트 등의 컨트롤들을 각각 모두 가지고 있는 것이 불합리해보여서 별도로 네비게이션 툴바를 만들었다 (QToolBar 상속) [NavigationWidget.py] from PyQt5.QtCore import pyqtSignal, QSize from PyQt5.QtGui import QIcon from PyQt5.QtWidgets import QToolBar, QToolButton, QLineEdit class NavigationToolBar(QToolBar): _is_loading: bool = False sig_navigate_url = pyqtSignal(str) sig_go_backward = pyqtSignal()..
3. 윈도우 만들기 앞서 구현한 WebPageWidget 여러개를 하나의 윈도우가 관리할 수 있도록 QTabWidget을 사용해서 윈도우를 만들어보자 [WebBrowserWindow.py] from functools import partial from PyQt5.QtCore import QSize from PyQt5.QtGui import QIcon, QCloseEvent from PyQt5.QtWidgets import QMainWindow, QTabWidget, QTabBar, QPushButton from WebPageWidget import WebPageWidget class WebBrowserWindow(QMainWindow): def __init__(self, parent=None): supe..
웹크롤링 관련해서 작업을 할 때 간혹 브라우저를 열어서 웹페이지에 직접 접근해야 하는 경우가 있는데, 크롬을 쓰다보니 원하는 동작들을 구현하기 힘든 경우가 간혹 있어서 간단한 수준의 웹브라우저를 직접 구현해보기로 했다 (만들다보니 재미들려서 조금씩 기능을 추가해나가는 중 ㅎㅎ) 개발일지 남길 겸 블로그에 포스팅해보도록 한다 (Github 저장소도 만들고...) 1. Package Install PyQt가 워낙에 익숙하다보니 웹브라우저도 PyQt로 만들어보기로 했다 필요한 패키지인 'PyQtWebEngine'은 최신 PyQt5 패키지에는 포함이 되어 있지 않아서 따로 pip으로 설치해줘야 한다 (https://pypi.org/project/PyQtWebEngine/) pip install PyQtWebEn..
PyQt5의 pyqtSignal 혹은 pyqtBoundSignal을 함수와 연결(connect)시, 여러 객체를 for문 안에서 lambda를 사용하여 연결할 경우 정상적으로 동작하지 않는 문제가 있다 다음 예시를 통해 문제를 확인해보자 if __name__ == '__main__': import sys from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import * app = QCoreApplication.instance() if app is None: app = QApplication(sys.argv) btns = [ QPushButton('BUTTON1'), QPushButton('BUTTON2'), QPushBut..
대부분의 통합개발환경(IDE)는 텍스트 에디트의 탭('\t') 길이(크기)를 설정할 수 있는 옵션이 있다 (들여쓰기를 위해 주로 사용) Qt의 QTextEdit 위젯의 Tab(탭) 길이를 변경하는 방법을 알아보자 우선 탭의 공백 길이가 Default는 어느 정도 되는지 알아보기 위해 다음과 같이 코드를 작성해봤다 하나의 스페이스와 일반 문자열의 가로 폭을 동일하게 표현하기 위해 Monospaced 폰트 중 하나의 'D2Coding'을 활용했다 https://github.com/naver/d2codingfont naver/d2codingfont D2 Coding 글꼴. Contribute to naver/d2codingfont development by creating an account on GitHub..
QDoubleSpinbox는 실수형 값을 위한 스핀박스인데, 더블클릭 시 다음과 같이 소수점을 기준으로 좌측 혹은 우측 영역만 선택된다 > 전체 값을 선택하고 싶을 때 불편한 경우가 간혹 발생한다 더블클릭 시 전체 영역을 선택하게 하기 위해서는 스핀박스 내부의 QLineEdit 객체를 커스터마이즈해줘야 한다 QLineEdit의 mouseDoubleClickEvent 시그널을 오버라이드해서 마우스 좌클릭일 경우 전체 텍스트를 선택하게 하는 selectAll() 메서드를 호출하면 된다 [예제 코드] from PyQt5.QtCore import * from PyQt5.QtWidgets import * class CustomLineEdit(QLineEdit): def __init__(self, parent=No..
QTableWidget의 Column 헤더 라벨(텍스트)는 setHorizontalHeaderLabels(List[srt]) 메서드로 한번에 수정할 수 있지만, 설정된 라벨들을 한번에 가져오는 인터페이스는 내가 알기론 구현되어 있지 않다 대신, horizontalHeaderItem(int) 메서드를 통해 각 열의 헤더에 할당되어 있는 QTableWidgetItem을 호출한 뒤 text() 메서드로 각 열 헤더의 라벨을 가져올 수 있다 [예제 코드] if __name__ == '__main__': import sys from PyQt5.QtCore import * from PyQt5.QtWidgets import * app = QCoreApplication.instance() if app is None: ..
- requires: PyQt5 PyQt5의 QtSerialPort 모듈로 현재 장비에서 접근 가능한 시리얼 포트를 리스트업해보자 공식 API 문서는 다음을 참고 https://doc.qt.io/qt-5/qtserialport-index.html https://doc.qt.io/qt-5/qserialportinfo.html from typing import List, Dict, Union from PyQt5 import QtSerialPort def list_serial() -> List[Dict[str, Union[str, int, bool]]]: available = QtSerialPort.QSerialPortInfo().availablePorts() lst = [{ 'port': x.portName..