python - Maya (PySide2) - 重新打开窗口而不是新窗口
问题描述
我遇到的问题是每次按下热键(在这种情况下为 CTRL + A)我打开一个新窗口,旧窗口并没有消失。
我在代码中添加了随机颜色和随机位置,以便您使用新窗口。在 Maya 中使用脚本:
from PySide2 import QtWidgets, QtCore, QtGui
from PySide2.QtGui import QKeySequence
from PySide2.QtWidgets import QShortcut
from maya import OpenMayaUI
import sys
from random import randrange
try:
from shiboken import wrapInstance
import shiboken
except:
from shiboken2 import wrapInstance
import shiboken2 as shiboken
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent = None):
window = OpenMayaUI.MQtUtil.mainWindow()
mayaWindow = shiboken.wrapInstance(long(window), QtWidgets.QMainWindow)
super(MainWindow, self).__init__(mayaWindow)
self.setWindowTitle('Test Window')
#Set a random color:
self.setStyleSheet('background-color: rgb(' + str(randrange(255)) + ', ' + str(randrange(255)) + ', ' + str(randrange(255)) + ');')
self.setWindowFlags(QtCore.Qt.Popup | QtCore.Qt.WindowType.NoDropShadowWindowHint)
self.resize(630, 400)
self.releaseKeyboard()
self.releaseMouse()
self._window = None
#Set a random position:
self.setGeometry(randrange(800), randrange(800), randrange(800), randrange(800))
# main widget
mainWidget = QtWidgets.QWidget(self)
self.setCentralWidget(mainWidget)
def mousePressEvent(self, QMouseEvent):
closeOnLostFocus = True
if closeOnLostFocus:
xPosition = QMouseEvent.pos().x()
yPosition = QMouseEvent.pos().y()
width = self.width()
height = self.height()
if xPosition > self.width() or xPosition < 0:
self.closeWindow()
if yPosition > self.height() or yPosition < 0:
self.closeWindow()
def showWindow(self):
self.closeWindow()
if self._window is None:
self._window = MainWindow()
self._window.show()
def closeWindow(self):
self.close()
def setHotkey(*args):
hotkey = ''
window = window = OpenMayaUI.MQtUtil.mainWindow()
mayaWindow = shiboken.wrapInstance(long(window), QtWidgets.QMainWindow)
hotkey = 'CTRL + A'
shortcut = QShortcut(QKeySequence(QtCore.Qt.CTRL + QtCore.Qt.Key_A), mayaWindow)
shortcut.setContext(QtCore.Qt.ApplicationShortcut)
shortcut.activated.connect(startApp)
return hotkey
def startApp(*args):
app = QtWidgets.QApplication.instance()
if app is None:
app = QtWidgets.QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.showWindow()
setHotkey()
我希望出现一个新窗口,而在此之前创建的窗口消失,这样一次只存在一个。
解决方案
你必须有一个变量来存储唯一的对象,这就是我创建一个全局变量的原因:
mainWindow = None
def startApp(*args):
app = QtWidgets.QApplication.instance()
if app is None:
app = QtWidgets.QApplication(sys.argv)
global mainWindow
mainWindow = MainWindow()
mainWindow.show()
setHotkey()
推荐阅读
- firebase - 如何在 BigQuery 上保留数据集而没有过期日期
- javascript - 导出为常量的函数数组
- php - Laravel:使用 whereBetween 返回未定义
- jquery - 如何使用动态生成的文本字段使 jquery 占位符浮动
- bash - 如何遍历 kubectl 的节点列表,回显每个节点名称?
- assembly - 需要帮助才能打印出“42”
- python - python pandas 绘制两个数据,但直方图上只显示一个
- vb.net - 光标滚动富文本框时停止计时器
- python-3.x - Array 在以 .format 调用函数之前打印结果?
- java - 具有条件 Math.abs(double) 的 HashMap 流