2012-07-31 24 views
1

我可以使用插槽函數的返回語句爲不同的'lambda'd'插槽提供輸入嗎?PyQt將文件名傳遞給通用函數

東西沿着這我知道有沒有以下的線 - X和Y似乎只是布爾:

class : mainwindow(QtGui.QMainWindow, Ui_test): 
    def __init__ (self, parent = None): 
     super(mainwindow,self).__init__(parent) 
     self.setupUi(self) 
     X = QtCore.QObject.connect(self.actionOpenX, OtCore.SIGNAL("triggered()", self.file_dialog) 
     Y = QtCore.QObject.connect(self.actionOpenY, OtCore.SIGNAL("triggered()", self.file_dialog) 
     QtCore.QObject.connect(self.actionProcess, QtCore.SIGNAL("triggered()", lambda : self.updateUi(X,Y)) 

def update_Ui(self, X, Y): 
    for line in X: 
     for line in Y: 
      "do something" 

def file_dialog(self) 
    filedlg = QtGui.QFileDialog(self) 
    self.filename = filedlg.getOpenFileName() 
return self.filename 

我相信這樣的事情是可能的,我有嚴重的腦凍大氣壓。

提前任何幫助

回答

1

QObject.connect的返回值只是一個布爾值,表示連接是成功還是失敗。它與插槽的返回值無關。

從您的示例代碼看來,您希望在一個步驟中從用戶那裏獲取一些文件名,然後在單獨的第二步中處理它們。

爲了做到這一點,文件名需要保存在某個地方,直到用戶決定開始處理步驟。一種常見的方法是將選定的文件名顯示在列表窗口小部件或行編輯組中,以便稍後檢索它們。或者,文件名可以簡單地附加到內部列表(即類實例的私有屬性)。

+0

感謝ekhumoro - 我沒有想過如何在列表小部件中存儲文件名。我將嘗試從列表小部件中提取文本,因爲這已經超過了我對全局變量的不滿。 – 2012-08-01 10:34:33

0

X = QtCore.QObject.connect(self.actionOpenX, OtCore.SIGNAL("triggered()", self.file_dialog)千恩萬謝是恢復總是一個布爾值,那麼,爲什麼不給一個嘗試使用全局變量像global x並設置file_dialog的x值?

+0

我曾經想過這個Achayan,事實上這是我目前的實現如何工作,但它不知怎麼的不雅,並且坐得不好 - 我通常不喜歡全局變量。如果可能的話,我希望能有一個更好的解決方法 – 2012-07-31 20:42:07