【问题标题】:Python PyQt4: Single child windowPython PyQt4:单个子窗口
【发布时间】:2016-03-03 06:23:50
【问题描述】:

我有一个简单的 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_())

【问题讨论】:

    标签: python pyqt4


    【解决方案1】:

    每次按下按钮时,您的函数都会创建一个类 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_()
    

    【讨论】:

    • 真棒,优雅和简单。现在看起来很明显。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 2018-04-25
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    相关资源
    最近更新 更多