I am attempting to create a GUI keyboard. I am using QPushButton to replicate the keys. I am not focusing on linking it to MIDI yet. However, I was wondering if it is possible to create a Class using properties of QPushButton. By that I mean functions such as QPushButton.move/resize/setStyleSheet.
As it currently stands, my code is very long (Shown below). This is due to constant repetition of code to make each button. However, I have noticed that properties such as size, stylesheet and location (only on the y-axis) are the same, with the main difference being the x-axis and the y-axis between the black and white keys. If I were to make a class, how would I able to create objects with various properties?
Once again, if my logic is flawed or I have made any errors, please feel free to let me know.
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QPushButton, QAction, QLineEdit, QMessageBox, QLabel \
,QDialog
from PyQt5.QtGui import QIcon, QHideEvent, QFont, QPixmap
from PyQt5.QtCore import pyqtSlot, QObject, QSize
class App(QMainWindow):
def __init__(self):
super().__init__()
self.title = 'Piano '
self.left = 620
self.top =250
self.width = 1920
self.height = 1080
self.initUI()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
self.setFixedWidth(self.width)
self.setFixedHeight(self.height)
self.setStyleSheet("background-color:lightgrey")
self.setWindowIcon(QIcon('img.png'))
# Create a button in the window
self.button1 = QPushButton('C', self)
self.button1.move(10, 650)
self.button1.setFont(QFont('Arial', 14))
self.button1.resize(100,400)
self.button1.setStyleSheet("background-color:white; border :1px solid ;") #Black Not Working
self.button2 = QPushButton('D', self)
self.button2.move(110,650)
self.button2.setFont(QFont('Arial', 14))
self.button2.resize(100, 400)
self.button2.setStyleSheet("background-color:white; border :1px solid ;")
self.button3 = QPushButton('E', self)
self.button3.move(210, 650)
self.button3.setFont(QFont('Arial', 14))
self.button3.resize(100, 400)
self.button3.setStyleSheet("background-color:white; border :1px solid ;")
self.button4 = QPushButton('F', self)
self.button4.move(310, 650)
self.button4.setFont(QFont('Arial', 14))
self.button4.resize(100, 400)
self.button4.setStyleSheet("background-color:white; border :1px solid ;")
self.button5 = QPushButton('G', self)
self.button5.move(410, 650)
self.button5.setFont(QFont('Arial', 14))
self.button5.resize(100, 400)
self.button5.setStyleSheet("background-color:white; border :1px solid ;")
self.button6 = QPushButton('A', self)
self.button6.move(510, 650)
self.button6.setFont(QFont('Arial', 14))
self.button6.resize(100, 400)
self.button6.setStyleSheet("background-color:white; border :1px solid ;")
self.button7 = QPushButton('B', self)
self.button7.move(610, 650)
self.button7.setFont(QFont('Arial', 14))
self.button7.resize(100, 400)
self.button7.setStyleSheet("background-color:white; border :1px solid ;")
self.button8 = QPushButton('C2', self)
self.button8.move(710, 650)
self.button8.setFont(QFont('Arial', 14))
self.button8.resize(100, 400)
self.button8.setStyleSheet("background-color:white; border :1px solid ;")
self.button2 = QPushButton('D2', self)
self.button2.move(810, 650)
self.button2.setFont(QFont('Arial', 14))
self.button2.resize(100, 400)
self.button2.setStyleSheet("background-color:white; border :1px solid ;")
self.button3 = QPushButton('E2', self)
self.button3.move(910, 650)
self.button3.setFont(QFont('Arial', 14))
self.button3.resize(100, 400)
self.button3.setStyleSheet("background-color:white; border :1px solid ;")
self.button4 = QPushButton('F2', self)
self.button4.move(1010, 650)
self.button4.setFont(QFont('Arial', 14))
self.button4.resize(100, 400)
self.button4.setStyleSheet("background-color:white; border :1px solid ;")
self.button5 = QPushButton('G2', self)
self.button5.move(1110, 650)
self.button5.setFont(QFont('Arial', 14))
self.button5.resize(100, 400)
self.button5.setStyleSheet("background-color:white; border :1px solid ;")
self.button6 = QPushButton('A2', self)
self.button6.move(1210, 650)
self.button6.setFont(QFont('Arial', 14))
self.button6.resize(100, 400)
self.button6.setStyleSheet("background-color:white; border :1px solid ;")
self.button7 = QPushButton('B2', self)
self.button7.move(1310, 650)
self.button7.setFont(QFont('Arial', 14))
self.button7.resize(100, 400)
self.button7.setStyleSheet("background-color:white; border :1px solid ;")
self.button8 = QPushButton('C3', self)
self.button8.move(1410, 650)
self.button8.setFont(QFont('Arial', 14))
self.button8.resize(100, 400)
self.button8.setStyleSheet("background-color:white; border :1px solid ;")
self.button1up = QPushButton('C#', self)
self.button1up.move(85, 650)
self.button1up.setFont(QFont('Arial', 14))
self.button1up.resize(50, 300)
self.button1up.setStyleSheet("background-color:black; border :1px solid ;")
self.button2up = QPushButton('D#', self)
self.button2up.move(185, 650)
self.button2up.setFont(QFont('Arial', 14))
self.button2up.resize(50, 300)
self.button2up.setStyleSheet("background-color:black; border :1px solid ;")
self.button3up = QPushButton('F#', self)
self.button3up.move(385, 650)
self.button3up.setFont(QFont('Arial', 14))
self.button3up.resize(50, 300)
self.button3up.setStyleSheet("background-color:black; border :1px solid ;")
self.button4up = QPushButton('G#', self)
self.button4up.move(485, 650)
self.button4up.setFont(QFont('Arial', 14))
self.button4up.resize(50, 300)
self.button4up.setStyleSheet("background-color:black; border :1px solid ;")
self.button5up = QPushButton('A#', self)
self.button5up.move(585, 650)
self.button5up.setFont(QFont('Arial', 14))
self.button5up.resize(50, 300)
self.button5up.setStyleSheet("background-color:black; border :1px solid ;")
self.button6up = QPushButton(self)
self.button6up.move(785, 650)
self.button6up.setFont(QFont('Arial', 14))
self.button6up.resize(50, 300)
self.button6up.setStyleSheet("background-color:black; border :1px solid ;")
self.button7up = QPushButton(self)
self.button7up.move(885, 650)
self.button7up.setFont(QFont('Arial', 14))
self.button7up.resize(50, 300)
self.button7up.setStyleSheet("background-color:black; border :1px solid ;")
self.button8up = QPushButton(self)
self.button8up.move(1085, 650)
self.button8up.setFont(QFont('Arial', 14))
self.button8up.resize(50, 300)
self.button8up.setStyleSheet("background-color:black; border :1px solid ;")
self.button9up = QPushButton(self)
self.button9up.move(1185, 650)
self.button9up.setFont(QFont('Arial', 14))
self.button9up.resize(50, 300)
self.button9up.setStyleSheet("background-color:black; border :1px solid ;")
self.button10up = QPushButton(self)
self.button10up.move(1285, 650)
self.button10up.setFont(QFont('Arial', 14))
self.button10up.resize(50, 300)
self.button10up.setStyleSheet("background-color:black; border :1px solid ;")
# connect button to function on_click
self.button1.clicked.connect(self.b1)
self.show()
@pyqtSlot()
def b1(self):
pass
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
sys.exit(app.exec_())