2016-03-02 75 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