2013-11-27 13 views
9

Jak mogę wyśrodkować okno na aktywnym ekranie, ale nie na ekranie ogólnym? To okno przesuwa kod do centrum na ogólnym ekranie, a nie aktywny ekran:Okno centrum PyQt4 na aktywnym ekranie

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

Gdybym usuwa self.center() z initUI() następnie okno otwarte na 0x0 na aktywnym ekranie. Muszę otworzyć okno na aktywnym ekranie i przesunąć to okno na środek tego ekranu. Thansk!

Odpowiedz

15

zmodyfikować metodę center się następująco:

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

Funkcja ta jest oparta na którym znajduje się punkt myszy. Używa funkcji screenNumber do określenia, na którym ekranie jest aktualnie aktywna mysz. Następnie znajduje screenGeometry tego monitora i jego środkowy punkt. Korzystając z tej metody, powinieneś być w stanie umieścić okno na środku ekranu, nawet jeśli rozdzielczości monitora są różne.