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