【问题标题】:PyQt5 Widget Disappears When No Breakpoint is UsedPyQt5 小部件在不使用断点时消失
【发布时间】:2021-04-04 02:22:32
【问题描述】:

不要批评我使用不同的类 - 他的原因是因为我的项目中将有更多由 QtDesigner 创建的 GUI,但这应该不重要。

一般来说,我有两个 Python 脚本:

ma​​in.py:

from PyQt5 import QtCore, QtWidgets, QtGui
import sys
import time

from gui_class import Gui

app = QtWidgets.QApplication(sys.argv)

gui = Gui()

sys.exit(app.exec_())

gui_class.py:

from PyQt5 import QtWidgets

class Gui():
    def __init__(self):
        w = QtWidgets.QWidget()
        w.resize(500, 500)
        self.button = QtWidgets.QPushButton(w)
        self.button.setGeometry(100, 100, 300, 300)
        w.show()

如果我运行 main.py 脚本,那么窗口会出现一瞬间然后立即消失。我看不到它,我无法点击它。但是,代码不会终止。它仍在等待应用程序完成 - 但我无能为力。

如果我在 gui_class.py 中的 w.show() 行之前放置一个断点,然后在代码停止在该行之后继续执行代码,那么 GUI 是可见的,我可以单击按钮并且代码在我关闭窗口后终止 - 一切都按预期工作。

我正在使用 PyQt5: 5.15.2 和 Python3.7。

【问题讨论】:

    标签: python pyqt show qapplication


    【解决方案1】:

    问题在于w 是一个局部变量,当创建它的作用域完成执行时,该变量将被销毁。解决方案是通过使其成为类的属性来增加其范围来延长其生命周期,为此您必须将w 更改为self.w

    【讨论】:

    • 天哪,我很抱歉。我应该能够自己回答这个问题 - 无论如何谢谢!我只是很困惑为什么它在断点上工作,然后突然就不再工作了。
    猜你喜欢
    • 2016-05-22
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多