python - FileDialog 显示 Python3 与 QML 的不同界面

标签 python qml pyqt5 qfiledialog

我有一个 python 文件和一个 qml 文件。

qml 文件中有一个按钮可以加载 FileDialog。当我直接使用qmlscene test.qml时,FileDialog就可以了。但是当我使用 python3 main.py 时,FileDialog 很奇怪,我无法通过它选择文件。请告诉我如何修复它。

这是正常的文件对话框:

enter image description here

这是奇怪的文件对话框:

enter image description here

代码如下:

测试.qml

import QtQuick 2.4
import QtQuick.Dialogs 1.2
import QtQuick.Controls 1.3
import QtQuick.Controls.Styles 1.3
import QtQuick.Layouts 1.1

Rectangle {
        width: 400 
        height:30 



        Button {
                id: save
                text: "save"
                onClicked: {
                        fileDialogLoader.item.open()
                    }
            }
        Loader {

                id: fileDialogLoader
                sourceComponent: fileDialog_com
            }

        Component{
                id: fileDialog_com


                FileDialog {
                        id: fileDialog
                        title: "select a file"
                        nameFilters: ["pdf files(*.pdf)"]
                        selectExisting: false

                        onAccepted: {
                                console.log(" you choose: "+ fileDialog.fileUrls)
                            }
                    }
            }
    }

main.py

#!/usr/bin/env python
# encoding: utf-8

from PyQt5.QtCore import  QUrl, QObject, pyqtSlot
from PyQt5.QtGui import QGuiApplication
from PyQt5.QtQuick import QQuickView

class MyMain(QObject):
    pass


if __name__ == '__main__':
    path = 'test.qml'
    app = QGuiApplication([])
    view = QQuickView()
    con = MyMain()
    context = view.rootContext()
    context.setContextProperty("con",con)
    view.engine().quit.connect(app.quit)
    view.setSource(QUrl(path))
    view.show()
    app.exec()

最佳答案

“奇怪的”文件对话框是完全用 QML 编写的默认实现。 Qt将use this as a fallback当它无法创建平台的 native 对话框或内置 QFileDialog 时。

您的示例使用 qml 后备的原因是因为您使用的是 QGuiApplication,它不是基于小部件的。如果您切换到QApplication,您的示例将按预期工作:

# from PyQt5.QtGui import QGuiApplication
from PyQt5.QtWidgets import QApplication
...
# app = QGuiApplication([])
app = QApplication([])

关于python - FileDialog 显示 Python3 与 QML 的不同界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36248068/

相关文章:

Python 日志记录方面的最佳实践

python - 启动、停止和继续 Google App Engine BulkLoader

python - ipython笔记本中的绘图宽度设置

qt - 在调整大小期间不要重新绘制窗口

python - 如何使用 pyinstaller 将多个 .py 文件构建为单个可执行文件?

python - 为什么 pyserial 在有 11 个参数时说我已经给出了 12 个参数?

c++ - QML Qt- 解析 XML 并将其转换为 LisView 的 ListModel

qt - 为什么在 QML 中查找窗口大小的代码不起作用?

python - 由于缩放,pyqtgraph中的图像被隐藏

python - 如何在写入数据库时​​运行加载启动屏幕