Python Forum
[PyQt] Call object with string
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[PyQt] Call object with string
#1
I am having issues finding the syntax for calling objects by name using a string. My current code finds all the checkboxes that have been selected and takes a portion of their name in order to call the line edit box to get the users text input. This code has been shortened and the only difference between the GUI posted and my in use code is the number of rows.

from PyQt5 import QtCore, QtGui, QtWidgets


class UiMainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        self.setupUi(self)
        self.Next.clicked.connect(self.next)
        self.Back.clicked.connect(self.back)
        self.Finished.clicked.connect(self.finished)

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1389, 910)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
        self.tabWidget.setGeometry(QtCore.QRect(0, 0, 1381, 891))
        self.tabWidget.setObjectName("tabWidget")
        self.Formulations = QtWidgets.QWidget()
        self.Formulations.setObjectName("Formulations")
        self.gridLayoutWidget = QtWidgets.QWidget(self.Formulations)
        self.gridLayoutWidget.setGeometry(QtCore.QRect(0, 0, 1371, 841))
        self.gridLayoutWidget.setObjectName("gridLayoutWidget")
        self.FormulationGrid = QtWidgets.QGridLayout(self.gridLayoutWidget)
        self.FormulationGrid.setContentsMargins(0, 0, 0, 0)
        self.FormulationGrid.setObjectName("FormulationGrid")
        self.FormulationName01 = QtWidgets.QLineEdit(self.gridLayoutWidget)
        self.FormulationName01.setObjectName("FormulationName01")
        self.FormulationGrid.addWidget(self.FormulationName01, 0, 2, 1, 1)
        self.Formulation01 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.Formulation01.setText("")
        self.Formulation01.setObjectName("Formulation01")
        self.FormulationGrid.addWidget(self.Formulation01, 0, 1, 1, 1)
        self.Formulation02 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.Formulation02.setText("")
        self.Formulation02.setObjectName("Formulation02")
        self.FormulationGrid.addWidget(self.Formulation02, 1, 1, 1, 1)
        self.Lot01 = QtWidgets.QLineEdit(self.gridLayoutWidget)
        self.Lot01.setObjectName("Lot01")
        self.FormulationGrid.addWidget(self.Lot01, 0, 3, 1, 1)
        self.Lot02 = QtWidgets.QLineEdit(self.gridLayoutWidget)
        self.Lot02.setObjectName("Lot02")
        self.FormulationGrid.addWidget(self.Lot02, 1, 3, 1, 1)
        self.FormulationName02 = QtWidgets.QLineEdit(self.gridLayoutWidget)
        self.FormulationName02.setObjectName("FormulationName02")
        self.FormulationGrid.addWidget(self.FormulationName02, 1, 2, 1, 1)
        self.Row02 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.Row02.setObjectName("Row02")
        self.FormulationGrid.addWidget(self.Row02, 1, 0, 1, 1)
        self.Row01 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.Row01.setObjectName("Row01")
        self.FormulationGrid.addWidget(self.Row01, 0, 0, 1, 1)
        self.Next = QtWidgets.QPushButton(self.Formulations)
        self.Next.setGeometry(QtCore.QRect(1280, 830, 91, 31))
        self.Next.setObjectName("Next")
        self.tabWidget.addTab(self.Formulations, "")
        self.StabilitySchedule = QtWidgets.QWidget()
        self.StabilitySchedule.setObjectName("StabilitySchedule")
        self.gridLayoutWidget_2 = QtWidgets.QWidget(self.StabilitySchedule)
        self.gridLayoutWidget_2.setGeometry(QtCore.QRect(0, 0, 1371, 821))
        self.gridLayoutWidget_2.setObjectName("gridLayoutWidget_2")
        self.StabilityScheduleGrid = QtWidgets.QGridLayout(self.gridLayoutWidget_2)
        self.StabilityScheduleGrid.setContentsMargins(0, 0, 0, 0)
        self.StabilityScheduleGrid.setObjectName("StabilityScheduleGrid")
        self._25C01 = QtWidgets.QCheckBox(self.gridLayoutWidget_2)
        self._25C01.setObjectName("_25C01")
        self.StabilityScheduleGrid.addWidget(self._25C01, 0, 4, 1, 1)
        self._30C01 = QtWidgets.QCheckBox(self.gridLayoutWidget_2)
        self._30C01.setObjectName("_30C01")
        self.StabilityScheduleGrid.addWidget(self._30C01, 0, 5, 1, 1)
        self._60C01 = QtWidgets.QCheckBox(self.gridLayoutWidget_2)
        self._60C01.setObjectName("_60C01")
        self.StabilityScheduleGrid.addWidget(self._60C01, 0, 8, 1, 1)
        self.TimePoint02 = QtWidgets.QCheckBox(self.gridLayoutWidget_2)
        self.TimePoint02.setText("")
        self.TimePoint02.setObjectName("TimePoint02")
        self.StabilityScheduleGrid.addWidget(self.TimePoint02, 1, 0, 1, 1)
        self._40C01 = QtWidgets.QCheckBox(self.gridLayoutWidget_2)
        self._40C01.setObjectName("_40C01")
        self.StabilityScheduleGrid.addWidget(self._40C01, 0, 6, 1, 1)
        self._50C01 = QtWidgets.QCheckBox(self.gridLayoutWidget_2)
        self._50C01.setObjectName("_50C01")
        self.StabilityScheduleGrid.addWidget(self._50C01, 0, 7, 1, 1)
        self._5C01 = QtWidgets.QCheckBox(self.gridLayoutWidget_2)
        self._5C01.setObjectName("_5C01")
        self.StabilityScheduleGrid.addWidget(self._5C01, 0, 3, 1, 1)
        self.M20C01 = QtWidgets.QCheckBox(self.gridLayoutWidget_2)
        self.M20C01.setObjectName("M20C01")
        self.StabilityScheduleGrid.addWidget(self.M20C01, 0, 2, 1, 1)
        self.TimePoint01 = QtWidgets.QCheckBox(self.gridLayoutWidget_2)
        self.TimePoint01.setText("")
        self.TimePoint01.setObjectName("TimePoint01")
        self.StabilityScheduleGrid.addWidget(self.TimePoint01, 0, 0, 1, 1)
        self.TimePointLabel01 = QtWidgets.QLineEdit(self.gridLayoutWidget_2)
        self.TimePointLabel01.setObjectName("TimePointLabel01")
        self.StabilityScheduleGrid.addWidget(self.TimePointLabel01, 0, 1, 1, 1)
        self.TimePointLabel02 = QtWidgets.QLineEdit(self.gridLayoutWidget_2)
        self.TimePointLabel02.setObjectName("TimePointLabel02")
        self.StabilityScheduleGrid.addWidget(self.TimePointLabel02, 1, 1, 1, 1)
        self.M20C02 = QtWidgets.QCheckBox(self.gridLayoutWidget_2)
        self.M20C02.setObjectName("M20C02")
        self.StabilityScheduleGrid.addWidget(self.M20C02, 1, 2, 1, 1)
        self._30C02 = QtWidgets.QCheckBox(self.gridLayoutWidget_2)
        self._30C02.setObjectName("_30C02")
        self.StabilityScheduleGrid.addWidget(self._30C02, 1, 5, 1, 1)
        self._5C02 = QtWidgets.QCheckBox(self.gridLayoutWidget_2)
        self._5C02.setObjectName("_5C02")
        self.StabilityScheduleGrid.addWidget(self._5C02, 1, 3, 1, 1)
        self._60C02 = QtWidgets.QCheckBox(self.gridLayoutWidget_2)
        self._60C02.setObjectName("_60C02")
        self.StabilityScheduleGrid.addWidget(self._60C02, 1, 8, 1, 1)
        self._50C02 = QtWidgets.QCheckBox(self.gridLayoutWidget_2)
        self._50C02.setObjectName("_50C02")
        self.StabilityScheduleGrid.addWidget(self._50C02, 1, 7, 1, 1)
        self._40C02 = QtWidgets.QCheckBox(self.gridLayoutWidget_2)
        self._40C02.setObjectName("_40C02")
        self.StabilityScheduleGrid.addWidget(self._40C02, 1, 6, 1, 1)
        self._25C02 = QtWidgets.QCheckBox(self.gridLayoutWidget_2)
        self._25C02.setObjectName("_25C02")
        self.StabilityScheduleGrid.addWidget(self._25C02, 1, 4, 1, 1)
        self.VialsPerTimePoint02 = QtWidgets.QLineEdit(self.gridLayoutWidget_2)
        self.VialsPerTimePoint02.setObjectName("VialsPerTimePoint02")
        self.StabilityScheduleGrid.addWidget(self.VialsPerTimePoint02, 1, 9, 1, 1)
        self.VialsPerTimePoint01 = QtWidgets.QLineEdit(self.gridLayoutWidget_2)
        self.VialsPerTimePoint01.setObjectName("VialsPerTimePoint01")
        self.StabilityScheduleGrid.addWidget(self.VialsPerTimePoint01, 0, 9, 1, 1)
        self.Finished = QtWidgets.QPushButton(self.StabilitySchedule)
        self.Finished.setGeometry(QtCore.QRect(1284, 832, 81, 31))
        self.Finished.setObjectName("Finished")
        self.Back = QtWidgets.QPushButton(self.StabilitySchedule)
        self.Back.setGeometry(QtCore.QRect(1194, 832, 81, 31))
        self.Back.setObjectName("Back")
        self.tabWidget.addTab(self.StabilitySchedule, "")
        self.layoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.layoutWidget.setGeometry(QtCore.QRect(0, 0, 2, 2))
        self.layoutWidget.setObjectName("layoutWidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.layoutWidget)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        self.tabWidget.setCurrentIndex(1)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.Row02.setText(_translate("MainWindow", "2"))
        self.Row01.setText(_translate("MainWindow", "1"))
        self.Next.setText(_translate("MainWindow", "Next"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.Formulations), _translate("MainWindow", "Formulations"))
        self._25C01.setText(_translate("MainWindow", "25C"))
        self._30C01.setText(_translate("MainWindow", "30C"))
        self._60C01.setText(_translate("MainWindow", "60C"))
        self._40C01.setText(_translate("MainWindow", "40C"))
        self._50C01.setText(_translate("MainWindow", "50C"))
        self._5C01.setText(_translate("MainWindow", "5C"))
        self.M20C01.setText(_translate("MainWindow", "-20C"))
        self.M20C02.setText(_translate("MainWindow", "-20C"))
        self._30C02.setText(_translate("MainWindow", "30C"))
        self._5C02.setText(_translate("MainWindow", "5C"))
        self._60C02.setText(_translate("MainWindow", "60C"))
        self._50C02.setText(_translate("MainWindow", "50C"))
        self._40C02.setText(_translate("MainWindow", "40C"))
        self._25C02.setText(_translate("MainWindow", "25C"))
        self.Finished.setText(_translate("MainWindow", "Finished"))
        self.Back.setText(_translate("MainWindow", "Back"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.StabilitySchedule), _translate("MainWindow", "Stability Schedule"))

    def next(self):
        self.tabWidget.setCurrentIndex(0)

    def back(self):
        self.tabWidget.setCurrentIndex(0)
    
    def finished(self):
        # Finds all QCheckBox Objects with 'Formulation' in the name and returns 2 if checked
        for cb in self.findChildren(QtWidgets.QCheckBox):
            if "Formulation" in cb.objectName() and cb.checkState() == 2: # 2 = Checked Box

                string = 'FormulationName' + cb.objectName()[11:]
                code_string = 'self.' + string + .text()
                print(code_string)


                print(f'{cb.objectName()}:{cb.checkState()}')
                

        # Finds all QCheckBox Objects with 'checkBox' in the name and returns 2 if checked
        for cb in self.findChildren(QtWidgets.QCheckBox):
            if "TimePoint" in cb.objectName() and cb.checkState() == 2: # 2 = Checked Box
                print(f'{cb.objectName()}:{cb.checkState()}')
        

        self.end()
    
    @staticmethod
    def end():
        exit(app.exec_())


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = UiMainWindow()
    MainWindow.show()
    sys.exit(app.exec_())
Error:
Traceback (most recent call last): File "C:\Users\02260235\AppData\Local\Programs\Python\Python38-32\lib\runpy.py", line 194, in _run_module_as_main File "C:\Users\02260235\AppData\Local\Programs\Python\Python38-32\lib\runpy.py", line 87, in _run_code File "c:\Users\02260235\.vscode\extensions\ms-python.python-2020.9.114305\pythonFiles\lib\python\debugpy\__main__.py", line 45, in <module> File "c:\Users\02260235\.vscode\extensions\ms-python.python-2020.9.114305\pythonFiles\lib\python\debugpy/..\debugpy\server\cli.py", line 430, in main File "c:\Users\02260235\.vscode\extensions\ms-python.python-2020.9.114305\pythonFiles\lib\python\debugpy/..\debugpy\server\cli.py", line 267, in run_file File "C:\Users\02260235\AppData\Local\Programs\Python\Python38-32\lib\runpy.py", line 264, in run_path File "C:\Users\02260235\AppData\Local\Programs\Python\Python38-32\lib\runpy.py", line 239, in _get_code_from_file File "c:\Users\02260235\Downloads\Test App\StabilityTestShort.py", line 187 code_string = 'self.' + string + .text() ^ SyntaxError: invalid syntax
The error comes from the Finished function and I haven't been able to implent anything that works.

Thanks in advance for any help offered.
Reply


Messages In This Thread
Call object with string - by PEGylated_User - Oct-27-2020, 05:44 PM
RE: Call object with string - by ndc85430 - Oct-27-2020, 06:10 PM
RE: Call object with string - by PEGylated_User - Oct-27-2020, 06:23 PM
RE: Call object with string - by Axel_Erfurt - Oct-27-2020, 06:50 PM
RE: Call object with string - by deanhystad - Oct-27-2020, 09:36 PM

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020