Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 玛雅+;PyQt对话框。如何运行Qt窗口的单个副本?_Python 2.7_Pyqt_Pyqt4_Maya - Fatal编程技术网

Python 2.7 玛雅+;PyQt对话框。如何运行Qt窗口的单个副本?

Python 2.7 玛雅+;PyQt对话框。如何运行Qt窗口的单个副本?,python-2.7,pyqt,pyqt4,maya,Python 2.7,Pyqt,Pyqt4,Maya,使用以下简单代码运行基于qdialog的窗口: import maya.OpenMayaUI as mui import sip from PyQt4 import QtGui, QtCore, uic #---------------------------------------------------------------------- def getMayaWindow(): ptr = mui.MQtUtil.mainWindow() return sip.wrap

使用以下简单代码运行基于qdialog的窗口:

import maya.OpenMayaUI as mui
import sip
from PyQt4 import QtGui, QtCore, uic

#----------------------------------------------------------------------
def getMayaWindow():
    ptr = mui.MQtUtil.mainWindow()
    return sip.wrapinstance(long(ptr), QtCore.QObject)

#----------------------------------------------------------------------
form_class, base_class = uic.loadUiType('perforceBrowserWnd.ui')

#----------------------------------------------------------------------
class PerforceWindow(base_class, form_class):
    def __init__(self, parent=getMayaWindow()):
        super(base_class, self).__init__(parent)
        self.setupUi(self)

#----------------------------------------------------------------------
def perforceBrowser2():
    perforceBrowserWnd = PerforceWindow()
    perforceBrowserWnd.show()

perforceBrowser2()
每次运行函数PerformceBrowser2()时,都会有一个新的windows副本

如何查找某个窗口是否已在运行,而不打开该窗口的新副本,然后转到已打开的窗口?或者只是不给脚本运行第二个窗口副本


ps.maya2014+pyqt4+python2.7保持对窗口的全局引用:

perforceBrowserWnd = None

def perforceBrowser2():
    global perforceBrowserWnd
    if perforceBrowserWnd is None:
        perforceBrowserWnd = PerforceWindow()
    perforceBrowserWnd.show()

使用global不是首选的方法,而且有大量的文章解释了为什么这是一个坏主意

在类的静态变量中记住该实例更为清晰,每当加载UI时,检查它是否已经存在,如果不创建它,则返回它。(有一种称为Singleton的模式也描述了这种行为)

无论何时调用loadUI,它都将返回相同的UI,并且不会在每次调用它时重新创建

import sys

from Qt import QtGui, QtWidgets, QtCore

class Foo(QtWidgets.QDialog):
    instance = None
    def __init__(self, parent=None):
        super(Foo, self).__init__(parent)
        self.setWindowTitle('Test')

def loadUI():
    if not Foo.instance:
        Foo.instance = Foo()
    Foo.instance.show()
    Foo.instance.raise_()

loadUI()