如何使 QFileDialog.AnyFile 工作?
How does one make QFileDialog.AnyFile work?
根据 PyQt5 文档,指定 QFileDialog.AnyFile
应该消除指定文件已经存在的要求。但是,这似乎不起作用。我做错了什么,还是这个功能不再有效?这是我的代码:
import os
from PyQt5 import QtGui, QtCore
from PyQt5.QtWidgets import QApplication, QFileDialog, QWidget
class App(QWidget):
def __init__(self):
super().__init__()
self.title = "QFileDialog.AnyFile doesn't work."
self.left = 10
self.top = 30
self.width = 320
self.height = 200
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
dlg= QFileDialog()
dlg.setFileMode(QFileDialog.AnyFile)
fname, _= dlg.getOpenFileName(parent=self, directory=os.getcwd(),
caption='Select a file')
self.show()
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
ex = App()
sys.exit(app.exec_())
您存在以下误解:
QFileDialog::getOpenFileName()
是一个静态方法,它不使用“dlg”对象,而是创建一个新的 QFileDialog,因此设置或修改任何“dlg”属性 不会影响将显示的 QFileDialog。
函数QFileDialog::getOpenFileName()旨在获取the docs中指示的现有文件的名称,因此它设置的fileMode是QFileDialog::ExistingFile
,所以修改那个行为是矛盾的。
This is a convenience static function that returns an existing file selected by the user. If the user presses Cancel, it returns a null string.
(强调我的)
所以如果你想获取一个文件的名称,即使它不存在,你必须使用静态方法 QFileDialog::getSaveFileName(),如 the docs:
所示
This is a convenience static function that will return a file name selected by the user. The file does not have to exist.
(强调我的)
fname, _ = QFileDialog.getSaveFileName(
parent=self, directory=os.getcwd(), caption="Select a file"
)
根据 PyQt5 文档,指定 QFileDialog.AnyFile
应该消除指定文件已经存在的要求。但是,这似乎不起作用。我做错了什么,还是这个功能不再有效?这是我的代码:
import os
from PyQt5 import QtGui, QtCore
from PyQt5.QtWidgets import QApplication, QFileDialog, QWidget
class App(QWidget):
def __init__(self):
super().__init__()
self.title = "QFileDialog.AnyFile doesn't work."
self.left = 10
self.top = 30
self.width = 320
self.height = 200
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
dlg= QFileDialog()
dlg.setFileMode(QFileDialog.AnyFile)
fname, _= dlg.getOpenFileName(parent=self, directory=os.getcwd(),
caption='Select a file')
self.show()
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
ex = App()
sys.exit(app.exec_())
您存在以下误解:
QFileDialog::getOpenFileName()
是一个静态方法,它不使用“dlg”对象,而是创建一个新的 QFileDialog,因此设置或修改任何“dlg”属性 不会影响将显示的 QFileDialog。函数QFileDialog::getOpenFileName()旨在获取the docs中指示的现有文件的名称,因此它设置的fileMode是
QFileDialog::ExistingFile
,所以修改那个行为是矛盾的。
This is a convenience static function that returns an existing file selected by the user. If the user presses Cancel, it returns a null string.
(强调我的)
所以如果你想获取一个文件的名称,即使它不存在,你必须使用静态方法 QFileDialog::getSaveFileName(),如 the docs:
所示This is a convenience static function that will return a file name selected by the user. The file does not have to exist.
(强调我的)
fname, _ = QFileDialog.getSaveFileName(
parent=self, directory=os.getcwd(), caption="Select a file"
)