Python PyQt4:单个子窗口

时间:2016-03-02 22:12:24

标签: python pyqt4

我有一个简单的PyQt4示例 运行时,它会显示带有按钮的QMainWindow。 如果单击该按钮,则会创建第二个QMainWindow。 如果再次单击它,则会获得2秒窗口。

在此示例中,防止超过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_())

1 个答案:

答案 0 :(得分: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_()