我想将 QCheckBox 添加到 QFileDialog。我想使用静态方法 QFileDialog.getSaveFileName() 来显示对话框。
我发现了几个类似的问题,都在 C++ 中:
我尽力将这些讨论翻译成 python,但还没有找到解决方案。我的代码运行,但复选框不显示,即使我使用 QFileDialog.DontUseNativeDialog。
这就是我对 QFileDialog 进行子类化的方式:
from PyQt5.QtWidgets import QFileDialog
from PyQt5.QtWidgets import QCheckBox
class ChkBxFileDialog(QFileDialog):
def __init__(self, chkBxTitle=""):
super().__init__()
self.setOption(QFileDialog.DontUseNativeDialog)
chkBx = QCheckBox(chkBxTitle)
self.layout().addWidget(chkBx)
#end __init__
#end ChkBxFileDialog
我以两种方式运行它。
选项 1(带有额外的 QFileDialog.DontUseNativeDialog):
import sys
from PyQt5.QtWidgets import QApplication
if __name__ == "__main__":
app = QApplication(sys.argv)
fileDialog = ChkBxFileDialog(chkBxTitle="Chkbx")
fileName = fileDialog.getSaveFileName(filter='*.txt', initialFilter='*.txt',
options=QFileDialog.DontUseNativeDialog)[0]
sys.exit(app.exec_())
选项 2(没有额外的 QFileDialog.DontUseNativeDialog):
import sys
from PyQt5.QtWidgets import QApplication
if __name__ == "__main__":
app = QApplication(sys.argv)
fileDialog = ChkBxFileDialog(chkBxTitle="Chkbx")
fileName = fileDialog.getSaveFileName(filter='*.txt', initialFilter='*.txt')[0]
sys.exit(app.exec_())
该复选框不会与任一选项一起显示。选项 1 使用不同的窗口样式。选项 2 显示了典型的 PyQt QFileDialog。
有谁知道我错过了什么?
我想使用静态方法
QFileDialog.getSaveFileName()
来显示对话框
那是不可能的。C++ 代码中定义的静态方法对您的派生类一无所知,因此它将创建基类的一个实例,其中不包含您的修改。您必须显式实例化您的派生类,调用exec()
实例,检查返回代码并可能调用其selectedFiles()
方法以查看选择了哪些文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句