일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 티스토리챌린지
- 월패드
- homebridge
- matter
- Apple
- 국내주식
- 배당
- ConnectedHomeIP
- 퀄컴
- 현대통신
- 파이썬
- Espressif
- raspberry pi
- esp32
- 힐스테이트 광교산
- 마이크로소프트
- 공모주
- Bestin
- Home Assistant
- 애플
- 나스닥
- 취미생활
- 홈네트워크
- Python
- MQTT
- 미국주식
- 매터
- RS-485
- 해외주식
- 오블완
- Today
- Total
목록Software/Python (31)
YOGYUI

웹크롤링 관련해서 작업을 할 때 간혹 브라우저를 열어서 웹페이지에 직접 접근해야 하는 경우가 있는데, 크롬을 쓰다보니 원하는 동작들을 구현하기 힘든 경우가 간혹 있어서 간단한 수준의 웹브라우저를 직접 구현해보기로 했다 (만들다보니 재미들려서 조금씩 기능을 추가해나가는 중 ㅎㅎ) 개발일지 남길 겸 블로그에 포스팅해보도록 한다 (Github 저장소도 만들고...) 1. Package Install PyQt가 워낙에 익숙하다보니 웹브라우저도 PyQt로 만들어보기로 했다 필요한 패키지인 'PyQtWebEngine'은 최신 PyQt5 패키지에는 포함이 되어 있지 않아서 따로 pip으로 설치해줘야 한다 (https://pypi.org/project/PyQtWebEngine/) pip install PyQtWebEn..

Python으로 문자열(str)을 다룰 때 format을 자주 활용하게 된다 print("Hello World! {}".format('yogyui')) print("Hello World! {:d}".format(1234)) print("Hello World! 0x{:X}".format(255)) temp = "Hello World! {}" print(temp) print(temp.format('test')) print("{0} {1}!".format('Hello', 'World')) 출력 Hello World! yogyui Hello World! 1234 Hello World! 0xFF Hello World! {} Hello World! test Hello World! Problem format을 활용할..

Python 내장함수인 hex는 정수값을 16진수로 표현된 문자열(str)을 반환해준다 help(hex) >> Help on built-in function hex in module builtins: hex(number, /) Return the hexadecimal representation of an integer. hex(12648430) '0xc0ffee' In [1]: hex(25) Out[1]: '0x19' In [2]: hex(1234) Out[2]: '0x4d2' 그런데, 함수의 인자로 음의 정수 (negative integer)를 입력하면 다른 프로그래밍 언어에서와는 다른 결과가 출력된다 In [3]: hex(-1) Out[3]: '-0x1' In [4]: hex(-128) Out[4]:..

Python 코딩할 때 자주 활용하는 자료구조 중 하나인 list의 요소들을 뒤집는 방법을 알아보자 (은근히 쓸데가 많다) 참고: 모든 코드는 python 3.x에서 작성되었다 1. 리스트 객체 자체를 뒤집기 list 객체의 reverse 메서드를 사용하면 된다 예를 위해 리스트 객체를 하나 생성한다 a = [1, 2, 3, 4, 5] In [1]: print(a) Out[1]: [1, 2, 3, 4, 5] 이제 뒤집어보자 a.reverse() In [2]: print(a) Out[2]: [5, 4, 3, 2, 1] 간단하게 요소를 뒤집을 수 있다 그런데 리스트 객체 자체가 바뀌는 것이기 때문에, 원본 리스트를 그대로 남겨두고자 하는 경우에는 적절한 구현 방식이 아니다 (나도 이 방식은 거의 쓰지 않는다..

윈도 OS를 사용하다보면 (특히 개발자들은) 환경 변수를 설정해야하는 경우가 있다 제어판 - 시스템 - 고급 탭의 '환경 변수' GUI로 해결하는게 일반적이다 예시를 위해 'TEST' 변수를 한 개 만든 뒤에 Python으로 수정하는 방법을 알아보자 (이 글에서는 사용자 변수가 아니라 시스템 변수를 대상으로 한다) 임의로 C:\test1, C:\test2, C:\test3 3개의 경로를 값으로 입력했다 (실제 존재하지 않는 경로여도 상관없다) 여러 개의 경로를 입력할 경우 세미콜론(;) 구분자로 입력해줘야 한다 1. OS module Python 구동 시 환경변수를 동적으로 변경하고자 할 경우 built-in 모듈인 os의 environ (_Environ) 클래스를 사용하는게 일반적인 방법이다 'TEST..

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..

파이썬에서 공통으로 사용되는 구문들은 decorator를 활용해서 코드를 간소화할 수 있다 decorator를 활용한 로깅 예시는 다음과 같다 import logging def log(func): """ Log what function is called """ def wrap_log(*args, **kwargs): name = func.__name__ logger = logging.getLogger(name) logger.setLevel(logging.INFO) # add file handler fh = logging.FileHandler("%s.log" % name) fmt = '%(asctime)s - %(name)s - %(levelname)s - %(message)s' formatter = log..

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: ..

파이썬 3.10에 마침내 C, C++의 switch/case문과 유사한 문법이 추가된다고 한다 PEP 634은 구조적 패턴 매칭(Structural Pattern Matching)이라 하여 switch/case문과 유사한 match/case 문법에 대한 내용을 담고 있다 해당 내용은 다음 기사에서 최초로 접했다 (3월5일 기사니 꽤 뒷북인 느낌 ㅎㅎ) www.ciokorea.com/news/185423 파이썬 3.10의 새 '패턴 매칭'이 할 수 있는 일 파이썬(Python)은 강력하고 인기가 높지만, 다른 언어에는 있는 플로우 제어(flow control)가 결여되어 있었다. 이는 하나의 값을 가져와, 여러 가능한 조건 중 하나에 대해 명쾌하게 매칭 할 수 있는 www.ciokorea.com C, C+..

Flowchart를 웹에서 보여줘야 할 필요가 생겨서 이리저리 검색하다가 python, matplotlib 기반 라이브러리인 schemdraw를 한번 써보기로 했다 schemdraw.readthedocs.io/en/latest/ Schemdraw documentation — SchemDraw 0.8 documentation schemdraw.readthedocs.io 전자회로, 논리회로, 신호처리 등 다양한 종류의 schematics를 그리기 위한 Element들이 구현돼있다 (Latex도 지원되는듯) 예제코드를 보면 알겠지만, 한땀한땀 노가다로 코딩해줘야된다 사용성을 높이려면 고수준의 커스터마이징이 필요할 것 같다 각설하고, 다음과 같이 Flowchart도 어렵지 않게 구현할 수 있다 # test.py..

Ajax (Asynchronous JavaScript and XML) Ajax - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 다른 뜻에 대해서는 에이젝스 문서를 참조하십시오. 다른 뜻에 대해서는 아이아스 문서를 참조하십시오. Ajax(Asynchronous JavaScript and XML, 에이잭스)는 비동기적인 ko.wikipedia.org Flask 자체의 기술적 내용에 해당하는 포스팅은 아니다 Ajax 사용에 대한 예시 (page update에 대한 요청은 페이지가 수행하고, 서버는 라우팅만 잘 구현해주면 된다) [Structure] + proj + templates - index.html - app.py index.html에서 1초에 한번씩 update POST 호출하여 ..

Flask web server 구현 시 인증 절차를 위해 데코레이터 함수를 직접 구현하는게 일반적이다 관련 링크: https://eddmann.com/posts/using-basic-auth-and-decorators-in-pythons-flask/ 하지만 IoT 서버 구동과 같은 단순한 인증 절차만 필요할 경우 Flask_HTTPAuth같은 extension을 설치해 간단하게 해결할 수 있다 (로그아웃같은 기능은 session 별도 구현 필요) 본 포스팅에서는 Flask_HTTPAuth를 활용한 HTTP Basic 인증에 대한 예시만 다룬다 HTTP Digest 인증, (JWS/JWT) 토큰 인증 방식 / user-role 등에 대한 내용은 공식 페이지에서 참고하도록 한다 [Structure] + pr..
- 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..