1

これは私を夢中にさせており、私はあちこち検索しましたが、この問題を抱えている人を見つけることができません. 答えを探すための検索ではうまく説明できないので、あなたに来ます。

これは私のコードです:

def browse(self):

    directory = QtGui.QFileDialog.getOpenFileName (self, "Find Files")

    if directory:
        self.newfilepath.setText(str(directory))
    else:
        self.newfilepath.setText('No file selected')

結果をウィンドウのフィールドに入れようとしています。それを後で取得するためにsqlite dbにプッシュします。残念ながら、次のコードでは、修正できないと思われる結果が得られます。

    name1 = (self.newdescript.toPlainText())

結果は次のとおりです。

(u'F:/GeoDatabase/GeoDatabase2.py', u'All Files (*.*)')

私が欲しいのはただ:

F:/GeoDatabase/GeoDatabase2.py

または多分:

'F:/GeoDatabase/GeoDatabase2.py'

他のすべてのがらくたではなく、パス名だけを取得するにはどうすればよいですか。私が何をしても違いがないように見え、他にどこに向かうべきかわかりません。

4

1 に答える 1

1

これは、PyQt4 と PySide のわずかな違いが原因です。

PyQt4 では、すべての静的QFileDialogメソッド ( などgetOpenFileName) が単一の文字列を返すか、(の場合getOpenFileNames) 文字列のリストを返します。

ただし、PySide ではgetExistingDirectory単一の文字列を返しますが、他のすべてのメソッドは、文字列/文字列のリストと選択したフィルターで構成されるタプルを返します。

これを回避するには、PySide でコードを次のようにする必要があります。

def browse(self):
    path, filter = QtGui.QFileDialog.getOpenFileName(self, "Find Files")
    if path:
        self.newfilepath.setText(path)
    else:
        self.newfilepath.setText('No file selected')

PS :

厳密に言えば、ここでは PySide の方が正しいです。C++ API は、その引数の 1 つを変更して、選択されたフィルターを提供するため、タプルを返すことは、それを表す最も Pythonic な方法です。

PyQt4 は変更された引数を尊重しませんが、その結果としておそらくより直感的です。

PPS :

PyQt5 では、パスとフィルターのタプルも返すようになったため、PySide との違いはなくなりました。

于 2013-11-15T19:45:44.147 に答える