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