2016-03-27 3 views
1

私はpythonファイルとqmlファイルを持っています。FileDialogはPython3と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() 

答えて

1

「奇妙な」ファイル・ダイアログがQMLに完全に書き込まれているデフォルトの実装です。プラットフォームのネイティブダイアログまたは組み込みのQFileDialogを作成できない場合、Qtはuse this as a fallbackになります。

例でqmlフォールバックを使用するのは、QGuiApplicationを使用している理由です。これはウィジェットベースではありません。 QApplicationに切り替えると、例は正常に動作します。

# from PyQt5.QtGui import QGuiApplication 
from PyQt5.QtWidgets import QApplication 
... 
# app = QGuiApplication([]) 
app = QApplication([]) 
関連する問題