PyQt5 Widget 在没有使用断点时消失
PyQt5 Widget Disappears When No Breakpoint is Used
不要批评我使用不同 类 - 他的原因是因为我的项目中会有更多由 QtDesigner 创建的 GUI,但这现在不重要。
一般来说,我有两个 Python 脚本:
main.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-脚本,那么 window 会出现一瞬间并立即消失。我看不到它,我无法点击它。但是,代码不会终止。它仍在等待应用程序完成 - 不过我什么也做不了。
如果我在 gui_class.py 中的 w.show()
行之前放置一个断点,并在该行停止后继续执行代码,那么GUI 是可见的,我可以单击按钮,代码在我关闭 window 后终止 - 一切都按预期工作。
我正在使用 PyQt5:5.15.2 和 Python3.7。
问题是 w
是一个局部变量,当它创建的作用域完成执行时将被销毁。解决方案是通过使其成为 class 的属性来增加其范围来延长其生命周期,为此您必须将 w
更改为 self.w
。
不要批评我使用不同 类 - 他的原因是因为我的项目中会有更多由 QtDesigner 创建的 GUI,但这现在不重要。
一般来说,我有两个 Python 脚本:
main.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-脚本,那么 window 会出现一瞬间并立即消失。我看不到它,我无法点击它。但是,代码不会终止。它仍在等待应用程序完成 - 不过我什么也做不了。
如果我在 gui_class.py 中的 w.show()
行之前放置一个断点,并在该行停止后继续执行代码,那么GUI 是可见的,我可以单击按钮,代码在我关闭 window 后终止 - 一切都按预期工作。
我正在使用 PyQt5:5.15.2 和 Python3.7。
问题是 w
是一个局部变量,当它创建的作用域完成执行时将被销毁。解决方案是通过使其成为 class 的属性来增加其范围来延长其生命周期,为此您必须将 w
更改为 self.w
。