0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MayaAdvent Calendar 2024

Day 7

mayaのwindowの中央にwindowを表示させる

Last updated at Posted at 2024-12-06

mayaでpyside(2 or 6)を使ってツール等々を作成してるのですがー

デュアルディスプレイ環境だと、予期せぬ位置にウィンドウが生成されてしまって
うーんってなることがあります。

従来の方法としては、QtWidgets.QMainWindowを作った後に、move()で移動させていました。

from PySide2 import QtWidgets,QtGui,QtCore

def getTopLevelWidget(name):
    for widget in QtWidgets.QApplication.topLevelWidgets():    
        if widget.objectName() == name:
            return widget
    return None

class MainGUI(QtWidgets.QMainWindow):
    def __init__(self,*args, **kwargs):
        super(MainGUI,self).__init__(*args,**kwargs)
        
        self.setWindowFlags(QtCore.Qt.Tool)
        
        self.mainWidget = QtWidgets.QWidget(self)
        mainLayout = QtWidgets.QHBoxLayout(self.mainWidget)
        btn = QtWidgets.QPushButton("hogeeeeeeee")
        mainLayout.addWidget(btn)
        self.setCentralWidget(self.mainWidget)
        
def main():    
    mayaMainWindow = getTopLevelWidget('MayaWindow')            
    mainGUI = MainGUI(mayaMainWindow)    
    mainGUI.show()
    mainGUI.move(100,100)

ただこのmove()で決める位置が、デュアルディスプレイだとプライマリのデスクトップの左上を0,0としたもので、
mayaのwindowがセカンダリのデスクトップにあったとしても、プライマリの座標(100,100) に作られてしまうので
一瞬 あれどこいった? ってなるんですね。

改修

mayaのwindowの中央にwindowを表示させるにはどうしたら・・・?

今回参考にさせて頂きました。

処理の順序としては

  • mayaのwindowが表示されているデスクトップのindexを取得
  • indexのデスクトップの左上のglobal座標?を取得
  • mayaのwindowの現在のデスクトップにおける左上の座標を取得
  • mayaのwindwo上の中心座標を取得
  • 色々合算

という感じで。

from PySide2 import QtWidgets,QtGui,QtCore

def getTopLevelWidget(name):
    for widget in QtWidgets.QApplication.topLevelWidgets():    
        if widget.objectName() == name:
            return widget
    return None

class MainGUI(QtWidgets.QMainWindow):
    def __init__(self,*args, **kwargs):
        super(MainGUI,self).__init__(*args,**kwargs)
        
        self.setWindowFlags(QtCore.Qt.Tool)
        
        self.mainWidget = QtWidgets.QWidget(self)
        mainLayout = QtWidgets.QHBoxLayout(self.mainWidget)
        btn = QtWidgets.QPushButton("hogeeeeeeee")
        mainLayout.addWidget(btn)
        self.setCentralWidget(self.mainWidget)

def main():
    desktop       = QtWidgets.QApplication.desktop()
    mayaMainWindow = getTopLevelWidget('MayaWindow')
    activeScreen  = desktop.screenNumber(mayaMainWindow)
    desktopRect = desktop.screenGeometry(activeScreen)
        
    windowCenter = mayaMainWindow.rect().center()
    windowCheck(objectName,mayaMainWindow)

    mainGUI = MainGUI(mayaMainWindow)    
    mainGUI.resize(50,50)

    mainGUI.show()
    mainGUI.move(desktopRect.topLeft() + mayaMainWindow.rect().topLeft() + windowCenter)
    

中央に生成されました。

image.png

これでwindowを見失うことが減りそうです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?