Python 2.7 玛雅+;PyQt对话框。如何运行Qt窗口的单个副本?
使用以下简单代码运行基于qdialog的窗口: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
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()