Центральное окно 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 на активном экране. Мне нужно открыть окно на активном экране и переместить это окно в центре этого экрана. Thansk!

Ответ 1

Измените способ 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 этого монитора и центральную точку этого экрана. Используя этот метод, вы можете разместить окно в центре экрана, даже если разрешение монитора отличается.

Ответ 2

Одно исправление для пользователей PyQt5:

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())

Ответ 3

Это для 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.