Maya等待Qt窗口关闭

坦率

通常在Qt应用程序中,您可以在代码的开头和结尾使用此代码:

app = QtWidgets.QApplication(sys.argv)
...
app.exec_()

但是在Maya中,您不会使用它,因为Qt可以在其​​自身的Maya应用程序上运行。如果您不知道Maya是什么,我相信这对于许多其他应用程序也一样。也就是说,我的代码如下所示:

import sys
from PySide2 import QtWidgets, QtGui, QtCore

class Test():
    def __init__(self):
        self.open_qt()

    def open_qt(self):
        # app = QtWidgets.QApplication(sys.argv) # Don't need this in Maya
        self.window = QtWidgets.QWidget() # I tried QDialog also

        btn = QtWidgets.QPushButton("press me")
        btn.clicked.connect(self.login)

        lay = QtWidgets.QVBoxLayout()
        lay.addWidget(btn)

        self.window.setLayout(lay)
        self.window.show()

        # app.exec_() # Don't need this in Maya

    def login(self):
        print("logged in!")

print("before")
temp = Test()
print("after")

但是在Maya中运行此命令可获得以下结果:

before
after
logged in!

但我需要这样:

before
logged in!
after

如果在Maya之外运行此代码(并且使用这两行注释掉的行),则将获得正确的结果(在此处上面的块)。

我如何才能使Maya Qt也像您使用时一样正确等待QtWidgets.QApplication(sys.argv)

音乐家

一个QDialog的可能是更适于你的需求,因为它运行其自己的事件循环,不会阻止该程序,在等待对话框来完成

重要的事情是调用它exec_()accept()在需要时调用

from PySide2 import QtWidgets, QtGui, QtCore

class Test(QtWidgets.QDialog):
    def __init__(self, parent=None):
        super(Test, self).__init__(parent)
        layout = QtWidgets.QVBoxLayout(self)

        self.spinBox = QtWidgets.QSpinBox()
        layout.addWidget(self.spinBox)

        btn = QtWidgets.QPushButton("press me")
        layout.addWidget(btn)
        btn.clicked.connect(self.login)

    def login(self):
        print("logged in!")
        self.accept()


dialog = Test()
if dialog.exec_():
    print(dialog.spinBox.value())

我没有Maya,但是根据此答案,您可以使用maya.OpenMayaUIshiboken的模块获取其主窗口wrapInstance()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Qt等待窗口关闭

关闭QT应用程序时如何关闭GLFW窗口

等待用户关闭窗口以从NSTextField获取值-Cocoa

如何从gvim打开cmd而不等待cmd窗口关闭

如何隐藏,关闭并等待自动执行的cmd窗口

如何“等待”另一个窗口的关闭

等待模式窗口关闭,然后在javascript中执行以下行

调用视图并等待直到关闭窗口在MVVM中可行?

如何在队列中打开多个窗口,每个窗口等待前一个关闭?

在QT中从关闭状态的子级删除窗口句柄的内存

集中跟踪Qt中打开和关闭的窗口

在Qt中关闭主窗口后,如何返回信息?

在QT中关闭子窗口后如何执行功能

在Qt中创建没有关闭按钮的窗口

Qt关闭上一个窗口

生成终端窗口的脚本突然等待每个窗口关闭,然后再打开下一个窗口

Qt:父子小部件。关闭单个子窗口小部件是否意味着也将关闭其他子窗口?

如何在Outlook VBA中等待发送电子邮件并关闭窗口?

如何在关闭窗口之前检测未完成的等待过程?

无论如何等待打印窗口在print.js中关闭

C#等待另一个打开的窗口关闭,然后执行其余功能

等待jdialog关闭

迅速等待关闭完成

关机:等待程序关闭

QT:如何关闭同一个小部件的多个窗口?

在Qt中,当使用QApplication :: processEvents()时,发现所有窗口都已关闭?

QT Painter用计时器更新仅在关闭窗口时更新

可能的Qt5错误:调用setFixedSize()禁用主窗口的关闭按钮(在Win7下)

(Qt)可编辑的QComboBox:输入文本时不要关闭弹出窗口