首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PyQt:为什么新窗口在打开后立即关闭

PyQt:为什么新窗口在打开后立即关闭
EN

Stack Overflow用户
提问于 2017-02-15 19:04:44
回答 1查看 8.3K关注 0票数 7

我有一个主窗口,我想在按下按钮时打开另一个窗口(而不是对话框)。我的问题是,新窗口几乎在打开后立即关闭。我已经阅读了可用的文章,并尝试实现解决方案,但似乎没有运气。这是我的全部代码:

代码语言:javascript
运行
复制
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class MainWindow (QMainWindow):
    def __init__(self):
        win = QWidget()
        win.adjustSize()
        grid=QGridLayout()
        grid.setRowStretch(0, 1)
        grid.setRowStretch(1, 1)
        grid.setRowStretch(5, 1)
        for i in range(0,5):
            for j in range(0,4):
                if i==0 and j==2:
                    l1=grid.addWidget(QLabel("Choose an option:"),i,j, 2, 2)
                if i==2 and j==1:
                    b1= QPushButton("Get Best Match")
                    grid.addWidget(b1,i,j)
                elif i==2 and j==2:
                    b2=QPushButton("Button2")
                    grid.addWidget(b2,i,j)
                elif i==2 and j==3:
                    b3=QPushButton("Button3")
                    grid.addWidget(b3,i,j)
        b5=grid.addWidget(QLabel(""),3,4) 
        b4=QPushButton("Button4")
        grid.addWidget(b4,2,4)
        w1=b1.clicked.connect(window1)
        b2.clicked.connect(Win2)
        b3.clicked.connect(Win3)
        b4.clicked.connect(Win4)            
        win.setLayout(grid)
        win.setGeometry(100,100,width//2,height//2,)
        win.setWindowTitle("PYQT")
        win.show()
        win.setStyleSheet("""
        .QPushButton {
        height: 30px ;
        width: 20px ; 
        }
        .QLabel {
        qproperty-alignment: AlignCenter;
        font-size:12pt
         }

         """)
        sys.exit(app.exec_())

class window1():
    def __init__(self, pressed):
        super(window1, self).__init__()
        win1 = QWidget()
        win1.adjustSize()
        win1.setGeometry(100,100,width//2,height//2,)
        win1.setWindowTitle("Get Best Match")
        win1.show()

if __name__ == '__main__':

    app = QApplication(sys.argv)
    screen_resolution = app.desktop().screenGeometry()
    width, height = screen_resolution.width(), screen_resolution.height()
    main=MainWindow()

有没有人能帮我一下?我已经被困了一段时间了。

EN

Stack Overflow用户

回答已采纳

发布于 2017-02-15 20:10:15

窗口正在消失,因为它在__init__函数结束时超出了作用域。由于没有对它的进一步引用,python垃圾收集器将其删除。

通常,PyQt对象会保留对其子对象的引用,因此这不是问题。由于您希望在单独的窗口中打开小部件,因此不能为其分配父级,因此需要在其他地方存储对它的引用。最明显的候选者是MainWindow类。

您可以通过使用MainWindow而不是win = QWidget()来使win成为self.win = QWidget()的成员。该窗口现在将在MainWindow的整个生命周期内保持打开状态,除非您将其关闭。

您的代码还存在其他问题,但这解释了窗口消失的原因。

票数 24
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42247583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档