'Save' 和 'Save as' 使用 QFileDialog.getSaveFile()
'Save' and 'Save as' using QFileDialog.getSaveFile()
我正在研究记事本克隆。虽然保存文件很简单,但我还是遇到了以下问题:
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
您的问题与QFileDialog无关,与您的程序逻辑有关。
可以用一个变量来存放当前文件名,留给None开头。然后创建两个不同的函数,一个用于“保存”(如果设置了文件名,它将尝试保存文件),一个用于“另存为”(它将始终显示文件对话框。
此外,考虑到如果文档需要保存,您可以使用 windowModified
属性 到 set/know(并让用户知道):
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[*]")
我正在研究记事本克隆。虽然保存文件很简单,但我还是遇到了以下问题:
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
您的问题与QFileDialog无关,与您的程序逻辑有关。
可以用一个变量来存放当前文件名,留给None开头。然后创建两个不同的函数,一个用于“保存”(如果设置了文件名,它将尝试保存文件),一个用于“另存为”(它将始终显示文件对话框。
此外,考虑到如果文档需要保存,您可以使用 windowModified
属性 到 set/know(并让用户知道):
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[*]")