【问题标题】:'Save' and 'Save as' using QFileDialog.getSaveFile()'保存'和'另存为'使用 QFileDialog.getSaveFile()
【发布时间】:2020-07-21 10:22:16
【问题描述】:

我正在做一个记事本克隆。虽然保存文件很简单,但我有点陷入以下问题:

QFileDialog.getSavefile() 总是提示用户保存文件,即使该文件之前已保存并且没有对其进行任何更改。如果没有对文件进行任何更改,如何让我的记事本智能忽略保存命令?就像 Windows 中真正的记事本一样。

这是我项目中保存功能的摘录:

def save_file(self):
    """
    Saves the user's work.
    :return: True if the saving is successful. False if otherwise
    """
    options = QFileDialog.Options()
    options |= QFileDialog.DontUseNativeDialog
    file_name, _ = QFileDialog.getSaveFileName(self,"Save File","","All Files(*);;Text Files(*.txt)",options = options)
    if file_name:
        f = open(file_name, 'w')
        text = self.ui.textEdit.toPlainText()
        f.write(text)
        self.setWindowTitle(str(os.path.basename(file_name)) + " - Notepad Alpha")
        f.close()
        return True
    else:
        return False

【问题讨论】:

    标签: python python-3.x pyqt pyqt5 qfiledialog


    【解决方案1】:

    您的问题与 QFileDialog 无关,而是与您的程序逻辑有关。

    您可以使用变量来存储当前文件名,在开头将其保留为 None。然后创建两个不同的函数,一个用于“保存”(如果设置了文件名,它将尝试保存文件),另一个用于“另存为”(始终显示文件对话框。

    另外,考虑到您可以使用windowModified 属性来设置/知道(并让用户知道)文档是否需要保存:

    class Notepad(QtWidgets.QMainWindow):
        def __init__(self):
            super().__init__()
            self.setWindowTitle('New document - Notepad Alpha[*]')
            fileMenu = self.menuBar().addMenu('File')
            saveAction = fileMenu.addAction('Save')
            saveAction.triggered.connect(self.save)
            saveAsAction = fileMenu.addAction('Save as...')
            saveAsAction.triggered.connect(self.saveAs)
    
            self.editor = QtWidgets.QTextEdit()
            self.setCentralWidget(self.editor)
            self.editor.document().modificationChanged.connect(self.setWindowModified)
            self.fileName = None
    
        def save(self):
            if not self.isWindowModified():
                return
            if not self.fileName:
                self.saveAs()
            else:
                with open(self.fileName, 'w') as f:
                    f.write(self.editor.toPlainText())
    
        def saveAs(self):
            if not self.isWindowModified():
                return
            options = QtWidgets.QFileDialog.Options()
            options |= QtWidgets.QFileDialog.DontUseNativeDialog
            fileName, _ = QtWidgets.QFileDialog.getSaveFileName(self, 
                "Save File", "", "All Files(*);;Text Files(*.txt)", options = options)
            if fileName:
                with open(fileName, 'w') as f:
                    f.write(self.editor.toPlainText())
                self.fileName = fileName
                self.setWindowTitle(str(os.path.basename(fileName)) + " - Notepad Alpha[*]")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      • 2021-05-23
      • 2015-11-10
      • 1970-01-01
      • 2022-08-13
      相关资源
      最近更新 更多