1 year ago
#293184
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