2013-11-15 25 views
1

這讓我發瘋,而且我搜遍遍地,找不到任何有此問題的人。在尋找答案的搜索中我無法很好地描述它,所以我正在找你。QtGui.QFileDialog統一碼名稱?

這是我的代碼:

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數據庫以供稍後檢索。不幸的是,下面的代碼給了我一個我似乎無法修復的結果。

name1 = (self.newdescript.toPlainText()) 

結果是:

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

我要的恰恰是:

F:/GeoDatabase/GeoDatabase2.py 

或可能:

'F:/GeoDatabase/GeoDatabase2.py' 

我如何得到它給我的只是路徑名稱並不是所有其他垃圾。我所做的沒有任何事情似乎有所作爲,我不知道還有什麼可以改變的。

+0

無法重現。請顯示一個*最小*示例*,我們可以運行*顯示您的問題。 – Bakuriu

+0

@Bakuriu。我不明白你的抱怨:這個問題似乎很清楚,所提供的代碼和輸出完全足以診斷問題。但標籤本來可以更好。 – ekhumoro

+0

@ekhumoro不,它不是。正如我在評論中所說的,我寫了一個包含這些行的小代碼,我沒有任何問題。 OP沒有描述其情況。如果他發佈了一個完整的示例,那麼很明顯,錯誤是由於使用PySide而不是PyQt,即使沒有提供標記。 – Bakuriu

回答

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修改了其中的一個參數來提供選定的過濾器,因此返回元組是表示該過程的最基本的方法。

PyQt4無法兌現修改的參數,但可能更直觀。

PPS

對於PyQt5,不再有與​​PySide任何差異,因爲它現在也返回路徑(S)和過濾器的一個元組。

+0

+1。請注意:在PyQt5中,所提到的方法還會返回一個結果和過濾器的元組,以匹配C++ API。所以這個區別只適用於PyQt4。 – mata

+0

@mata。謝謝 - 我懷疑可能是這種情況,但沒有得到解決。我現在通過您的更正更新了我的答案。 – ekhumoro