PyQt4:检查窗口是否存在

3 投票
2 回答
4547 浏览
提问于 2025-04-17 08:45

我做了一个工具,用于MAYA软件。每次我调用这个工具的类并创建一个实例后,就不需要再调用它了。接下来,我只需要检查这个窗口是否还存在。

实际上,当我按下一个按钮去调用 close() 方法或者点击“X”按钮时,它并不会调用 __del()__ 这个方法。所以我无法清理我的工作。

因此,我打算检查这个实例是否还存在,如果存在的话,就不再调用这个类,只需要调用 show() 方法。但是,我找不到实现这个的办法。

_win = RigControlWindow()
_win.show()

那么,RigControlWindow 这个类要怎么检查实例是否存在呢?

2 个回答

2

ekhumoro的回答还有另外一种选择,就是在一个模块里写一个函数,像这样:

def startGui():
    if 'myWindows' in globals():
        global myWindows
        myWindows.show()
    else:
        global myWindows
        myWindows = init_gui.MainWindow(parent=init_gui.MyMainWindow())
        myWindows.show()

然后你可以从一个叫做shelf script的脚本中调用startGui,像这样:

if __name__ == '__main__':
    startGui()
4

RigControlWindow的实例保存在主窗口的一个私有属性里。

class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self._rcwin = None

    def showRigControlWindow(self):
        if self._rcwin is None:
            self._rcwin = RigControlWindow()
        self._rcwin.show()

另外,你也可以使用一个属性来实现:

class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self._rcwin = None

    @property    
    def rcwin(self):
        if self._rcwin is None:
            self._rcwin = RigControlWindow()
        return self._rcwin

    def showRigControlWindow(self):
        self.rcwin.show()

撰写回答