2022-03-16 20:39:21
야구 중계를 보면 보통 시청자들에게 스트라이크 존에 대한 정보를 주기 위해 사각형 가이드가 함께 송출됩니다. 그런데 간혹 어떤 중계에서는 그러한 가이드가 없는 경우가 있습니다. 이런 경우에는 시청의 재미가 반갑됩니다.
저는 이런 경우를 위해서 pyqt를 이용하여 간단한 프로그램을 만들어봤습니다(예전에 심심풀이로 만들어봤는데, 이제야 공유해봅니다). 우선 설치 필요한 패키지는 pyqt5와 pyinstaller입니다.
pip install pyqt5
pip install pyinstaller
파이썬 소스코드는 다음과 같습니다.
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QSlider, QDialog, QPushButton, QHBoxLayout, QVBoxLayout
from PyQt5.QtGui import QPainter, QPen, QColor, QBrush, QIcon, QPixmap
from PyQt5.QtCore import QCoreApplication, Qt, QPoint
import icon
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.stzw = 200
self.stzh = 200
self.initUI()
def changeStzW(self):
self.stzw = self.slider1.value()
print(self.stzw)
self.resize(self.stzw, self.stzh)
def changeStzH(self):
self.stzh = self.slider2.value()
print(self.stzh)
self.resize(self.stzw, self.stzh)
def initUI(self):
self.slider1 = QSlider(Qt.Horizontal, self)
self.slider1.setRange(100, 500)
self.slider1.setValue(200)
self.slider1.setSingleStep(2)
self.slider2 = QSlider(Qt.Vertical, self)
self.slider2.setRange(100, 500)
self.slider2.setInvertedAppearance(True)
self.slider2.setValue(200)
self.slider2.setSingleStep(2)
self.slider1.valueChanged.connect(self.changeStzW)
self.slider2.valueChanged.connect(self.changeStzH)
self.button = QPushButton('close', self)
self.button.clicked.connect(QCoreApplication.instance().quit)
self.button.move(30, 30)
self.button.setStyleSheet("background-color: rgba(0, 0, 0, 0.1); color: white; font-weight: bold;")
self.button.resize(60, 30)
self.setWindowTitle('STZONE v1.0')
self.setWindowIcon(QIcon(':/icon.png'))
self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)
self.setAttribute(Qt.WA_TranslucentBackground, True)
self.move(300, 300)
self.resize(self.stzw, self.stzh)
self.show()
def mousePressEvent(self, event):
self.oldPos = event.globalPos()
def mouseMoveEvent(self, event):
delta = QPoint(event.globalPos() - self.oldPos)
self.move(self.x() + delta.x(), self.y() + delta.y())
self.oldPos = event.globalPos()
def paintEvent(self, e):
qp = QPainter()
qp.begin(self)
self.draw_rect(qp)
qp.end()
def draw_rect(self, qp):
qp.setBrush(QColor(0, 0, 0, 0))
qp.setPen(QPen(QColor(255, 0, 0), 5))
qp.drawRect(int(self.width()/3), int(self.height()/3), int(self.width()/3), int(self.height()/3))
qp.setPen(QPen(Qt.red, 2))
qp.drawLine(int(self.width()/3), int(4*self.height()/9), int(2 * self.width()/3), int(4*self.height()/9))
qp.setPen(QPen(Qt.red, 2))
qp.drawLine(int(self.width()/3), int(5*self.height()/9), int(2 * self.width()/3), int(5*self.height()/9))
qp.setPen(QPen(Qt.red, 2))
qp.drawLine(int(4*self.width()/9), int(self.height()/3), int(4 * self.width()/9), int(2*self.height()/3))
qp.setPen(QPen(Qt.red, 2))
qp.drawLine(int(5*self.width()/9), int(self.height()/3), int(5 * self.width()/9), int(2*self.height()/3))
if __name__ == '__main__':
app = QApplication(sys.argv)
STZone = MyApp()
sys.exit(app.exec_())
그리고 pyinstaller를 이용해서 빌드할 때 사용한 명령어는 다음과 같습니다.
pyinstaller --onefile --noconsole --icon=icon.ico --add-data="icon.ico;." -n="STZone v1.0" stzone.py
릴리즈된 프로그램을 다운로드받고 싶으신 분들은 https://github.com/kyohoonsim/stzone에서 우측 Releases에서 STZone v1.0을 클릭하신 후 STZone.v1.0.exe를 클릭하시면 됩니다.
사용법은 아이콘을 더블클릭하여 프로그램을 실행한 후에 중계 화면 위에 올려놓고 적절하게 사이즈 조정하면 됩니다.
간단한 프로그램이지만 심판이 제대로 스트라이크 판정을 하고 있는지 살펴볼 때 도움이 되더라고요. 이 프로그램이 마음에 드신 분들은 제 깃헙에 별 하나 남겨주세요^^
'코딩 > pyqt, pyside' 카테고리의 다른 글
[PySide6] QLabel 수평 가운데에 배치하기 (0) | 2022.07.23 |
---|---|
[PySide6] QLineEdit 위젯에 placeholder 넣는 방법 (0) | 2022.07.22 |
[PySide6] config.ini 설정값 읽고 변경하는 방법 (0) | 2022.07.07 |
[pyside6] 창 타이틀바에서 닫기 버튼, 최소화 버튼, 최대화 버튼 등을 비활성화 되게 하려면? (0) | 2022.06.07 |
[pyqt5] 야구 중계에 스트라이크 존이 제공되지 않을 때 시청자를 위한 가이드 앱 (2) | 2022.03.16 |
[pyside6] QLabel에 이미지 넣을 때 종횡비(aspect ratio) 설정 (2) | 2022.02.27 |
[pyside6] 위젯 내 글자 크기를 변경하고 싶을 때 (0) | 2022.02.26 |
[pyside6] QThreadPool을 이용해서 몇 개의 스레드가 활성화되어 있는지 확인하기 (0) | 2022.02.25 |
[PySide6] DeprecationWarning: Fuction: 'globalPos() const' is marked as deprecated 경고 메시지 출력 안되게 하기 (0) | 2021.11.29 |
이동버튼 하나 만들어서 그 버튼을 눌러서 이동하게 해줘.
빨간선이나 크기조절바 눌러서 이동시키기 힘듬
미세 조정을 위해 방향키 입력으로 조정도 가능하면 좋을듯 주소 수정/삭제 답글