2017-05-09 14 views
0

PYQT5ファイルピッカーを使用しようとしていますが、紛失しているものがあります。私は2つの問題があります。最初は、ファイルダイアログボックスが開き、ファイルを選択するときです。プログラム全体がクラッシュし、AttributeError: 'list' object has no attribute 'seek'QWaitCondition: Destroyed while threads are still waitingが端末に表示されます。 2番目は、ファイルダイアログでキャンセルを押すと、プログラム全体がクラッシュし、nboundLocalError: local variable 'newdata' referenced before assignmentQWaitCondition: Destroyed while threads are still waitingと表示されます。私が望むのは、ダイアログをポップアップしてファイルを選択し、そのファイルの内容をその変数にロードさせることです。私は何がうまくいかないのか分かりません。私は現在のコードを以下に掲載しました。どんなアドバイスや助けも大歓迎です。GUIファイルピッカー

def open(self): 
    options = QFileDialog.Options() 
    options |= QFileDialog.DontUseNativeDialog 
    try: 
     fileToOpen = QFileDialog.getOpenFileNames(self,"Open File", "","All Files (*);;Python Files (*.py)", options=options) 
    except: 
     pass 

    pdb.set_trace() 
    if fileToOpen: 
     with ZipFile(fileToOpen, 'r') as myzip: 
      json_data_read = myzip.read('digest.json') 
      newdata = json.loads(json_data_read) 

    Functions.Loads = newdata[1] 
+0

[最小限で完全で検証可能なサンプルの作成方法](http://stackoverflow.com/help/mcve)をご検討ください。 – Matho

+0

期待している特定の例外を除いて 'except'を使用しないでください。単に例外を無視するだけではありません。示されたコードでは、 'fileToOpen'が定義されていないため、このように処理された例外(not)はフォローアップ例外につながります。これは 'UnboundLocalError'につながります。 – BlackJack

+0

@BlackJack、それを説明してくれてありがとう。私は実際にそのエラーに遭遇し、このポストからそれを修正しました。私は常に私のコーディングの実践を改善しようとしているので、コメントに感謝します。 – laxer

答えて

1

getOpenFilenameはタプルを返します。 http://pyqt.sourceforge.net/Docs/PyQt5/pyqt4_differences.html#qfiledialog

何のファイル名が存在しない場合は、newDataを初期化しないため、第二の問題は、次のとおりです。あなたはpyqt5がgetOpenFilenameAndFilterを呼び出すためです

fileToOpen, _ = getOpenFilename(...) 

のような第2の戻り値はそれを呼んでほしいです。

+0

パーフェクト私はちょうど 'try'ステートメントでそれをラップし、問題を修正しました。あなたのアドバイスをありがとう – laxer

関連する問題