python/stream deck
stream deck 만들기 - 3
zoomer75
2021. 10. 5. 13:19
지난 글에서 기본 화면은 만들었으니 이번에는 설정 파일 제작과 키보드 이벤트 후킹을 해보도록 하겠습니다.
일단 설정 파일입니다.
프로젝트 아래에 resource 라는 폴더, icon 이라는 폴더를 하나 추가 합니다.
resource 에는 설정 파일을 넣고 , icon 에는 키에 맞는 이미지를( 60px X 60px ) 제작해서 넣어주도록 합니다.
설정파일은 config.ini 라고 만들고 내용은 다음과 같습니다.
{
"1":{
"key" : "f13",
"image":"key1.png",
"type":"text",
"content":"안녕하세요.!!!"
},
"2":{
"key" : "f14",
"image":"key2.png",
"type":"url",
"content":"[https://www.daum.net"](https://www.daum.net")
},
"3":{
"key" : "f15",
"image":"key3.png",
"type":"hotkey",
"content":"ctrl+alt+del"
}
}
json 형태로 만든 다음 resource 폴더에 넣어줍니다.
그리고 키보드 후킹을 위해서
pip install keyboard
하여 키보드 모듈을 설치해 줍니다.
기존 소스에 더해서 전체 소스를 올려드립니다.
import sys
import os
from PyQt5.QtWidgets import \*
from PyQt5.QtGui import \*
from PyQt5.QtCore import Qt
import json
import keyboard
BASE\_DIR = os.path.dirname(os.path.abspath(**file**))
class StreamDeck(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 설정
self.getConfig()
# 버튼 갯수에 맞는 6개의 label 생성
grid = QGridLayout()
self.setLayout(grid)
btnName = 0
for row in range(0,2):
for col in range(0,3):
btnName += 1
btn = QLabel(f'버튼 {btnName}')
btn.setFixedSize(60,60)
btn.setStyleSheet('border-color: #9e9e9e;\nborder-style: solid;\nborder-width: 1px;\nborder-radius: 2px')
btn.setAlignment(Qt.AlignCenter)
try:
if os.path.isfile(BASE_DIR + '/icon/' + self.config[str(btnName)]['image']) :
icon = QPixmap(BASE_DIR + '/icon/' + self.config[str(btnName)]['image'])
btn.setPixmap(icon)
except Exception as e:
pass
grid.addWidget(btn, row, col)
# 윈도우 타이틀
self.setWindowTitle('Stream Deck')
# 윈도우 아이콘 설정
self.setWindowIcon(QIcon(BASE_DIR + '/resource/keyboard.png'))
# 항상위에 표시되게
self.setWindowFlags(Qt.WindowStaysOnTopHint)
# 창 크기 고정 및 위치 이동 ( 우측 하단 )
self.setFixedSize(250, 200)
screen = QDesktopWidget().screenGeometry()
size = self.geometry()
self.move(screen.width() - size.width() - 30, screen.height() - size.height() - 80)
# keyboard hooking 시작
self.setGrabbing(True)
self.show()
def getConfig(self):
with open(BASE_DIR + '/resource/config.ini', 'r', encoding='utf-8') as f:
self.config = json.load(f)
def setGrabbing(self, enable):
if enable:
self.hook = keyboard.on_press(self.keyboardEventReceived)
else:
keyboard.unhook(self.hook)
# see https://github.com/boppreh/keyboard
def keyboardEventReceived(self, event):
for dic in self.config.keys():
if self.config[dic]['key'] == event.name :
if self.config[dic]['type'] == "text" :
keyboard.write(self.config[d]['content'])
elif self.config[dic]['type'] == "url":
os.system('start chrome ' + self.config[d]['content'])
elif self.config[d]['type'] == "hotKey":
keyboard.send(self.config[dic]['content'])
if __name__ == '__main__':
app = QApplication(sys.argv)
sd = StreamDeck()
sys.exit(app.exec\_())
설정에서 type 이 text 인 경우 저장된 내용을 그대로 출력합니다.
url 일 경우 chrome 브라우저로 해당 사이트로 이동합니다.
hodyKey 는 여러 키조합을 실행할 수 있습니다.
(+) 연산자로 여러키를 조합할 수 있습니다.
자세한 문법은 https://github.com/boppreh/keyboard 에서 확인 가능합니다.
실행하셔서 매크로 키보드의 키를 클릭하시면 해당되는 내용이 실행됩니다.
굳이 매크로 키보드가 없으실 경우에도 기존 키보드의 키중에서 잘 사용하지 않는 키를 이용하시면 됩니다.
질문은 댓글을 이용해 주세요.
감사합니다.
반응형