Feb-18-2024, 07:09 AM
Dear community,
the main GUI of my application is not shown - I don't know why...
I'm using PyCharm, but the debugger doesn't start. (In the past I was able to set breakpoints and check for errors...)
It would be great, if you could tell me, why the main GUI doesn't appear...
Thank you so much...
main.py
the main GUI of my application is not shown - I don't know why...
I'm using PyCharm, but the debugger doesn't start. (In the past I was able to set breakpoints and check for errors...)
It would be great, if you could tell me, why the main GUI doesn't appear...
Thank you so much...
main.py
from main_window import MainWindow from PyQt6.QtWidgets import QApplication from pathlib import Path import sys def main(): app = QApplication(sys.argv) app.setStyleSheet(Path("stylesheet.qss").read_text()) win = MainWindow() win.load_paths() win.show() app.exec() if __name__ == '__main__': main()main_window.py:
import subprocess from adjustments_window import AdjustmentsWindow from merge_convert_window import MergeConvertWindow from PyQt6.QtGui import QFont from PyQt6.QtWidgets import ( QLabel, QMainWindow, QPushButton, QHBoxLayout, QVBoxLayout, QWidget, QGroupBox, QListWidget, QListWidgetItem, QCheckBox, QInputDialog, QMessageBox, ) class MainWindow(QMainWindow): def __init__(self, parent=None): # No additional window yet self.u = None super(MainWindow, self).__init__(parent) # specific color for background #self.setStyleSheet("background-color: #37b600;") self.setWindowTitle("simplex feeder tool") self.resize(400, 500) 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_medium.setFixedHeight(28) self.listbox_medium2 = QListWidget() self.listbox_medium2.setFont(QFont('Times', 12)) self.listbox_medium2.setFixedHeight(28) self.checkbox = QCheckBox("paper stack contains patchTpages") self.checkbox.setFont(QFont('Times', 12)) self.groupbox_profile = QGroupBox("for paper: 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.listbox_profile.setFixedHeight(28) 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) for h in [self.listbox_medium, self.listbox_medium2, self.checkbox, self.groupbox_profile]: self.groupbox_have_layout.addWidget(h) 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.listbox_target.setFixedHeight(28) self.listbox_extension = QListWidget() self.listbox_extension.setFont(QFont('Times', 12)) self.listbox_extension.setFixedHeight(28) self.groupbox_move = QGroupBox("move scan(s) to") self.groupbox_move.setFont(QFont('Times', 12)) self.groupbox_move.font().setBold(True) self.checkbox_move_to = QCheckBox("onedrive") 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_extension, self.listbox_target, self.groupbox_move]: self.groupbox_receive_layout.addWidget(y) self.groupbox_receive.setLayout(self.groupbox_receive_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.button_apply_selection, self.button_adjustments]: self.layout_base.addWidget(c) self.central_widget.setLayout(self.layout_base) # clear listboxes self.listbox_medium.clear() self.listbox_medium2.clear() self.listbox_extension.clear() self.listbox_target.clear() self.listbox_profile.clear() # fill some listboxes self.listbox_medium.insertItem(0, "paper") self.listbox_medium.item(0).setForeground(QColor("blue")) self.listbox_medium.insertItem(1, "file(s)") self.listbox_medium.item(1).setForeground(QColor("green")) self.listbox_medium2.insertItem(0, "printed onesided") self.listbox_medium2.item(0).setForeground(QColor("blue")) self.listbox_medium2.insertItem(1, "printed bothsided") self.listbox_medium2.item(1).setForeground(QColor("blue")) self.listbox_medium2.insertItem(2, "file(s)") self.listbox_medium2.item(2).setForeground(QColor("green")) self.listbox_target.insertItem(0, "1 file/page") self.listbox_target.item(0).setForeground(QColor("blue")) self.listbox_target.insertItem(1, "merge pages") self.listbox_target.item(1).setForeground(QColor("blue")) self.listbox_target.insertItem(2, "merge/convert") self.listbox_target.item(2).setForeground(QColor("green")) self.listbox_target.insertItem(3, "export specific page(s)") self.listbox_target.item(3).setForeground(QColor("green")) self.listbox_target.insertItem(4, "export page range(s)") self.listbox_target.item(4).setForeground(QColor("green")) self.listbox_target.insertItem(5, "export all pages individually") self.listbox_target.item(5).setForeground(QColor("green")) # no color self.listbox_extension.insertItem(0, "pdf") self.listbox_extension.insertItem(1, "bmp") self.listbox_extension.insertItem(2, "jpg") self.listbox_extension.insertItem(3, "jpeg") self.listbox_extension.insertItem(4, "png") self.listbox_extension.insertItem(5, "tif") self.listbox_extension.insertItem(6, "tiff") 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 load_paths(self): with open(Path("path_created_files.txt"), "r") as f1: self.path_created_files = f1.read() if self.path_created_files == "": QMessageBox.about(self, "Go to adjustments", "Please adjust created files path") with open(Path("path_files_to_convert.txt"), "r") as f2: self.path_files_to_convert = f2.read() if self.path_files_to_convert == "": QMessageBox.about(self, "Go to adjustments", "Please adjust files to convert path") # load profiles with open(Path("profiles.txt"), "r") as f3: lines = f3.readlines() if lines == "": QMessageBox.about(self, "Hint", "Please enter profiles") else: for line in lines: self.listbox_profile.insertItem(0, line) def button_add_profile_clicked(self): profile_name, ok = QInputDialog.getText(self, 'Add Profile', 'Please enter a profile name:') if ok: with open(Path("profiles.txt"), "a") as f: f.write(f"{profile_name}\n") # add to listbox self.listbox_profile.addItem(QListWidgetItem(profile_name)) def button_clear_profile_clicked(self): amount_of_selected_items = len(self.listbox_profile.selectedItems()) if amount_of_selected_items > 0: # clear selected item in list_widget current_row = self.listbox_profile.currentRow() profile_name = self.listbox_profile.currentItem().text() if current_row >= 0: current_item = self.listbox_profile.takeItem(current_row) del current_item # clear row which holds selected profile content = profile_name with open("profiles.txt", "r") as f3: lines = f3.readlines() new_lines = [] for line in lines: if content not in line.strip(): new_lines.append(line) f3.close() with open("profiles.txt", "w") as f3: f3.writelines(new_lines) f3.close() else: QMessageBox.about(self, "Hint", "No profile was selected.") def button_adjustments_clicked(self): self.u = AdjustmentsWindow() self.u.show() def count_files(self, path): amount_of_files = 0 for entry in os.scandir(path): if entry.is_file(): amount_of_files += 1 return amount_of_files def create_file_str(self, path): filestr = "" i = 0 amount_files = self.count_files(path) if amount_files == 0: QMessageBox.about(self, "Hint", "No files in Folder.") quit else: for entry in os.scandir(path): if i < amount_files: filestr = filestr + path + "/" + entry.name + ";" else: filestr = filestr + path + "/" + entry.name i += 1 return filestr def merge_pdfs(self, path): filestr = self.create_file_str(path) subprocess.run(['C:/Program Files/NAPS2/naps2.console.exe', '-i', filestr, '-n', '0', '--output', self.path_created_files + '/' + 'merged.pdf'], shell=False) def split_pdf(self, fileName): subprocess.run(['C:/Program Files/NAPS2/naps2.console.exe', '-i', self.path_files_to_convert + '/' + fileName, '-n', '0', '--split', '--output', self.path_created_files + '/' + '$(n).pdf'], shell=False) def readin_fileName(self, path): amount_pdfs = 0 for fileName in os.listdir(path): d = os.path.join(path, fileName) if os.path.isdir(d): QMessageBox.about(self, "Hint", "Please place no directories in 'files to convert-folder'!") quit() if not fileName.endswith(".pdf"): QMessageBox.about(self, "Hint", "Please place 1 pdf in 'files to convert-folder'!") quit() if fileName.endswith(".pdf"): amount_pdfs += 1 if amount_pdfs > 1: QMessageBox.about(self, "Hint", "Please place just 1 pdf in 'files to convert-folder'!") quit() return fileName def export_specific_pages(self, fileName, a): subprocess.run(['C:/Program Files/NAPS2/naps2.console.exe', '-i', self.path_files_to_convert + '/' + fileName + '[' + str(a) + ']', '-n', '0', '--output', self.path_created_files + '/' + str(a + 1) + '.pdf'], shell=False) def add_zero(self, path): listextension = [] list = [] listlen = [] for entry in os.scandir(path): splitup = os.path.splitext(entry.name) extension = splitup[1] listextension.append(extension) # compare if all extensions are equal first_element = listextension[0] # Compares all elements with the first element for k in listextension: if first_element != k: QMessageBox.about(self, "Hint", "different extensions") quit() QMessageBox.about(self, "Hint", "equal extensions") for entry in os.scandir(path): if entry.is_file(): g = entry.name.split(".") if g[0].isnumeric: list.append(g[0]) for i in list: listlen.append(len(i)) max_length = max(listlen) for entry in os.scandir(path): g = entry.name.split(".") h = g[0] if len(h) != max_length: while True: h = "0" + h if len(h) == max_length: break os.rename(path + "/" + entry.name, path + "/" + h + extension) os.scandir(path).close() def finput(self, text, fileName): c = text.split("-") for i in range(int(c[0])-1, int(c[1])): self.export_specific_pages(fileName, i) self.add_zero(self.path_created_files) self.merge_pdf(self.path_created_files) os.rename(self.path_created_files + "/merged.pdf", self.path_created_files + "/page_range(" + str(c[0]) + "-" + str(c[1]) + ").pdf") for entry in os.scandir(self.path_created_files): if "page_range" not in entry.name: os.remove(self.path_created_files + "/" + entry.name) def button_apply_selection_clicked(self): if not self.listbox_medium.selectedItems() or not self.listbox_medium2.selectedItems() or not self.listbox_target.selectedItems(): QMessageBox.about(self, "Hint", "Not all ListWidgets were clicked.") if self.listbox_medium.currentItem().foreground().color() == self.listbox_medium2.currentItem().foreground().color() == self.listbox_target.currentItem().foreground().color(): #------------------------files--------------------------------------------------------------------------------------------------------------- if self.listbox_medium.currentItem().text() == "file(s)" and self.listbox_medium2.currentItem().text() == "file(s)": # export specific pages if self.listbox_target.currentItem().text() == "export specific page(s)": fileName = self.readin_fileName(self.path_files_to_convert) text_input, ok = QInputDialog.getText(self, "export from pdf", "export specific page(s)") if text_input != "": text_input = text_input.replace(" ", "") else: QMessageBox.about(self, "Hint", "No entry was made.") quit() if (",") in text_input: b = text_input.split(",") amount_exported_pages = len(b) for x in range(0, amount_exported_pages): self.export_specific_pages(fileName, int(b[x]) - 1) else: b = text_input self.export_specific_pages(fileName, b) # export page range(s) if self.listbox_target.currentItem().text() == "export page range(s)": fileName = self.readin_fileName(self.path_files_to_convert) text_input2, ok = QInputDialog.getText(self, "export from pdf", "export page range(s)") if text_input2 != "" and ok: text_input2 = text_input2.replace(" ", "") else: QMessageBox.about(self, "Hint", "No entry was made.") quit() if "," in text_input2: # counts amount of commas in input amount_commas = text_input2.count(",") b = text_input2.split(",") for x in range(0, amount_commas + 1): self.finput(b[x], fileName) else: self.finput(text_input2, fileName) # export all pages individually if self.listbox_target.currentItem().text() == "export all pages individually": fileName = self.readin_fileName(self.path_files_to_convert) self.split_pdf(fileName) if self.listbox_target.currentItem().text() == "merge/convert": # show merge_convert_window self.u = MergeConvertWindow self.u.listbox_merge_convert.clear() if self.listbox_extension.currentItem().text() == "pdf": self.u.listbox_merge_convert.insertItem(0, "merge pdfs") else: self.u.listbox_merge_convert.insertItem(0, "convert file(s)") self.u.show() if self.listbox_target.currentItem().text() == "merge pdfs": # merge pdfs if self.count_files(self.path_created_files) != 0: QMessageBox.about(self, "Hint", "path_created_files is Not empty.") quit() if self.count_files(self.path_files_to_convert) == 0: QMessageBox.about(self, "Hint", "path_files_to_convert is empty.") quit() self.merge_pdfs(self.path_files_to_convert) # convert files # ------------------------paper-------------------------------------------------------------------------------------------------------------- else: QMessageBox.about(self, "Hint", "All selections - except the file formats and the profiles - must have the same color (blue=paper, or green=files).") quitadjustments_window.py:
from PyQt6.QtGui import QFont from PyQt6.QtWidgets import ( QLabel, QPushButton, QVBoxLayout, QWidget, QFileDialog, QMessageBox, ) class AdjustmentsWindow(QWidget): def __init__(self): super().__init__() self.setWindowTitle("simplex feeder tool") self.resize(300, 150) self.label = QLabel("adjustments") self.label.setFont(QFont('Times', 12)) self.path_created_files = "" self.path_files_to_convert = "" self.button_files_to_convert = QPushButton("files to convert path") self.button_files_to_convert.setFont(QFont('Times', 12)) self.button_created_files = QPushButton("created files path") 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_files_to_convert, self.button_created_files, self.button_donate]: self.layout.addWidget(k) self.setLayout(self.layout) self.button_created_files.clicked.connect(self.button_created_files_clicked) self.button_files_to_convert.clicked.connect(self.button_files_to_convert_clicked) def button_created_files_clicked(self): path_created_files = str(QFileDialog().getExistingDirectory(self, 'Select path for created files')) with open("path_created_files.txt", "w") as f4: f4.write(path_created_files) f4.close() def button_files_to_convert_clicked(self): path_files_to_convert = str(QFileDialog().getExistingDirectory(self, 'Select path for files to convert')) with open("path_files_to_convert.txt", "w") as f5: f5.write(path_files_to_convert) f5.close()merge_convert_window.py:
from PyQt6.QtGui import QFont, QColor from PyQt6.QtWidgets import ( QLabel, QPushButton, QHBoxLayout, QVBoxLayout, QWidget, QListWidget, ) class MergeConvertWindow(QWidget): def __init__(self): super().__init__() self.setWindowTitle("simplex feeder tool") self.resize(300, 200) self.label = QLabel("merge/convert") self.label.setFont(QFont('Times', 12)) self.listbox_dragdrop = QListWidget() self.listbox_dragdrop.setFont(QFont('Times', 12)) self.listbox_dragdrop.setFixedHeight(140) self.listbox_merge_convert = QListWidget() self.listbox_merge_convert.setFont(QFont('Times', 12)) self.listbox_merge_convert.item(0).setForeground(QColor("green")) self.listbox_merge_convert.setFixedHeight(28) self.push_up = QPushButton("up") self.push_up.setFont(QFont('Times', 12)) self.push_down = QPushButton("down") self.push_down.setFont(QFont('Times', 12)) self.button = QPushButton("apply selection") self.button.setFont(QFont('Times', 12)) self.layout = QVBoxLayout() for e in [self.push_up, self.push_down]: self.layout.addWidget(e) self.layout2 = QHBoxLayout() self.layout2.addWidget(self.listbox_dragdrop) self.layout2.addLayout(self.layout) self.mainlayout = QVBoxLayout() self.mainlayout.addWidget(self.label) self.mainlayout.addLayout(self.layout2) self.mainlayout.addWidget(self.listbox_merge_convert) self.mainlayout.addWidget(self.button) self.setLayout(self.mainlayout)