어렸을 적 코흘리개였을 때, 난 피아노 학원에 다녔었다.
아마 체르니 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 변수를 지정했는데 왜 서로 연동되는지 모르겠다.
하나하나씩은 잘 되는데 여러 개를 동시에 누르니 이 사단이 났다.
일단 오늘은 이 정도까지만 진행 후 다음에 더 손을 봐야겠다. 멍청한 파이썬
반응형
'미니 프로젝트 > Python 피아노' 카테고리의 다른 글
[3] Pyiano - 소리 멀티 출력 [끝] (0) | 2021.03.01 |
---|---|
[2] Pyiano - 클릭 시 소리 출력 (0) | 2021.02.24 |