2012-08-27 44 views
0

所以我想讓我的GUI窗口從用戶那裏收集數據並在用戶確認選擇完成後打開指定的文本文件。我創建了一個全局字典來存儲用戶放入的信息,但我不知道如何將這個字典發送到下一個函數調用。我一直在收到錯誤「全球名稱」fileName'未定義「。請幫助!!PyQt4 - 如何在不同的可調參數之間共享變量?

示例代碼:

class guiFindFiles(QtGui.QWidget): 
fileName = {} 

def __init__(self, parent=None): 
    QtGui.QWidget.__init__(self, parent) 

    #Create window 
    self.setFixedSize(400,180) 
    self.setWindowTitle("Choose the files to use") 
    self.setAttribute(QtCore.Qt.WA_DeleteOnClose) 
... 

    #Connect all the signals and slots 
    self.connect(self.qFileButton, QtCore.SIGNAL("clicked()"), self.loadFile) 
    self.connect(self.lhButton, QtCore.SIGNAL("clicked()"), self.loadFile) 
    self.connect(self.oldQButton, QtCore.SIGNAL("clicked()"), self.loadFile) 
    self.connect(self.oldQCB, QtCore.SIGNAL("stateChanged(int)"), self.status) 
    self.connect(self.run, QtCore.SIGNAL("rejected()"),self.close) 
    self.connect(self.run, QtCore.SIGNAL("accepted()"),self.goForth) 

def loadFile(self):      
    selFile = QtGui.QFileDialog.getOpenFileName() 

    if self.sender() == self.qFileButton: 
     fileName["currentQ"]=selFile 
     self.qFileTF.setText(selFile) 
    elif self.sender() == self.lhButton: 
     self.lhFileTF.setText(selFile) 
     fileName["currentLH"]=selFile 
    else: 
     self.oldQTF.setText(selFile)  
     fileName["oldQ"]=selFile 

def goForth(self): 
    print fileName[0] 
    self.close() 

錯誤消息:

回溯(最近通話最後一個): 文件 「qDis.py」,行80,在使用loadFile 文件名[ 「currentQ」] = selFile NameError:全局名稱「文件名」沒有定義

+0

請正確縮進。 –

回答

0

在你loadFile方法,你正在尋找fileName一個在你的函數中沒有定義的變量,也不在你的模塊的其餘部分,因此是NameError

很可能,您的意思是使用self.fileName,您先前定義的類屬性。

相同的評論和建議適用於您的其他方法goForth

作爲一個旁註:你真的需要fileName是一個類屬性?難道它不僅僅是您在__init__方法中定義的實例屬性?

+0

謝謝你的幫助,增加自我。解決了這個問題。 – Orchainu

+0

我在測試如果沒有「自我」,我仍然可以通過其他函數來識別變量,它不必是類屬性。雖然它會讓事情變得更容易,因爲我有第二個GUI,它使用我從這本字典中獲得的信息來程序化地生成標籤。 – Orchainu

+0

但是你會在某處定義一個'guiFindFile'的實例,對吧?所以你仍然可以訪問這個實例的'fileName'屬性。 –