2015-07-20 92 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

相關問題