44075


pyqt5でウィンドウをスクリーンの中央に表示したいです。例えば次のコードで表示されるウィンドウがスクリーン中央に表示されるためにはどうすればよいのでしょうか。

[code]

    import sys
    from PyQt5.QtWidgets import (QWidget,
        QVBoxLayout, QHBoxLayout, QApplication, QPushButton, QLabel, QLineEdit)
    from PyQt5 import*
    
    
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
            font=QtGui.QFont("00コミック7",20)
    
            # ラベル名の設定
            lbl1 = QLabel('１行目')
            lbl1.setFont(font)
            lbl2 = QLabel('２行目')
            lbl2.setFont(font)
            lbl3 = QLabel('３行目')
            lbl3.setFont(font)
    
            self.edit1=QLineEdit()
            self.edit1.setFont(font)
            self.edit2=QLineEdit()
            self.edit2.setFont(font)
            self.edit3=QLineEdit()
            self.edit3.setFont(font)
    
            btn1=QPushButton("1")
            btn1.setFont(font)
            btn1.setStyleSheet("background-color: #ffcf54")
            btn2=QPushButton("2")
            btn2.setFont(font)
            btn2.setStyleSheet("background-color: #ffcf54")
            btn3=QPushButton("3")
            btn3.setFont(font)
            btn3.setStyleSheet("background-color: #ffcf54")
    
            firstlayout=QHBoxLayout()
            firstlayout.addWidget(lbl1)
            firstlayout.addWidget(self.edit1)
            firstlayout.addWidget(btn1)
    
            secondlayout=QHBoxLayout()
            secondlayout.addWidget(lbl2)
            secondlayout.addWidget(self.edit2)
            secondlayout.addWidget(btn2)
    
            thirdlayout=QHBoxLayout()
            thirdlayout.addWidget(lbl3)
            thirdlayout.addWidget(self.edit3)
            thirdlayout.addWidget(btn3)
    
            layout=QVBoxLayout()
            layout.addLayout(firstlayout)
            layout.addLayout(secondlayout)
            layout.addLayout(thirdlayout)
    
            self.setLayout(layout)
    
            self.setWindowTitle('レイアウト')    
            self.show()
    
    
    if __name__ == '__main__':
    
        app = QApplication(sys.argv)
        ex = Example()
        sys.exit(app.exec_())
    
[/code]

ちなみにこのコードを実行すると次のようなウィンドウが表示されます。  
[![画像](https://i.stack.imgur.com/xYssN.png)](https://i.stack.imgur.com/xYssN.png)  
しかし、このままではスクリーンの若干上の方に表示されます。また、もっと大きなジオメトリを作成すると、画面左側にまだ余裕があるのに、画面右側にはみ出したりします。


CC BY-SA 4.0
2018-05-18T08:13:35.513
44060
2018-05-19T06:32:54.603
26529
question
python pyqt
pyqt5でウィンドウをスクリーンの中央に表示したい


ウインドウの表示位置は`QWidget.move()`で指定できます。  
画面サイズは`QtWidgets.QDesktopWidget`か`QtGui.QScreen`クラスオブジェクトから取得できます。

画面表示前に、画面中央から、ウインドウサイズの半分のサイズを引いた位置、にウインドウを表示させることで期待の動作になると思います。

[code]

        # 例(self.show()の直前に実行するイメージ)
    
        # ウインドウサイズを設定
        self.resize(800, 600)
    
        # 画面サイズを取得 (a.desktop()は QtWidgets.QDesktopWidget )
        a = QWidgets.qApp
        desktop = a.desktop()
        geometry = desktop.screenGeometry()
        # ウインドウサイズ(枠込)を取得
        framesize = self.frameSize()
        # ウインドウの位置を指定
        self.move(geometry.width() / 2 - framesize.width() / 2, geometry.height() / 2 - framesize.height() / 2)
    
        # ウインドウ表示
        self.show()
    
[/code]

＃`QScreen`の方が詳細な情報を取得できますが、画面サイズならどちらからでも取得できます。例では`QDesktopWidget`を用いています。


CC BY-SA 4.0
2018-05-19T06:32:54.603
44075
2018-05-19T06:32:54.603
20098
44060
answer