Python PyQt4:独生子window

Python PyQt4: Single child window

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

在此示例中防止超过 1 秒 window 的优雅而简单的方法是什么?

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_())

每次按下按钮时,您的函数都会创建一个 class win2 的新实例。要抑制此行为,只需调用 show 和 raise_ 函数,而不是创建新实例。

我会按如下方式创建 class,并且只使用按钮 'show' window。经过测试并按预期工作。还可以考虑在分配变量时使用 self,以便可以在整个 class 实例中访问它们。

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_()