2012-06-15 92 views
0

我剛開始嘗試構建簡單的GUI,因爲我一直使用命令行腳本並希望探索更多。我同時使用PyQt4的和Python的最新版本3.第二個窗口沒有按下按鈕顯示

的問題是,給定下面的代碼,就點擊第一窗口的按鈕,第二個將不顯示了,但我不知道爲什麼。我錯過了什麼?該腳本功能齊全(,當然,除了第二個窗口部分),所以它只是一個複製/粘貼來嘗試它。

import sys 
from PyQt4 import QtCore, QtGui 

class GreetWindow(QtGui.QMainWindow): 
    def __init__(self): 
     # main init 
     QtGui.QMainWindow.__init__(self) 
     self.setWindowTitle('File Checker!') 
     self.centralWidget = QtGui.QWidget() 
     self.tLabel = QtGui.QLabel('Hello, and welcome! Please, close me!', self.centralWidget) 
     self.bClose = QtGui.QPushButton('Close', self.centralWidget) 
     # layout 
     self.lVBox = QtGui.QVBoxLayout() 
     self.lVBox.setSpacing(2) 
     self.lVBox.addWidget(self.tLabel) 
     self.lVBox.addWidget(self.bClose) 
     # signal connections 
     self.connect(self.bClose, QtCore.SIGNAL('clicked()'), self, QtCore.SLOT('close()')) 
     self.connect(self.bClose, QtCore.SIGNAL('clicked()'), self.showSecond) 
     # layout combination 
     self.centralWidget.setLayout(self.lVBox) 
     self.setCentralWidget(self.centralWidget) 
    def showSecond(): 
     self.theSecond = SecondWindow() 
     self.theSecond.show() 

class SecondWindow(QtGui.QMainWindow): 
    def __init__(self): 
     QtGui.QMainWindow.__init__(self) 
     self.setWindowTitle('This is the second!') 
     self.centralWidget = QtGui.QLabel('Mission accomplished') 
     self.setCentralWidget(self.centralWidget) 

def main(): 
    app = QtGui.QApplication(sys.argv) 
    ex = GreetWindow() 
    ex.show() 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 

順便說一句,我真的很欣賞評論家在這個簡單的腳本編碼的方式。我現在開始使用圖形用戶界面,我想以最可能的pythonic方式開始。謝謝大家!

+1

考慮像這樣連接信號和插槽:'self.bClos​​e.clicked.connect(self.close)'。 [** here **](http://qt-project.org/wiki/Signals_and_Slots_in_PySide)是一個很好的文檔。 –

回答

0

確保運行在一個控制檯應用程序,所以你可以看到錯誤輸出:

TypeError: showSecond() takes no arguments (1 given) 

事實上,存在的showSecond聲明的錯誤:沒有self!應該是這樣的:

def showSecond(self): 
相關問題