MapleStory Finger Point

미니 프로젝트/Python 피아노

[1] Pyiano - Ui 제작

吳鍾振 2021. 2. 23. 23:27

어렸을 적 코흘리개였을 때, 난 피아노 학원에 다녔었다.

아마 체르니 90번까지 배웠던 기억이 난다.

그렇다.

체르니 90번은 없다.

그렇기 때문에 파이썬으로 피아노를 만들어 보려고 한다.

먼저 Qt Designer를 실행하여 기본 Ui 틀을 제작한다. 

깨알 그림판 그림 추가

ui파일을 다 제작하였으면 이제 파이썬 파일로 변환해준다.

pyuic5 -x pyiano.ui -o pyiano.py

위의 명령을 cmd에서 실행해준다.

그럼 이제 이벤트 처리를 할 코드를 작성해야 한다.

import sys
from PyQt5 import QtWidgets, QtGui, QtCore
from pyiano import Ui_MainWindow


class Pyiano(Ui_MainWindow):
    def __init__(self):
        super().__init__()

    def setupUi(self, MainWindow: QtWidgets.QMainWindow):
        super().setupUi(MainWindow)
        self.C.mousePressEvent = self.click_C
        self.D.mousePressEvent = self.click_D
        self.E.mousePressEvent = self.click_E
        self.F.mousePressEvent = self.click_F
        self.G.mousePressEvent = self.click_G
        self.A.mousePressEvent = self.click_A
        self.B.mousePressEvent = self.click_B
        self.CC.mousePressEvent = self.click_CC
        self.DD.mousePressEvent = self.click_DD
        self.EE.mousePressEvent = self.click_EE

    def click_C(self, event):
        self.C.setStyleSheet("background-color: #d1d1d1;")
        loop_C = QtCore.QEventLoop()
        QtCore.QTimer.singleShot(1000, loop_c.quit)
        loop_C.exec_()
        self.C.setStyleSheet("background-color: #ffffff")

    .
    .
    .

    def click_EE(self, event):
        self.EE.setStyleSheet("background-color: #d1d1d1;")
        loop_EE = QtCore.QEventLoop()
        QtCore.QTimer.singleShot(1000, loop_EE.quit)
        loop_EE.exec_()
        self.EE.setStyleSheet("background-color: #ffffff")


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Pyiano()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

코드가 너무 길기도 하고, 중반에 생략한 부분은 어차피 반복되는 부분이라 다 쓰지는 않았다.

하지만 문제가 있었다.

우선은 테스트 중이기 때문에 마우스 이벤트로 동작하게끔 만들었다.

또한 클릭된 걸 시각적으로 볼 수 있도록 1초 동안 누르고 있는 듯한 느낌이 드는 듯하게 색상 변경까지 완료했는데,

망할 루프 문들이 서로 연동된다.

건반 하나하나씩 다른 loop 변수를 지정했는데 왜 서로 연동되는지 모르겠다.

하나하나씩은 잘 되는데 여러 개를 동시에 누르니 이 사단이 났다.

일단 오늘은 이 정도까지만 진행 후 다음에 더 손을 봐야겠다. 멍청한 파이썬

 

1시간만에 후딱 만든 Pyiano 데모판

 

반응형