2016-03-02 79 views
0

我有一個簡單的PyQt4示例。
運行時,它顯示一個帶按鈕的QMainWindow。 如果您單擊該按鈕,則會創建第二個QMainWindow。 如果你再次點擊它,你會得到2秒的窗口。Python PyQt4:單個子窗口

什麼是優雅和簡單的方法來防止在這個例子中超過1秒的窗口?

import sys 
from PyQt4.QtGui import * 

class win2(QMainWindow): 
    def __init__(self, parent=None): 
     QMainWindow.__init__(self,parent) 

     layout = QVBoxLayout() 

     label = QLabel(self) 
     label.setText('This is win2') 
     layout.addWidget(label) 

     self.adjustSize() 

class MainWindow(QMainWindow): 
    def __init__(self): 
     QMainWindow.__init__(self) 

     layout = QVBoxLayout() 

     button1 = QPushButton("win2", self) 
     layout.addWidget(button1) 

     button1.clicked.connect(self.showwin2) 

    def showwin2(self): 
     w2 = win2(self) 
     w2.show() 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    mainWin = MainWindow() 
    mainWin.show() 
    sys.exit(app.exec_()) 

回答

0

您的函數每次按下按鈕時都會創建類win2的新實例。爲了抑制這種行爲,只能調用show和raise_函數,而不是創建一個新的實例。

我會創建類如下,只使用按鈕'顯示'窗口。測試並按預期工作。在分配變量時也要考慮使用self,以便可以在整個類實例中訪問它們。

class MainWindow(QMainWindow): 
    def __init__(self): 
     QMainWindow.__init__(self) 

     layout = QVBoxLayout() 

     button1 = QPushButton("win2", self) 
     layout.addWidget(button1) 
     button1.clicked.connect(self.showwin2) 
     self.w2 = win2(self) 

    def showwin2(self): 
     self.w2.show() 
     self.w2.raise_() 
+0

真棒,優雅和簡單。現在似乎很明顯。謝謝! – panofish