web-dev-qa-db-ja.com

アクティブな画面のPyQt4センターウィンドウ

一般画面ではなくアクティブ画面の中央にウィンドウを配置するにはどうすればよいですか?このコードは、アクティブな画面ではなく、一般的な画面の中央にウィンドウを移動します。

import sys
from PyQt4 import QtGui

class MainWindow(QtGui.QWidget):

    def __init__(self):
        super(MainWindow, self).__init__()

        self.initUI()

    def initUI(self):

        self.resize(640, 480)
        self.setWindowTitle('Backlight management')
        self.center()

        self.show()

    def center(self):
        frameGm = self.frameGeometry()
        centerPoint = QtGui.QDesktopWidget().availableGeometry().center()
        frameGm.moveCenter(centerPoint)
        self.move(frameGm.topLeft())

def main():
    app = QtGui.QApplication(sys.argv)
    mainWindow = MainWindow()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

削除した場合 self.center() から initUI() 次に、アクティブな画面で0x0にウィンドウが開きます。アクティブな画面でウィンドウを開き、このウィンドウをこの画面の中央に移動する必要があります。サンスク!

14
Applejohn

centerメソッドを次のように変更します。

def center(self):
    frameGm = self.frameGeometry()
    screen = QtGui.QApplication.desktop().screenNumber(QtGui.QApplication.desktop().cursor().pos())
    centerPoint = QtGui.QApplication.desktop().screenGeometry(screen).center()
    frameGm.moveCenter(centerPoint)
    self.move(frameGm.topLeft())

この関数は、マウスポイントの位置に基づいています。 screenNumber 関数を使用して、マウスが現在アクティブになっている画面を判別します。次に、そのモニターの screenGeometry とその画面の中心点を見つけます。この方法を使用すると、モニターの解像度が異なっていても、ウィンドウを画面の中央に配置できるはずです。

25
Andy

PyQt5ユーザーのための1つの修正:

import PyQt5

def center(self):
    frameGm = self.frameGeometry()
    screen = PyQt5.QtWidgets.QApplication.desktop().screenNumber(PyQt5.QtWidgets.QApplication.desktop().cursor().pos())
    centerPoint = PyQt5.QtWidgets.QApplication.desktop().screenGeometry(screen).center()
    frameGm.moveCenter(centerPoint)
    self.move(frameGm.topLeft())
5
NL23codes

これは_PyQt4_および_PyQt5_用です。

1] self.setGeometry(0, 0, 700, 500) #My window resolution 700x500

2]私のコンピューターの解像度は_1920x1080_で、ウィンドウの解像度は_700x500_になりました。

3] _1920/2 = 960_。および_1080/2 = 480_。これは、ウィンドウの左上隅の中央に配置されます。

4]センターウィンドウが欲しい。したがって、これが必要です:960-ウィンドウ幅/ 2および480-ウィンドウ高さ/ 2。

5]返信は_480,240_です。コマンドはself.setGeometry(480, 240, 700, 500)になりました

要約:コンピュータの解像度/ 2-ウィンドウの解像度/ 2から_WinX, WinY_。

0
ForceVII