def build_new_schematic(): DT.clear() initialDirectory = root.initialDirectory if mainSchematicFile.components and csvFile.components: print(root.lastSchematicFileName) savePath = filedialog.asksaveasfilename( initialfile=root.lastSchematicFileName, filetypes=(("KiCAD Schematic File", ".sch"), ("All Files", ".*"))) if savePath: if mainSchematicFile.ModifyNewSCHFile(0, csvFile, savePath): messagebox.showerror("File IO Error", ".SCH cannot be edited") else: statusLabel['text'] = str( savePath) + " updated with new field values" else: if mainSchematicFile.components: messagebox.showerror("Processing Error", "No CSV File Loaded") elif csvFile.components: messagebox.showerror("Processing Error", "No SCH File Loaded") else: messagebox.showerror("Processing Error", "No Files Loaded") print("Summary for writing to schematic files: ") DT.summary()
def generate_csv(): DT.clear() initialDirectory = root.initialDirectory if len(mainSchematicFile.components) > 0: root.path_to_save = filedialog.asksaveasfilename(initialdir = initialDirectory, filetypes = (("Comma seperated values", ".csv"),("All Files",".*"))) root.initialDirectory = set_initial_directory(root.path_to_save) sort_parts() if mainSchematicFile.exportCsvFile(root.path_to_save): messagebox.showerror("File IOerror", "The file might still be opened") else: statusLabel['text'] = "Saved: " + str(root.path_to_save) else: messagebox.showerror("Cannot generate .CSV", "No SCH File loaded") DT.summary()
def load_csv(): DT.clear() config = ConfigParser() config.read('config.ini') initialDirectory = config.get('main', 'lastDirectory', fallback="") #mainSchematicFile.printprops() if initialDirectory == "": root.filename = filedialog.askopenfilename( filetypes=(("KiCAD Partslist-editor files", ".csv"), ("All Files", ".*"))) else: root.filename = filedialog.askopenfilename(initialdir=initialDirectory, filetypes=( ("KiCAD Partslist-editor files", ".csv"), ("All Files", ".*"))) filename = root.filename config.read('config.ini') if config.has_section('main') == FALSE: config.add_section('main') config.set('main', 'lastDirectory', os.path.dirname(filename)) with open('config.ini', 'w') as f: config.write(f) if filename[-4:] == ".csv" or filename[-4:] == ".CSV": error = csvFile.extractCsvComponents(filename) if error: messagebox.showerror("Incorrect Fileformat", error) else: statusLabel['text'] = "Import: " + str(root.filename) + " complete" + "\n" + str(len(csvFile.components)) + " components were imported" f.close() else: if filename: messagebox.showerror("FileParseError", "This is not a valid CSV document (*.csv or *.CSV)") print("Summary for importing from CSV: ") DT.summary() DT.info(str(len(csvFile.components)) + ' components were imported from CSV')
def load_schematic(): DT.clear() globals.ParsedSchematicFiles = [] # clear this list. config = ConfigParser() config.read('config.ini') initialDirectory = config.get('main', 'lastDirectory', fallback="") if initialDirectory == "": root.filename = filedialog.askopenfilename(filetypes = (("KiCAD Schematic Files",".sch"),("All Files", ".*"))) else: root.filename = filedialog.askopenfilename(initialdir = initialDirectory, filetypes = (("KiCAD Schematic Files",".sch"),("All Files", ".*"))) filename = root.filename root.lastSchematicFileName = filename config.read('config.ini') if config.has_section('main') == FALSE: config.add_section('main') config.set('main', 'lastDirectory', os.path.dirname(filename)) with open('config.ini', 'w') as f: config.write(f) f.close() if filename[-4:] == ".sch" or filename[-4:] == ".SCH": try: f = open(filename) except IOError: DT.error("can\'t find file or read data") else: mainSchematicFile.setPath(filename) dataTestDump = f.readlines()[0] f.close() if dataTestDump[:-1] == "EESchema Schematic File Version 2" or dataTestDump[:-1] == "EESchema Schematic File Version 4": # support for KiCad4 and KiCad5 # TODO 2: move the laoding of a schematic file into the Schematic class! # --> make use of recursive loading of schematics #verify it conforms to KiCAD specs if mainSchematicFile.components: mainSchematicFile.deleteContents() try: f = open(filename) except IOError: DT.error("can\'t find file or read data") else: mainSchematicFile.SetContents(f.readlines()) mainSchematicFile.fieldList = fieldList; mainSchematicFile.schematicName = os.path.basename(filename) f.close() if mainSchematicFile.ParseComponents(): if(len(mainSchematicFile.getSubCircuits()) != len(mainSchematicFile.getSubCircuitName())): messagebox.showerror("FileParseError", "Hierarchical schematics could not be found") else: messagebox.showerror("FileParseError", "This is not a valid KiCAD schematic document.") else: messagebox.showerror("FileParseError", "This is not a valid KiCAD schematic document.") else: if filename: messagebox.showerror("FileParseError", "This is not a valid KiCAD schematic document (*.sch or *.SCH)") for i in range (len(mainSchematicFile.components)): if "?" in mainSchematicFile.components[i].getReference(): if messagebox.askyesno("Annotation Incomplete", "The program is unable to process unanotated components. Do you want to clear imported data?"): mainSchematicFile.deleteContents() break root.initialDirectory = set_initial_directory(filename) if mainSchematicFile.schematicName: unlistedCount = 0 for c in mainSchematicFile.components: if c.unlisted: unlistedCount += 1 statusLabel['text'] = "Loaded schematic: " + mainSchematicFile.schematicName + "\n" +\ str(len(mainSchematicFile.components) - unlistedCount ) +\ " + " + str(unlistedCount) + " hidden components were found" else: statusLabel['text'] = "Start by loading a KiCad schematic file..." print("Summary of loading schematic: ") DT.summary()