2012-06-15 58 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): 
相关问题