Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PyQt4 center window on active screen

How I can center window on active screen but not on general screen? This code moves window to center on general screen, not active screen:

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

If I removes self.center() from initUI() then window opened on 0x0 on active screen. I need to open window on active screen and move this window on center of this screen. Thansk!

like image 633
Applejohn Avatar asked Nov 27 '13 13:11

Applejohn


People also ask

How do I move a PYQT window?

move() method in PyQt5 In order to move (changing the position) any widget like buttons or label move() method is used in PyQt5 application. By default, all the widgets are on top left corner therefore, there is a need of changing the position of the widgets. Below is the implementation of this method.

How do I close the main window in PYQT?

The simplest way to close a window is to click the right (Windows) or left (macOS) 'X' button on the title bar.

How do I create a window in PyQt5?

We set the window size using the setGeometry(left,top,width,height) method. The window title is set using setWindowTitle(title). Finally show() is called to display the window.


2 Answers

Modify your center method to be as follows:

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

This function is based on where the mouse point is located. It uses the screenNumber function to determine which screen the mouse is current active on. It then finds the screenGeometry of that monitor and the center point of that screen. Using this method, you should be able to place the window in the center of a screen even if monitor resolutions are different.

like image 114
Andy Avatar answered Oct 26 '22 23:10

Andy


One correction for PyQt5 users:

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())
like image 42
NL23codes Avatar answered Oct 26 '22 23:10

NL23codes