2014-10-27 125 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