2014-10-27 124 views
0

我目前正在爲我的PyQt GUI實現模型視圖體系結構。這裏有一個簡單,但代表我的代碼目前版本(因爲我的是waaaay太長)PyQt clicked.connect自動連接

class Model(QtGui.QWidget): 
    def __init__(self): 
     self.openDir = '/some/file/dir/' 
    def openFile(self): 
     openFileName = QtGui.QFileDialog.getOpenFileName(None, "Open File",self.loadDir,"AllFiles(*.*)") 
     open = open(openFileName, 'r') 
     ... 

class View(QtGui.QWidget): 
    def__init__(self): 
    ... 
    self.button = QtGui.QPushButton("Open") 
    ... 
    self.button.clicked.connect(Model().openFile()) 

if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    mainWindow = View() 
    mainWindow.show() 
    sys.exit(app.exec_()) 

然而,即使我沒有按下按鈕時,信號已經發出後,QFileDialog窗口自動出現。


編輯1:

因爲我遇到了關於同一主題的一個新的問題,我已經打開了新的問題,更多的投入。

回答

1

我認爲我看到了這個問題。

self.button.clicked.connect(Model().openFile()) 

應該

self.button.clicked.connect(Model().openFile) 

在第一種情況下,我們在調用中openFile方法,並把返回值來「連接」。在第二種情況下,您將方法本身傳遞給「連接」。

+0

我第一次得到錯誤時嘗試了它,但是當我說'Model()。openFile'時,我得到一個新的錯誤,說'Model'對象沒有屬性'按鈕'。所以我試着製作'self.button''Model.button',但是這也不能正常工作... – Krin123 2014-10-28 14:24:06

+0

我想你可能需要展示更多的代碼才能理解這個異常。或者至少是追溯。我在你的問題中看到的代碼沒有意義。 – 2014-10-28 16:23:30

+0

我實際上停止瞭解上面提到的問題,但面臨一個新問題,並在此處打開了一個新問題:http://stackoverflow.com/questions/26612877/pyqt-when-button-is-pressed-to-connect-到-A-方法-的-不同分類代碼-內華達州我會嘗試詳細說明代碼並添加更多細節。 – Krin123 2014-10-28 16:30:09