PySide2:QWidget 在装饰器中没有按预期工作
PySide2: QWidget does not work as expected in decorator
这是我的代码,执行此代码后,window 闪烁。然后关闭
import sys
from PySide2.QtWidgets import QApplication, QWidget # required pyside2 == 5.11.2
def run_app(function):
def wrapper(*args, **kwargs):
app = QApplication(sys.argv)
function(*args, **kwargs)
sys.exit(app.exec_())
return wrapper
@run_app
def show_widget():
"""not work as expected
:return:
"""
widget = QWidget()
widget.show()
if __name__ == "__main__":
show_widget()
我应该怎么做才能使装饰器正常工作?
问题是小部件是一个局部变量,一旦函数执行完毕就会被销毁。一个可能的解决方案是函数 return 小部件并存储在变量中以扩展其范围。
def run_app(function):
def wrapper(*args, **kwargs):
app = QApplication(sys.argv)
obj = function(*args, **kwargs)
sys.exit(app.exec_())
return wrapper
@run_app
def show_widget():
widget = QWidget()
widget.show()
return widget
import sys
from PySide2.QtWidgets import QApplication, QWidget # required pyside2 == 5.11.2
def run_app(function):
def wrapper(*args, **kwargs):
app = QApplication(sys.argv)
function(*args, **kwargs)
sys.exit(app.exec_())
return wrapper
@run_app
def show_widget():
"""not work as expected
:return:
"""
widget = QWidget()
widget.show()
if __name__ == "__main__":
show_widget()
我应该怎么做才能使装饰器正常工作?
问题是小部件是一个局部变量,一旦函数执行完毕就会被销毁。一个可能的解决方案是函数 return 小部件并存储在变量中以扩展其范围。
def run_app(function):
def wrapper(*args, **kwargs):
app = QApplication(sys.argv)
obj = function(*args, **kwargs)
sys.exit(app.exec_())
return wrapper
@run_app
def show_widget():
widget = QWidget()
widget.show()
return widget