class ZhuNoteForm(QWidget): def __init__(self, path=None): QWidget.__init__(self) self.initUI(path) def initUI(self, path): pathLabel = QLabel('Path') filenameLabel = QLabel('Filename') timeLabel = QLabel('Time') titleLabel = QLabel('Title') keywordLabel = QLabel('Keyword') figureLabel = QLabel('Figure') htmlLabel = QLabel('HTML') bodyLabel = QLabel('Body') self.pathEdit = QLineEdit(path) self.pathEdit.setReadOnly(True) self.filenameEdit = QLineEdit() self.timeEdit = QLineEdit() self.titleEdit = QLineEdit() self.keywordEdit = QLineEdit() self.figureEdit = QLineEdit() self.htmlEdit = QLineEdit() self.bodyEdit = QTextEdit() # If more than one keyword, delimit with comma. # Same for figure and html filenames. #btnSave = QPushButton('Save') #btnSave.setToolTip('Save script to file') #btnSave.clicked.connect(self.saveFile) # Replace save button with keyboard shortcut # Save move hand from keyboard to mouse. grid = QGridLayout() grid.setSpacing(5) row = 0 grid.addWidget(pathLabel, row, 0) grid.addWidget(self.pathEdit, row, 1) row += 1 grid.addWidget(filenameLabel, row, 0) grid.addWidget(self.filenameEdit, row, 1) row += 1 grid.addWidget(figureLabel, row, 0) grid.addWidget(self.figureEdit, row, 1) row += 1 grid.addWidget(htmlLabel, row, 0) grid.addWidget(self.htmlEdit, row, 1) row += 1 grid.addWidget(timeLabel, row, 0) grid.addWidget(self.timeEdit, row, 1) row += 1 grid.addWidget(titleLabel, row, 0) grid.addWidget(self.titleEdit, row, 1) row += 1 grid.addWidget(keywordLabel, row, 0) grid.addWidget(self.keywordEdit, row, 1) row += 1 grid.addWidget(bodyLabel, row, 0) grid.addWidget(self.bodyEdit, row, 1, 6, 1) #grid.addWidget(btnSave, 11, 1) self.actOpen = QAction('Open', self) self.actOpen.setShortcut('Ctrl+O') self.actOpen.triggered.connect(self.openFile) self.filenameEdit.addAction(self.actOpen) self.actSave = QAction('Save', self) self.actSave.setShortcut('Ctrl+S') self.actSave.triggered.connect(self.saveFile) self.bodyEdit.addAction(self.actSave) self.setLayout(grid) #self.setGeometry(300, 300, 600, 400) self.setWindowTitle('Form - ZhuNote') #self.show() def setFont(self, font): #font = self.bodyEdit.font() # current font #font = QFont() # default font self.pathEdit.setFont(font) self.filenameEdit.setFont(font) self.timeEdit.setFont(font) self.titleEdit.setFont(font) self.keywordEdit.setFont(font) self.figureEdit.setFont(font) self.htmlEdit.setFont(font) self.bodyEdit.setFont(font) def clear(self): self.filenameEdit.clear() self.timeEdit.clear() self.titleEdit.clear() self.keywordEdit.clear() self.figureEdit.clear() self.htmlEdit.clear() self.bodyEdit.clear() def viewDict(self, dictNote): self.filenameEdit.setText(dictNote['Filename']) self.timeEdit.setText(dictNote['Time']) self.titleEdit.setText(dictNote['Title']) self.keywordEdit.setText(dictNote['Keyword']) self.figureEdit.setText(dictNote['Figure']) self.htmlEdit.setText(dictNote['HTML']) self.bodyEdit.setText(dictNote['Body']) def openFile(self): path = self.pathEdit.text() fn = self.filenameEdit.text() ffn = os.path.join(path, fn) with open(ffn, 'rb') as f: dictNote = pickle.load(f) self.viewDict(dictNote) def saveFile(self): #fn = timeStr + '.txt' # Use title as filename to overwrite existing note file. base = self.titleEdit.text().replace(' ', '_') txtfn = base + '.txt' pklfn = base + '.pkl' path = self.pathEdit.text() timeStr = datetime.now().strftime('%Y-%m-%d-%H-%M-%S') self.filenameEdit.setText(pklfn) self.timeEdit.setText(timeStr) textSum = '' text = 'Filename: ' + txtfn + '\n' textSum += text text = 'Time: ' + timeStr + '\n' textSum += text text = 'Title: ' + self.titleEdit.text() + '\n' textSum += text text = 'Keyword: ' + self.keywordEdit.text() + '\n' textSum += text text = 'Figure: ' + self.figureEdit.text() + '\n' textSum += text text = 'HTML: ' + self.htmlEdit.text() + '\n' textSum += text text = 'Body: ' + self.bodyEdit.toPlainText() + '\n' textSum += text dictNote = {} dictNote['Filename'] = pklfn dictNote['Time'] = timeStr dictNote['Title'] = self.titleEdit.text() dictNote['Keyword'] = self.keywordEdit.text() dictNote['Figure'] = self.figureEdit.text() dictNote['HTML'] = self.htmlEdit.text() dictNote['Body'] = self.bodyEdit.toPlainText() txtffn = os.path.join(path, txtfn) pklffn = os.path.join(path, pklfn) # Check if file exist if os.path.isfile(txtffn): choice = QMessageBox.question( self, 'Warning', "File exists. Do you want overwrite?", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes) if choice == QMessageBox.Yes: self.writeFile(textSum, txtffn, dictNote, pklffn) else: print("Change title and re-save.") return 1 else: self.writeFile(textSum, txtffn, dictNote, pklffn) return 0 @staticmethod def writeFile(textSum, txtfn, dictNote, pklfn): """ input are full filename (with absolute path) """ with open(txtfn, 'w', encoding='utf-8') as f: f.write(textSum) with open(pklfn, 'wb') as f: pickle.dump(dictNote, f, -1)