2012-08-31 38 views
6

私はコードではPyQtはファイルがありません

を使用して簡単なコードを書いています、私はなく、通常の方法、すなわちと、私は静的関数を使用して、それを呼び出すときしかし、すべてが正常に動作し、QFileDialogを呼び出しますusing dialog.exec_(),ファイルダイアログウィンドウにファイルが表示されません。

ファイルの完全なパスを入力した後で、ファイルダイアログウィンドウでそのファイルを見ることができます。 この問題は、FileDialoghandler関数を呼び出す場合にのみ発生します。私がQFileDialogを呼び出す方法に関わらず、それをしなければ、すべて正常に動作します。 また、この問題はLinuxのみで、Windows7ではすべて正常に動作します。 これがPyQtのバグかどうか、私はここで何か不足していますか?次のように

コードは次のとおりです。

import sys 
from PyQt4.QtCore import Qt 
from PyQt4.QtGui import * 
from PyQt4.QtCore import QAbstractFileEngine 
from PyQt4.QtCore import QAbstractFileEngineHandler 
from PyQt4.QtCore import QFSFileEngine 

class FileDialogHandler(QAbstractFileEngineHandler): 
    def create(self,filename): 
     if str(filename).startswith(':'): 
      return None # Will be handled by Qt as a resource file 
     print("Create QFSFileEngine for {0}".format(filename)) 
     return QFSFileEngine(filename) 

class Example(QMainWindow): 

    def __init__(self): 
     super(Example, self).__init__() 

     self.initUI() 

    def initUI(self):  

     self.textEdit = QTextEdit() 
     self.setCentralWidget(self.textEdit) 
     self.statusBar() 

     openFile = QAction(QIcon('open.png'), 'Open', self) 
     openFile.setShortcut('Ctrl+O') 
     openFile.setStatusTip('Open new File') 
     openFile.triggered.connect(self.showDialog) 

     menubar = self.menuBar() 
     fileMenu = menubar.addMenu('&File') 
     fileMenu.addAction(openFile)  

     self.setGeometry(300, 300, 350, 300) 
     self.setWindowTitle('File dialog') 
     self.show() 

    def showDialog(self): 
     handler = FileDialogHandler() 
     #using QFileDialog.getOpenFileName works fine 
     fname = QFileDialog.getOpenFileName(None, 'Open file', '/home','All files (*.*)') 
     #dialog = QFileDialog() 
     #dialog.setOption(QFileDialog.DontUseNativeDialog,False) 
     #if dialog.exec_(): 
      #fname = dialog.selectedFiles() 
     #else: 
      #fname = None 
     f = open(fname, 'r')   
     with f:   
      data = f.read() 
      self.textEdit.setText(data) 

def main(): 
    app = QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 
+0

Linuxでは私にとってはうまくいかないことを確認しました。しかし、同じコードがPySideで動作します。だから、おそらくPyQtのバグです。私は[PyQtメーリングリスト](http://www.riverbankcomputing.com/mailman/listinfo/pyqt)に報告して決定的な答えを得ることをお勧めします。 – ekhumoro

+0

OS Xで動作するようです。なぜあなたは本当に 'QFSFileEngine'を必要としますか? –

+0

'f = open(fname、 'r')に注意してください。 f 'である。 2つの文を 'open(fname、 'r')をfとして' single 'に入れることができるだけでなく、とりわけ 'try ... except IOError'にカプセル化して、ユーザーが 'Cancel'を押したとき(すなわち、 'fname =" "') –

答えて

6

私はGetOpenFileNameのではない長い前に同様の問題が発生しました。私にとって解決策は、バックエンドをネイティブからQt独自のダイアログの実装に変更することでした。

私はこの呼び出し構文に変更した後、私は再び何の問題も起こりませんでした。

関連する問題