0
我目前正在为我的PyQt GUI实现模型视图体系结构。这是目前我的代码更简单但代表性的版本。PyQt,当按下按钮连接到不同类的方法时,代码永远不会退出__init__
class Model(QtGui.QWidget):
def __init__(self):
super(Model, self).__init__()
self.openDir = '/some/file/dir/'
def openFile(self):
openFileName = QtGui.QFileDialog.getOpenFileName(None, "Open File",self.openDir,"AllFiles(*.*)")
openFile = open(openFileName, 'r')
...
class View(QtGui.QWidget):
def__init__(self):
super(View, self).__init__()
...
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_())
所以,当我点击“打开”按钮,我想打电话给Model
类openFile
方法,但是当我做单击它,它进入Model.__init__
但它从来没有真正进入openFile
方法。我需要解决什么问题?
编辑1:修正了所有错误。
编辑2:对于那些面临类似问题的人,这里是Fred S提供的解决方案和固定代码。
class Model(QtGui.QWidget):
def __init__(self):
super(Model, self).__init__()
self.openDir = '/some/file/dir/'
def openFile(self):
openFileName = QtGui.QFileDialog.getOpenFileName(None, "Open File",self.openDir,"AllFiles(*.*)")
openFile = open(openFileName, 'r')
...
class View(QtGui.QWidget):
def__init__(self):
super(View, self).__init__()
...
self.button = QtGui.QPushButton("Open")
...
self.model = Model()
self.button.clicked.connect(self.model.openFile)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
mainWindow = View()
mainWindow.show()
sys.exit(app.exec_())
谢谢你弗雷德!一旦我回到我的机器,我会尝试它。根据你的笔记:1)哎呀,我正在抄录,忘记忽略父母。它应该是'super(Model,self).__ init __()'2)错别字对不起,应该是'openFile = open(openFileName,'r')'3)'self.loadDir == self.openDir' 4)我隐约记得尝试这个,但是当我回到我的机器时我会确定地知道。我在原来的问题中改变了所有这些。 – Krin123 2014-10-28 17:39:18
谢谢Fred!这就像魅力:)你可能可以向我解释为什么self.model.openFile工作,但模型()。openFile不起作用?是否因为你必须首先初始化实例? – Krin123 2014-10-28 20:11:33
LOL我希望我知道如何解决这个问题,而无需反复试验。我已经使用了一年多的pyside,而且我仍然发现我无法解释的奇怪故障。它和PyQt4之间的奇怪差异。 – 2014-10-28 20:22:26