0

そのため、GUI ウィンドウでユーザーからデータを収集し、ユーザーが選択が行われたことを確認した後に、指定されたテキスト ファイルを開くようにします。ユーザーが入力した情報を格納するグローバル ディクショナリを作成しましたが、このディクショナリを次の関数呼び出しに送信する方法がわかりません。「グローバル名 'fileName' が定義されていません」というエラーが表示され続けました。助けてください!!

サンプルコード:

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 fileName["currentQ"]=selFile NameError: グローバル名 'fileName' が定義されていません

4

1 に答える 1

0

あなたのメソッドでは、loadFileを探しています。つまり、関数でもモジュールの残りの部分でも定義されていない loval 変数、したがって.fileNameNameError

ほとんどの場合、以前に定義した class 属性を使用するself.fileNameつもりでした。

同じ意見と提案が他の方法にも当てはまりますgoForth

fileName補足として: 本当にクラス属性である必要がありますか? メソッドで定義する単なるインスタンス属性ではないでしょう__init__か?

于 2012-08-27T20:42:30.927 に答える