PYQT5: Using a for loop or something else to create many QLabel/QPushButton of the same type

55 Views Asked by At

I'm using PYQT5 to create a GUI to display buttons and labels, and I want an efficient way to create many of the same type but with different names. Currently, I have to copy paste the same code to make each individual button, so my code is unnecessarily long.

Here's what it looks like currently for 8 buttons:

def setupUi(self, HomeWindow):

        if not HomeWindow.objectName():
            HomeWindow.setObjectName(u"HomeWindow")

        mydb = mc.connect(
            host="localhost",
            user="root",
            password='mhm',
            database="cinedeck")
        

        cur = mydb.cursor()
        q = "SELECT movie_name, movie_poster from movies"
        cur.execute(q)
        res = cur.fetchall()

        self.resize(1920, 1080)
        self.centralwidget = QtWidgets.QWidget(HomeWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.label = QLabel(self.centralwidget)
        self.label.setObjectName(u"label")
        self.label.setGeometry(QRect(-20, 10, 291, 101))
        self.label.setPixmap(QPixmap(r"CineDeck\assets\logo.svg"))
        self.label_2 = QLabel(self.centralwidget)
        self.label_2.setObjectName(u"label_2")
        self.label_2.setGeometry(QRect(0, 0, 1920, 150))
        self.label_2.setStyleSheet(u"background-color: rgba(128, 0, 0, 1)")
        self.label_7 = QLabel(self.centralwidget)
        self.label_7.setObjectName(u"label_7")
        self.label_7.setGeometry(QRect(0, 0, 19200, 9300))
        self.label_7.setPixmap(
            QPixmap(r"CineDeck\assets\pure-white-background-85a2a7fd.jpg"))
        self.horizontalWidget = QWidget(self.centralwidget)
        self.horizontalWidget.setObjectName(u"horizontalWidget")
        self.horizontalWidget.setGeometry(QRect(330, 40, 561, 41))
        self.horizontalLayout = QHBoxLayout(self.horizontalWidget)
        self.horizontalLayout.setObjectName(u"horizontalLayout")
        self.label_5 = QLabel(self.horizontalWidget)
        self.label_5.setObjectName(u"label_5")
        self.label_5.setStyleSheet(u"color: rgb(255, 255, 255);")

        self.horizontalLayout.addWidget(self.label_5)
        self.label_3 = QLabel(self.horizontalWidget)
        self.label_3.setObjectName(u"label_3")
        self.label_3.setStyleSheet(u"color: rgb(255, 255, 255);")

        self.horizontalLayout.addWidget(self.label_3)

        self.label_4 = QLabel(self.horizontalWidget)
        self.label_4.setObjectName(u"label_4")
        self.label_4.setStyleSheet(u"color: rgb(255, 255, 255);")

        self.horizontalLayout.addWidget(self.label_4)

        self.label_6 = QLabel(self.horizontalWidget)
        self.label_6.setObjectName(u"label_6")
        self.label_6.setStyleSheet(u"color: rgb(255, 255, 255);")

        self.horizontalLayout.addWidget(self.label_6)

        self._8b = QPushButton(self.centralwidget)
        self._8b.setObjectName(u"label_8")
        self._8b.setGeometry(QRect(20, 530, 230, 50))
        self.label_8 = QLabel(self.centralwidget)
        self.label_8.setObjectName(u"label_8")
        self.label_8.setGeometry(QRect(20, 190, 230, 326))
        self.label_8.setPixmap(
            QPixmap("{}".format(res[0][1])).scaled(230, 326))
        self._9b = QPushButton(self.centralwidget)
        self._9b.setObjectName(u"label_8")
        self._9b.setGeometry(QRect(380, 530, 230, 50))
        self.label_9 = QLabel(self.centralwidget)
        self.label_9.setObjectName(u"label_9")
        self.label_9.setGeometry(QRect(380, 190, 230, 326))
        self.label_9.setPixmap(
            QPixmap("{}".format(res[1][1])).scaled(230, 325).scaled(230, 325))

        self._10b = QPushButton(self.centralwidget)
        self._10b.setObjectName(u"label_8")
        self._10b.setGeometry(QRect(740, 530, 230, 50))
        self.label_10 = QLabel(self.centralwidget)
        self.label_10.setObjectName(u"label_10")
        self.label_10.setGeometry(QRect(740, 190, 230, 326))
        self.label_10.setPixmap(
            QPixmap("{}".format(res[2][1])).scaled(230, 325).scaled(230, 325))
        

        self._11b = QPushButton(self.centralwidget)
        self._11b.setObjectName(u"label_8")
        self._11b.setGeometry(QRect(1100, 530, 230, 50))
        self.label_11 = QLabel(self.centralwidget)
        self.label_11.setObjectName(u"label_11")
        self.label_11.setGeometry(QRect(1100, 190, 230, 326))
        self.label_11.setPixmap(
            QPixmap("{}".format(res[2][1])).scaled(230, 325).scaled(230, 325))

        self._12b = QPushButton(self.centralwidget)
        self._12b.setObjectName(u"label_8")
        self._12b.setGeometry(QRect(1460, 530, 230, 50))
        self.label_12 = QLabel(self.centralwidget)
        self.label_12.setObjectName(u"label_12")
        self.label_12.setGeometry(QRect(1460, 190, 230, 326))
        self.label_12.setPixmap(
            QPixmap("{}".format(res[2][1])).scaled(230, 325).scaled(230, 325))

        self._13b = QPushButton(self.centralwidget)
        self._13b.setObjectName(u"label_8")
        self._13b.setGeometry(QRect(20, 930, 230, 50))
        self.label_13 = QLabel(self.centralwidget)
        self.label_13.setObjectName(u"label_13")
        self.label_13.setGeometry(QRect(20, 590, 230, 326))
        self.label_13.setPixmap(
            QPixmap("{}".format(res[3][1])).scaled(230, 325).scaled(230, 325))

        self._13b = QPushButton(self.centralwidget)
        self._13b.setObjectName(u"label_8")
        self._13b.setGeometry(QRect(380, 930, 230, 50))
        self.label_13 = QLabel(self.centralwidget)
        self.label_13.setObjectName(u"label_13")
        self.label_13.setGeometry(QRect(380, 590, 230, 326))
        self.label_13.setPixmap(
            QPixmap("{}".format(res[4][1])).scaled(230, 325).scaled(230, 325))
        
        self._13b = QPushButton(self.centralwidget)
        self._13b.setObjectName(u"label_8")
        self._13b.setGeometry(QRect(740, 930, 230, 50))
        self.label_13 = QLabel(self.centralwidget)
        self.label_13.setObjectName(u"label_13")
        self.label_13.setGeometry(QRect(740, 590, 230, 326))
        self.label_13.setPixmap(
            QPixmap("{}".format(res[5][1])).scaled(230, 325).scaled(230, 325))
        

        self._13b = QPushButton(self.centralwidget)
        self._13b.setObjectName(u"label_8")
        self._13b.setGeometry(QRect(1100, 930, 230, 50))
        self.label_13 = QLabel(self.centralwidget)
        self.label_13.setObjectName(u"label_13")
        self.label_13.setGeometry(QRect(1100, 590, 230, 326))
        self.label_13.setPixmap(
            QPixmap("{}".format(res[6][1])).scaled(230, 325).scaled(230, 325))
        
        self._13b = QPushButton(self.centralwidget)
        self._13b.setObjectName(u"label_8")
        self._13b.setGeometry(QRect(1460, 930, 230, 50))
        self.label_13 = QLabel(self.centralwidget)
        self.label_13.setObjectName(u"label_13")
        self.label_13.setGeometry(QRect(1460, 590, 230, 326))
        self.label_13.setPixmap(
            QPixmap("{}".format(res[7][1])).scaled(230, 325).scaled(230, 325))


        HomeWindow.setCentralWidget(self.centralwidget)
        self.label_7.raise_()
        self.label_2.raise_()
        self.label.raise_()
        self.horizontalWidget.raise_()

        self.label_8.raise_()
        self.label_8.raise_()
        self.label_9.raise_()
        self.label_10.raise_()
        self._8b.raise_()
        self._9b.raise_()
        #self._10b.raise_()
        #self._10b.raise_()
        #self._10b.raise_()
        #self._10b.raise_()
        #self._10b.raise_()
        #self._10b.raise_()
        #self._10b.raise_()
        #self._10b.raise_()
        #self._10b.raise_()

I have to create around 40-50 buttons, and they have the same properties. They only differ in names and the positioning in the UI (setGeometry(QtCore.QRect()). What's the best way to create this many buttons without just copy and pasting the same code 50 times and changing the name.

I'm not sure how a for loop would work, so any help would be appreciated.

0

There are 0 best solutions below