1 year ago

#293184

test-img

jerev7

PySide2 QDialog Window button is clicked once when window opens then doesn't work

I'm using a QDialog to open a new window in my application. It works fine but the button I added on that new window is not working, it is clicked once when the window opens then it doesn't work. I can't figure out what I am doing wrong. I hope someone can help. Here is my main window code :

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Data Analyse Program")
        self.layout = QVBoxLayout()


        self.label = QLabel("Selectionnez le type de fichier à analyser")
        self.button_folder = QPushButton("Dossiers")
        self.button_bill = QPushButton("Factures")
        self.button_back = QPushButton("Retour")
        
        self.layout.addWidget(self.label)
        self.layout.addWidget(self.button_folder)
        self.layout.addWidget(self.button_bill)
        
        
        self.container1 = QWidget()
        self.container1.setLayout(self.layout)

        self.setCentralWidget(self.container1)
        self.button_folder.clicked.connect(self.folder_was_clicked)
        self.button_bill.clicked.connect(self.bill_was_clicked)
        # self.resize(640, 480)
    
    def folder_was_clicked(self):
        self.label_folder = QLabel("Cliquez ci-dessous pour choisir un fichier un excel")
        self.button_open_file = QPushButton("Select")
        self.button_back = QPushButton("Retour")
        list_of_widgets = [self.label, self.button_folder, self.button_bill]
        for widget_to_remove in list_of_widgets:
            self.layout.removeWidget(widget_to_remove)
            widget_to_remove.deleteLater()
            widget_to_remove = None

        
        self.layout.addWidget(self.label_folder)
        self.layout.addWidget(self.button_open_file)
        self.layout.addWidget(self.button_back)
        self.button_back.clicked.connect(self.back_to_menu)
        self.button_open_file.clicked.connect(self.open_resultat)
        self.setWindowTitle("Folder Analyse")



    def bill_was_clicked(self):
        self.label_folder = QLabel("Cliquez ci-dessous pour choisir un fichier un excel")
        self.button_open_file = QPushButton("Select")
        self.button_back = QPushButton("Retour")
        list_of_widgets = [self.label, self.button_folder, self.button_bill]
        for widget_to_remove in list_of_widgets:
            self.layout.removeWidget(widget_to_remove)
            widget_to_remove.deleteLater()
            widget_to_remove = None
        
        self.layout.addWidget(self.label_folder)
        self.layout.addWidget(self.button_open_file)
        self.layout.addWidget(self.button_back)
        self.button_back.clicked.connect(self.back_to_menu)
        self.setWindowTitle("Bill Analyse")


    def back_to_menu(self):
        print("clicked")
        list_of_widgets = [self.label_folder, self.button_open_file, self.button_back]
        for widget_to_remove in list_of_widgets:
            self.layout.removeWidget(widget_to_remove)
            widget_to_remove.deleteLater()
            widget_to_remove = None
        self.label = QLabel("Selectionnez le type de fichier à analyser")
        self.button_folder = QPushButton("Dossiers")
        self.button_bill = QPushButton("Factures")
        self.layout.addWidget(self.label)
        self.layout.addWidget(self.button_folder)
        self.layout.addWidget(self.button_bill)
        self.button_folder.clicked.connect(self.folder_was_clicked)
        self.button_bill.clicked.connect(self.bill_was_clicked)

        self.setWindowTitle("Data Analyse")

    def open_resultat(self):
        
        dialog = QFileDialog(self)
        dialog.setFileMode(QFileDialog.AnyFile)
        dialog.exec_()
        filenames = dialog.selectedFiles()
        if len(filenames) != 0:
            self.resultat = plot_window.DisplayPlotFolderAnalyse(filenames[0], self)
            self.resultat.show()
        


if __name__ == '__main__':
    app = QApplication(sys.argv)
    # Create and show the form
    menu = MainWindow()
    menu.show()
    # Run the main Qt loop
    sys.exit(app.exec_())

And here is the code for the new window (everything works except the button on that new window) :

class DisplayPlotFolderAnalyse(QDialog):
"""
This class is used to create the window that contains the graph.
"""
def __init__(self, excel_file, parent=None):
    super(DisplayPlotFolderAnalyse, self).__init__(parent)

    self.setWindowTitle("Your Graph")
    
    self.layout = QVBoxLayout()
    results = process.analyse(excel_file)
    self.newcanva = results[0]
    self.newfig = results[1]
    self.layout.addWidget(self.newcanva)
    self.new_button = QPushButton("Save graph on your computer")
    self.new_button.clicked.connect(self.save_figure1(self.newfig))
    self.layout.addWidget(self.new_button)
    self.layout.setAlignment(QtCore.Qt.AlignCenter)
    self.setLayout(self.layout)
    
    os.remove("file_for_analyse.csv")

def save_figure1(self, figure):
    print("save clicked")
    figure.savefig('newfigsaved.png')

Thank you for your help

python

pyqt

pyside2

qdialog

0 Answers

Your Answer

Accepted video resources