class – How to send signals/variables between a QDialog and Main Window

I am currently working on a project that involves graphing text file data into a pyqt graph and I have been running into problems with a subclass QDialog box. My goal is to have the QDialog box use a combox to choose between different data sets to graph (The code below shows the “steering angle” setting being chosen). The problem lies with how to make it so that when the Create Graph button is pressed (Found in the QDialog Class), it runs the createGraph(self): function in the main class. I dont know how to work classes that well so I dont know how to make this work.

If anyone has any pointers on either how to get this working, how to properly structure a PYQT Program or how to make it more efficient, I’m all ears.

Thank you for your time!

Main Window Code:

class MainWidget(QMainWindow):
    def __init__(self, parent=None):
        super(MainWidget, self).__init__(parent)
        self.activateWindow()
        self.raise_()
        self.setupGraph()

        self.dockcheck = 0
        self.graphcheck = 0

        self.setWindowTitle("Drag and Drop Test")
        self.resize(1200, 800)

        self.setAcceptDrops(True)

        self.LBLDragAndDrop = QLabel("Drag And Drop Files Here")
        self.LBLDragAndDrop.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)

        if self.graphcheck == 0:
            self.setCentralWidget(self.LBLDragAndDrop)

        self.path3 = "C:\Users\steph\OneDrive\Documents\SAA Wing\Coding\Can Bus Data Reading\Temporary Saves"

        self.treeview = QTreeView()
        self.treeview.setAnimated(True)

        self.fileModel = QFileSystemModel()
        self.fileModel.setRootPath(self.path3)
        self.indexRoot = self.fileModel.index(self.fileModel.rootPath())

        self.treeview.setModel(self.fileModel)
        self.treeview.setRootIndex(self.fileModel.index(self.path3))
        self.treeview.setColumnWidth(0, 250)

        self.treeview.doubleClicked.connect(self.onSelectionChanged)
        #self.treeview.doubleClicked.connect(self.openDialog)

       

    ####################################################################################################################
    # Dialog Box
    ####################################################################################################################

    def onSelectionChanged(self, index):
        self.selectionPath = self.sender().model().filePath(index)

        self.selectionFilename = (self.selectionPath.split("/")[-1])


        IDList = ("ID 00d0","ID 00d1","ID 00d3","ID 00d4","ID 0140","ID 0141","ID 0360","ID 0361")

        if self.selectionFilename in IDList:

            if self.selectionFilename == "ID 00d0":
                editDialog = Dialog00d0()
                editDialog.exec_()

####################################################################################################################
    # Graphing data
    ####################################################################################################################

    def createGraph(self):
        self.graphcheck = 1

        if self.graphcheck == 1:
            self.setCentralWidget(self.scroll_area)

        ################################################################################################################
        # ID 00D0 Creating Graph
        ################################################################################################################

        if self.selectionFilename == "ID 00d0":
            self.df00d0 = pd.read_table(self.selectionPath, header=None , delim_whitespace=True, dtype=object)
            self.df00d0.columns = ['Timestamp','ID',"B0","B1","B2","B3","B4","B5","B6","B7"]
            self.df00d0.dropna(inplace=True)

            self.SA = np.array([], dtype=float)
            self.LatAcc = np.array([], dtype=float)
            self.LonAcc = np.array([], dtype=float)
            self.ComAcc = np.array([], dtype=float)
            self.Time00d0 = np.array([], dtype=float)
            self.Timestamp00d0 = np.array([], dtype=float)

            ############################################################################################################
            # Getting Time Stamps
            ############################################################################################################

            for item in self.df00d0['Timestamp']:
                self.Time00d0 = np.append(self.Time00d0, datetime.fromtimestamp(float(item)).strftime("%H:%M:%S.%f")[:-4])
                self.Timestamp00d0 = np.append(self.Timestamp00d0, float(item))
 
 ############################################################################################################
            # Steering Angle Graph
            ############################################################################################################

            if self.combobox00d0.currentText() == "Steering Angle":

                SA_ = (((self.df00d0['B1']) + (self.df00d0['B0'])).apply(int, base=16) * 0.1)

                for item in SA_:
                    if item > 6000:
                        self.SA = np.append(self.SA, round((item - 6553.6), 1))
                    else:
                        self.SA = np.append(self.SA, round(item))

                y_value = self.SA

Here is the QDialog Box class code:

class Dialog00d0(QDialog):
    def __init__(self):
        super().__init__()

        self.layout = QVBoxLayout()
        hlay = QHBoxLayout()
        self.setLayout(self.layout)

        self.setWindowTitle("Create Graph")

        label = QLabel("Data Type")

        self.combobox00d0 = QComboBox()
        self.combobox00d0.addItem("Steering Angle")
        self.combobox00d0.addItem("Latitudinal Acceleration")
        self.combobox00d0.addItem("Longitudinal Acceleration")
        self.combobox00d0.addItem("Combined Acceleration")

        self.BTNCreateGraph = QPushButton("Create Graph")
        self.BTNCancel = QPushButton("Cancel")

        hlay.addWidget(self.BTNCreateGraph)
        hlay.addWidget(self.BTNCancel)

        self.layout.addWidget(label)
        self.layout.addWidget(self.combobox00d0)
        self.layout.addLayout(hlay)

        self.BTNCreateGraph.clicked.connect("I need the self.creatGraph here")

        self.BTNCancel.clicked.connect("self.close")

Leave a Comment