2015-07-20 90 views
0

我是Python GUI编程的新手。目前我正在尝试创建按钮,一旦我点击它,它应该打开一个新的窗口/框架。pyqt4按钮点击事件打开新框架/窗口

这是我的Python GUI代码:

class Window(QtGui.QMainWindow): 
    def __init__(self): 
     super(Window, self).__init__() 
     palette = QPalette() 
     palette.setBrush(QPalette.Background,QBrush(QPixmap("blue-gradient-2.jpg"))) 
     self.setPalette(palette) 

     self.setGeometry(300, 300, 600, 400) 
     self.setWindowTitle("Testing Window") 
     # self.setWindowIcon(QtGui.QIcon('')) 
     self.home() 


    def qr(self): 
     backbtn = QtGui.QPushButton("Back" , self) 
     backbtn.clicked.connect(home) 
     backbtn.resize(100, 100) 
     backbtn.move(100, 100) 
     self.show() 

    def home(self): 
     btn = QtGui.QPushButton("QR Code", self) 
     btn.clicked.connect(qr) 

     btn.resize(100, 100) 
     btn.move(100, 100) 

     btn1 = QtGui.QPushButton("Face Recognition", self) 
     btn1.clicked.connect(QtCore.QCoreApplication.instance().quit) 

     btn1.resize(200, 100) 
     btn1.move(300, 100) 

     self.show() 


def run(): 
    app = QtGui.QApplication(sys.argv) 
    GUI = Window() 
    sys.exit(app.exec_()) 

run() 

其实,这段代码我从一个教程了。我甚至看到Tkinter可以打开一个新的窗口/框架。但是PyQt没有任何教程打开一个新的窗口/框架。

我得到的错误是:

Traceback (most recent call last): 
    File "pyqt.py", line 47, in <module> 
    run() 
    File "pyqt.py", line 44, in run 
    GUI = Window() 
    File "pyqt.py", line 16, in __init__ 
    self.home() 
    File "pyqt.py", line 28, in home 
    btn.clicked.connect(qr) 
NameError: global name 'qr' is not defined 

我相信应该有对付这种错误适当的方式。

回答

0

你的问题是,你还没有定义一个全局函数qr()。但既然你已经定义的方法具有相同的名称,我怀疑你的意图是在你qr方法

backbtn.clicked.connect(self.home) 

要打开PyQt4的一个新的窗口,做

btn.clicked.connect(self.qr) 

home()同一账户就像在没有父项的小部件上调用widget.show()一样简单。

+0

那么,这有助于解决我的错误,但当我点击打开新窗口它现在的工作,我可以知道为什么.. – raaj5671

+0

@ raaj5671'self.show()'将无法正常工作,因为该窗口已显示。你需要创建一个新的独立窗口,并显示一个, – tynn

+0

这意味着我必须创建一个新的类?例如, – raaj5671

相关问题