首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QApplication实例已存在

QApplication实例已存在
EN

Stack Overflow用户
提问于 2014-11-26 21:47:12
回答 3查看 11.8K关注 0票数 7

我在3Dsmax 2015上做了一些简单的PySide。

这是我的错误:

代码语言:javascript
运行
复制
python.ExecuteFile "C:\Program Files\Autodesk\3ds Max 2015\scripts\Python\demoUniTest.py"
-- Runtime error:  Line 32  <module>()
  <type 'exceptions.RuntimeError'> A QApplication instance already exists.

这是我的代码:

代码语言:javascript
运行
复制
import sys
from PySide.QtCore import *
from PySide.QtGui import *
from math import *

class Form(QDialog):
def __init__(self,parent=None):
    super(Form,self).__init__(parent)

    self.browser = QTextBrowser()
    self.lineedit = QLineEdit("Type an expression and press Enter")
    self.lineedit.selectAll()

    layout = QVBoxLayout()
    layout.addWidget(self.browser)
    layout.addWidget(self.lineedit)
    self.setLayout(layout)

    self.lineedit.setFocus()

    self.connect(self.lineedit, SIGNAL("returnPressed()"),self.updateUi)
    self.setWindowTitle("Calculate")

def updateUi(self):
    try:
        text = self.lineedit.text()
        self.browser.append("%s = <b>%s</b>" % (text,eval(text)))
    except:
        self.browser.append("<font color=red>%s is invalid</font>" %text)

app = QApplication(sys.argv)

form = Form()

form.show()

app.exec_()

当我在Pycharm上使用这段代码时,我没有得到任何错误。仅当我在3Dsmax 2015监听器上使用它时才会出现

EN

回答 3

Stack Overflow用户

发布于 2014-11-26 22:32:31

直接引用帮助文件(Using PySide):

通常使用QtGui.QApplication()在脚本中创建一个PySide应用程序对象。但是,在3ds Max中,已经有一个PySide应用程序正在运行,因此您可以获得该对象的句柄,如下所示:

QtGui.QApplication.instance()

票数 12
EN

Stack Overflow用户

发布于 2017-10-14 08:27:02

请注意,这在3DS Max 2018和PySide2中有所更改。我现在自己也在使用它,经过一些修补后,我能够让它工作起来。这里有一个文档的链接,不过需要注意的是,代码中有一个小的拼写错误(至少在撰写本文时是这样):http://help.autodesk.com/view/3DSMAX/2018/ENU/?guid=__developer_what_s_new_in_3ds_max_python_api_what_s_new_in_the_3ds_max_2018_p_html

如其他答案中所述,您需要使UI成为主3DS Max应用程序的子应用程序。好消息是,他们使用函数GetQMaxMainWindow()为您简化了这一过程。像这样使用它:

代码语言:javascript
运行
复制
from PySide2 import QtWidgets, QtCore, QtGui
import MaxPlus
import os

class SampleUI(QtWidgets.QDialog):
    def __init__(self, parent=MaxPlus.GetQMaxMainWindow()):
        super(SampleUI, self).__init__(parent)
        self.initUI()

    def initUI(self):
        mainLayout = QtWidgets.QHBoxLayout()
        testBtn = QtWidgets.QPushButton("Test!")
        mainLayout.addWidget(testBtn)
        self.setLayout(mainLayout)

if __name__ == "__main__":
    try:
        ui.close()
    except:
        pass

    ui = SampleUI()
    ui.show()
票数 4
EN

Stack Overflow用户

发布于 2014-11-26 21:52:46

您在下面的代码行中创建了一个QApplication实例:

代码语言:javascript
运行
复制
app = QApplication(sys.argv)

得到这个错误是因为在此之前的某个地方(大概在"3Dsmax 2015 Listener“中的某个地方)创建了QApplication的另一个实例,而您只被允许创建一个。

请参见:

QT documentation on QApplication

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27150852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档