Jul-26-2023, 04:37 PM
Hello, I need some help in GUI programming because unfortunately I can't find the error...
I would like to get a folder path using a FolderBrowserDialog.
It's about the "button_created_files_clicked" and "button_files_to_convert_clicked" functions in the "AdjustmentsWindow" class.
When I click the "button_adjustments" button in the "MainWindow" window, the GUI crashes.
What can be the reason?
Many thanks for the help!!
I would like to get a folder path using a FolderBrowserDialog.
It's about the "button_created_files_clicked" and "button_files_to_convert_clicked" functions in the "AdjustmentsWindow" class.
When I click the "button_adjustments" button in the "MainWindow" window, the GUI crashes.
What can be the reason?
Many thanks for the help!!
import sys from pathlib import Path from PyQt6.QtGui import QFont from PyQt6.QtWidgets import ( QApplication, QLabel, QMainWindow, QPushButton, QHBoxLayout, QVBoxLayout, QWidget, QGroupBox, QListWidget, QCheckBox, QRadioButton, QLineEdit, QFileDialog, ) class MovePdfsToWindow(QWidget): def __init__(self): super().__init__() layout = QVBoxLayout() self.label = QLabel("simplex feeder tool") layout.addWidget(self.label) self.setLayout(layout) class ExportMergeFilesWindow(QWidget): def __init__(self): super().__init__() layout = QVBoxLayout() label = QLabel("") layout.addWidget(label) self.setLayout(layout) class ExportPdfWindow(QWidget): def __init__(self): super().__init__() label = QLabel("export pdf(s)") label.setFont(QFont('Times', 12)) label2 = QLabel("what would you like to export from the pdf?") label2.setFont(QFont('Times', 12)) label3 = QLabel("which pages would you like to receive?") label3.setFont(QFont('Times', 12)) radiobutton = QRadioButton("specific page(s)") radiobutton.setFont(QFont('Times', 12)) radiobutton2 = QRadioButton("specific page range(s)") radiobutton2.setFont(QFont('Times', 12)) radiobutton3 = QRadioButton("all pages individually") radiobutton3.setFont(QFont('Times', 12)) button = QPushButton("apply selection") button.setFont(QFont('Times', 12)) layout = QVBoxLayout() for t in [label, label2, label3, radiobutton, radiobutton2, radiobutton3, button]: layout.addWidget(t) self.setLayout(layout) class LineEditWindow(QWidget): def __init__(self): super().__init__() self.setWindowTitle("abc") self.resize(300, 50) self.layout = QVBoxLayout() self.label = QLabel("Please enter a profile's name") self.label.setFont(QFont('Times', 12)) self.lineedit = QLineEdit() self.lineedit.setFont(QFont('Times', 12)) self.layout.addWidget(self.label) self.layout.addWidget(self.lineedit) self.setLayout(self.layout) print(self.lineedit) class AdjustmentsWindow(QWidget): def __init__(self): super().__init__() self.setWindowTitle("abc") self.resize(300, 150) self.label = QLabel("adjustments") self.label.setFont(QFont('Times', 12)) self.button_files_to_convert = QPushButton("path to converted files") self.button_files_to_convert.setFont(QFont('Times', 12)) self.button_created_files = QPushButton("path to created files") self.button_created_files.setFont(QFont('Times', 12)) self.button_donate = QPushButton("donate") self.button_donate.setFont(QFont('Times', 12)) self.layout = QVBoxLayout() for k in [self.label, self.button_converted_files, self.button_created_files, self.button_donate]: self.layout.addWidget(k) self.setLayout(self.layout) self.button_files_to_convert.clicked.connect(self.button_files_to_convert_clicked) self.button_created_files.clicked.connect(self.button_created_files_clicked) def button_created_files_clicked(self): dialog = QFileDialog() path_created_files = dialog.getExistingDirectory(self, 'Select Folder') print(path_created_files) self.w.show() def button_files_to_convert_clicked(self): dialog = QFileDialog() path_files_to_convert = dialog.getExistingDirectory(self, 'Select Folder') print(path_files_to_convert) self.w.show() class MainWindow(QMainWindow): def __init__(self, parent=None): # No additional window yet self.w = None super(MainWindow, self).__init__(parent) self.setWindowTitle("abc") self.resize(400, 600) self.central_widget = QWidget() self.setCentralWidget(self.central_widget) # center MainWindow to screen qr = self.frameGeometry() cp = self.screen().availableGeometry().center() qr.moveCenter(cp) self.move(qr.topLeft()) # --------------------- groupbox_have --------------------- self.groupbox_have = QGroupBox("what do you have?") self.groupbox_have.setFont(QFont('Times', 12)) self.groupbox_have.font().setBold(True) self.groupbox_have_layout = QVBoxLayout() self.listbox_medium = QListWidget() self.listbox_medium.setFont(QFont('Times', 12)) self.listbox_medium2 = QListWidget() self.listbox_medium2.setFont(QFont('Times', 12)) self.checkbox = QCheckBox("stack contains patchTpages") self.checkbox.setFont(QFont('Times', 12)) for x in [self.listbox_medium, self.listbox_medium2, self.checkbox]: self.groupbox_have_layout.addWidget(x) self.groupbox_have.setLayout(self.groupbox_have_layout) # --------------------- groupbox_receive --------------------- self.groupbox_receive = QGroupBox("what would you like to receive?") self.groupbox_receive.setFont(QFont('Times', 12)) self.groupbox_receive.font().setBold(True) self.groupbox_receive_layout = QVBoxLayout() self.listbox_target = QListWidget() self.listbox_target.setFont(QFont('Times', 12)) self.groupbox_move = QGroupBox("move file(s) to") self.groupbox_move.setFont(QFont('Times', 12)) self.groupbox_move.font().setBold(True) self.checkbox_move_to = QCheckBox("move file(s) to desired folder(s)") self.checkbox_move_to.setFont(QFont('Times', 12)) self.groupbox_move_layout = QVBoxLayout() self.groupbox_move_layout.addWidget(self.checkbox_move_to) self.groupbox_move.setLayout(self.groupbox_move_layout) self.groupbox_receive_layout = QVBoxLayout() for y in [self.listbox_target, self.groupbox_move]: self.groupbox_receive_layout.addWidget(y) self.groupbox_receive.setLayout(self.groupbox_receive_layout) # --------------------- groupbox_profile --------------------- self.groupbox_profile = QGroupBox("which profile should be used?") self.groupbox_profile.setFont(QFont('Times', 12)) self.groupbox_profile.font().setBold(True) self.listbox_profile = QListWidget() self.listbox_profile.setFont(QFont('Times', 12)) self.button_add_profile = QPushButton("add profile") self.button_add_profile.setFont(QFont('Times', 12)) self.button_clear_profile = QPushButton("clear profile") self.button_clear_profile.setFont(QFont('Times', 12)) self.groupbox_profile_intern_layout = QHBoxLayout() for x in [self.button_add_profile, self.button_clear_profile]: self.groupbox_profile_intern_layout.addWidget(x) self.groupbox_profile_layout = QVBoxLayout() self.groupbox_profile_layout.addWidget(self.listbox_profile) self.groupbox_profile_layout.addLayout(self.groupbox_profile_intern_layout) self.groupbox_profile.setLayout(self.groupbox_profile_layout) # -------------------------------------------------------------- self.button_apply_selection = QPushButton("apply selection") self.button_apply_selection.setFont(QFont('Times', 12)) self.button_adjustments = QPushButton("adjustments") self.button_adjustments.setFont(QFont('Times', 12)) self.label = QLabel("abc") self.label.setFont(QFont('Times', 12)) self.layout_base = QVBoxLayout() for c in [self.label, self.groupbox_have, self.groupbox_receive, self.groupbox_profile, self.button_apply_selection, self.button_adjustments]: self.layout_base.addWidget(c) self.central_widget.setLayout(self.layout_base) # clear listbox self.listbox_medium.clear() self.listbox_medium2.clear() self.listbox_target.clear() # fill listbox self.listbox_medium.insertItem(0, "paper") self.listbox_medium.insertItem(1, "file(s)") self.listbox_medium2.insertItem(0, "-") self.listbox_target.insertItem(0, "-") self.button_add_profile.clicked.connect(self.button_add_profile_clicked) self.button_clear_profile.clicked.connect(self.button_clear_profile_clicked) self.button_apply_selection.clicked.connect(self.button_apply_selection_clicked) self.button_adjustments.clicked.connect(self.button_adjustments_clicked) def button_add_profile_clicked(self): if self.w is None: self.w = LineEditWindow() self.w.show() def button_clear_profile_clicked(self): print("clear_profile") def button_adjustments_clicked(self): if self.w is None: self.w = AdjustmentsWindow() self.w.show() def button_apply_selection_clicked(self): current_index = self.listbox_medium.currentRow() if current_index == 0: print("paper") if current_index == 1: print("files") if __name__ == '__main__': app = QApplication(sys.argv) app.setStyleSheet(Path("stylesheet.qss").read_text()) win = MainWindow() win.show() app.exec()