Python 关闭Pyside上的最后一个应用程序

Python 关闭Pyside上的最后一个应用程序,python,python-2.7,pyside,3dsmax,Python,Python 2.7,Pyside,3dsmax,我是Pyside的新人,我正在尝试为3DsMax 2015创建插件。现在我有一个取消按钮的问题 我有一个“主窗体” 当我单击“添加新对象”时,我将显示新表单。我们可以称之为“子表单” 当我点击“取消”按钮时,所有应用程序都退出,3Dsmax2 015也退出。 我只想退出“子表单” 这是我的代码: from PySide import QtGui,QtCore import MaxPlus import sys class _GCProtector(object): widgets

我是Pyside的新人,我正在尝试为3DsMax 2015创建插件。现在我有一个取消按钮的问题

我有一个“主窗体”

当我单击“添加新对象”时,我将显示新表单。我们可以称之为“子表单”

当我点击“取消”按钮时,所有应用程序都退出,3Dsmax2 015也退出。 我只想退出“子表单”

这是我的代码:

from PySide import QtGui,QtCore
import MaxPlus
import sys

class _GCProtector(object):
    widgets = []

app = QtGui.QApplication.instance()
if not app:
    app = QtGui.QApplication([])

def main():     
    MaxPlus.FileManager.Reset(True)
    w = QtGui.QWidget()

    w.setFixedSize(300,360)
    w.setWindowTitle('Library')
    _GCProtector.widgets.append(w)
    w.show()

    main_layout = QtGui.QGridLayout()
    main_layout.addWidget(First(),0,0,2,0)
    w.setLayout(main_layout)

def First():
    # FIRST FRAME
    FirstFrame = QtGui.QFrame()
    FirstFrame.setMaximumWidth(230)
    FirstFrame.setMaximumHeight(700)
    # LABEL RENDERER
    renderer_lb  = QtGui.QLabel("Renderer :")

    # COMBOBOX RENDERER
    renderer_cbx = QtGui.QComboBox()
    renderer_cbx.addItem("Vray")
    renderer_cbx.addItem("Octane")

    # LABEL FOLDER
    folders_lb = QtGui.QLabel("Folder :")

    # LIST VIEW FOLDER
    folders_lv = QtGui.QListView()

    # BUTTON ADD NEW OBJECTS
    addnewobject_btn = QtGui.QPushButton("Add New Objects")

    # BUTTON NEW SET
    newset_btn = QtGui.QPushButton("New Set")

    # DEFINE THE FUNCTION FOR FIRST FRAME
    Firstbox = QtGui.QGridLayout()
    Firstbox.addWidget(renderer_lb,0,0)
    Firstbox.addWidget(renderer_cbx,0,1,1,3)
    Firstbox.addWidget(folders_lb,2,0,1,4)
    Firstbox.addWidget(folders_lv,3,0,1,4)
    Firstbox.addWidget(addnewobject_btn,4,0,1,2)
    Firstbox.addWidget(newset_btn,4,3)
    Firstbox.setColumnStretch(1, 1)
    FirstFrame.setLayout(Firstbox)

    #++++++++++++++++++++ COMMAND ++++++++++++++++++++
    addnewobject_btn.clicked.connect(addnewobject)
    newset_btn.clicked.connect(newset)
    return FirstFrame
    #---------------------------------------------------------------------
def addnewobject():
    w = QtGui.QWidget()
    w.setFixedSize(450,90)
    w.setWindowTitle('Select folder of new objects')
    _GCProtector.widgets.append(w)
    w.show()

    # LABEL FOLDER
    folder_lb = QtGui.QLabel("Folder : ")

    # TEXT EDIT OF LINK FOLDER
    linkfolder_txt = QtGui.QLineEdit()

    # BUTTON BROWSE
    browse_btn=QtGui.QPushButton("Browse...")

    # LABEL EXAMPLE
    ex_lb = QtGui.QLabel("( ex : SCH, faucet, K7 )")

    # BUTTON CANCEL
    cancel_btn = QtGui.QPushButton("Cancel")

    # BUTTON OK
    ok_btn = QtGui.QPushButton("OK")

    # DEFINE THE FUNCTION FOR ADD NEW OBJECT WIDEGET
    browser = QtGui.QGridLayout()
    browser.addWidget(folder_lb,0,0)
    browser.addWidget(linkfolder_txt,0,1,1,4)
    browser.addWidget(browse_btn,0,5)
    browser.addWidget(ex_lb,1,0,1,5)
    browser.addWidget(cancel_btn,2,4)
    browser.addWidget(ok_btn,2,5)
    browser.setColumnStretch(1, 1)
    w.setLayout(browser)

    #++++++++++++++++++++ COMMAND ++++++++++++++++++++
    cancel_btn.clicked.connect(quitApp)
    #---------------------------------------------------------------------

def quitApp():
        quit()

if __name__ == '__main__':
    main()
请告诉我如何在“子窗体”打开时不可用“主窗体”,因为当“子窗体”打开时,我仍然可以在“主窗体”上推“添加新对象”,它会打开许多“子窗体”


非常感谢。

您只需将按钮连接到小部件的:


为什么要使用
quitApp
作为它的活动?我想这只是一个名字,我只是一个新人,所以我不明白,我遵循了教程。非常感谢你们,我的代码现在可以运行了,跟随你们的评论。
    def addnewobject():
        w = QtGui.QWidget()
        ...
        cancel_btn.clicked.connect(w.close)