IT(124)
-
PySide6 Customized Window
Pyside6를 License model 때문에 사용하기 시작했다. 그런데 쉽지가 않은 부분들이 있다. 테스트 용도로 간단한 프로그램을 만들었는데 윈도우 리사이즈에서 막혔다. Menu bar가 window title에 나타나도록 하기 위해서 customizing을 하는데 생각보다 쉽지 않다. 구글링을 Pyside6로 해도 별로 나오지가 않는다. 그래도 여기엔 css를 써서 style을 정하는 stylesheet도 들어가 있다. 일괄적용하는 부분과 별도 적용하는 부분이 모두 들어 있다. 구미에 맞는 것을 골라쓰면 된다. import sys from PySide6.QtCore import QPoint, Qt, QRect from PySide6.QtWidgets import QApplication, QMain..
2022.05.21 -
Python socket error (소켓 통신 에러)
별거 아닌 문제인데 원인을 모를 땐, 난감하다. 채팅 프로그램 샘플을 구글링해서 찾아 테스트하는데 같은 프로그램을 같은 PC에서 돌리는데 에러가 발생한다. AttributeError: module 'socket' has no attribute 'socket' 문제는 해당폴더에 포트 생성 권한이 없어서 발생한 문제라고 한다. 새로 프로젝트를 만들어 소스 복사해서 실행하니 잘 된다. 권한 관련 문제는 가끔 난감하다.
2022.05.20 -
[Python] 엑셀을 수식 자동으로 수정하기
엑셀 파일을 수정해 달라는 요청을 받았다. 수치값을 입력한 파일에서 그 값들을 변경하고 수식도 변경이 필요한 상황이다. 몇 개 안되는 파일이야 쉽게 수정이 가능하지만 그 숫자가 많을 때는 자동화가 최고 !!! openpyxl이라는 라이브러리를 사용해서 원본 파일 test.xlsx를 읽어 숫자는 나누기 1000으로 하고, 수식이 들어간 경우는 수식 '+ 24'를 하는 작업을 해야 한다고 생각하고 다음을 만들어 봤다. 만든 파일은 text1.xlsx로 저장을 한다. import openpyxl from openpyxl import Workbook org_wb = openpyxl.load_workbook(filename= 'test.xlsx') org_ws = org_wb.active wb = Workbook..
2022.04.23 -
[Python] Database의 내용을 terminal에 table로 예쁘게 출력하기
GUI가 있는 프로그램이라면 디자인을 예쁘게 할 수 있겠지만 터미널 프로그램이라고 하면 '-'와 '+'를 이용해 테이블을 만들어 표시하는 것이 하나의 방법일 수 있다. 이를 위해서는 다음과 같은 방식으로 출력을 할 수 있다. PrettyTable을 import하여 간단한 용례는 다음을 확인하자. from prettytable import PrettyTable def printDB(): dbCon = sqlite3.connect("sohyemin.db") db = dbCon.cursor() cursor = db.execute("select * from shm") t = PrettyTable(['No', 'IP', 'Project', 'Location', 'Port', 'Enable']) rows = db...
2022.03.30 -
[Python] Sqlite3 간단한 예제
간단하게 Sqlite3를 사용하는 법을 다음과 같이 공유한다. 우선 sqlite3를 설치하기 위해서 pip. 명령은 다음과 같다. pip install pysqlite3 import sqlite3 dbCon = sqlite3.connect("config.db") db = dbCon.cursor() table_name = 'config' cursor = db.execute("SELECT * FROM sqlite_master WHERE name = ?", (table_name,)) if cursor.fetchone(): print("database table exist") else: db.execute( "CREATE TABLE config (idx INTEGER, txt TEXT)") db.execute(..
2022.03.29 -
[Python] Dictionary Mapping, 함수 포인터?
Python에서 switch case문을 대치할 방법을 찾다가 알게 된 내용, 예전에 쓰던 함수 포인터와 같다. def function_1(): print("function_1") def function_2(): print("function_2") def function_3(): print("function_3") functions = {1: function_1, 2: function_2, 3: function_3} try: func = functions[4] func() except KeyError as ex: print(ex)
2022.03.29 -
git 사용의 기초
git이 많이 서툴어서 다시 한번 정리한다. 모두 local command line에서 다음과 같이 작업을 해 주면 git이건 github이건 모두 소스코드를 올릴 수 있다. 아래와 같이 소스를 올리기 위해서는 web으로 github에 접속해 repository를 만들고 repo 주소를 복사해서 [repository address] 대신에 붙여 넣으면 된다. git init git status git add . git commit -m "comment" git remote add origin [repository address] git remote -v git push origin master git push -f origin master 소스 수정을 한 후에는 모든 소스를 업데이트 하기 위해서 다음과 ..
2022.03.28 -
#7 전자액자 프로젝트 - 소스보기 2/2
이번 파일은 PhotoFile.py로 - createFileList - getRandomPhoto - getPhotoData 의 세 개의 함수로 이루어져 있다. 우선 createFileList는 주어진 경로의 하위를 훑어가면서 jpg 파일만을 골라서 경로와 파일명을 모두 파일에 순차적으로 저장을 하는 것이다. Database에 넣는 것도 고려해 봤으나 크게 속도차이도 없었기 때문에 text 파일로 저장을 했다. 이 소스에서 @eaDir이라는 폴더를 제외하는 if문이 나오는데 이 폴더는 시놀로지라는 NAS 서버에서 만드는 썸네일 파일을 담아 놓는 디렉토리이고 그 안에 작은 jpg 파일이 들어 있다. 이 작은 파일까지 보여줄 필요가 없기 때문에 제외하도록 코딩을 했다. getRandomPhoto는 함수 이름..
2022.03.26 -
#6 전자액자 프로젝트 - 소스보기 1/2
전자액자 프로젝트의 소스코드는 두 개의 파일로 이루어져 있다. 이번 포스팅에서 보는 소스는 main.py 파일이다. 아래에서 전체 소스코드를 볼 수 있다. github에서 받아도 무방하지만 github가 익숙하지 않은 분들도 있을 수 있으니 아래의 소스를 카피해서 main.py에 복사해 넣으면 된다. 다음 포스팅에서는 PhotoFile.py을 볼 것이다. 이 파일에서 주로 수정을 해야 할 부분은 중의 하나는 DURATION이다. 이것을 조정해서 사진이 바뀌는 간격을 조정할 수 있다. 더 중요한 사항은 PHOTO_FILE_PATH 일텐데 파일을 저장해 놓은 곳의 경로를 적어야 한다. 윈도우 프로그램으로 한다면 C:\나 D:\로 시작하는 경로가 될 것이고 나와 같이 라즈베리파이를 사용한다면 /로 시작하는 경..
2022.03.26 -
#5 전자액자 프로젝트 - 따라하기
재택근무 중이던 금요일 오후, '전자앨범을 만들어 볼까?'해서 만든게 일요일 밤, 월요일 새벽 끝이났다. 이것저것 다듬어야 할 것들이 있지만 당장 사진을 보는데 문제가 없으므로 일단은 두기로 했다. NAS 서버를 스캔해 보면 5만장의 사진이 있음을 알게 되었다. 직접 카메라를 들고 내가 찍은 사진부터 예전 핸드폰으로 찍어 놓은 사진을 백업해 놓은것까지다. 연도별 폴더를 만들고 그 아래에 백업한 날짜와 제목을 같이 써 놓았는데 2000년 부터다. 결혼하고 얼마 되지 않아서 디지털 카메라를 샀고 200만 화소였을 것이다. 그래서 완성한 전자액자는 라즈베리파이와 작은 모니터를 연결해 놓고, 전원이 들어오면 자동으로 프로그램이 실행된다. 프로그램이 실행 될 때마다 NAS에 있는 모든 파일들을 스캔해서 텍스트 파..
2022.03.21