在屏幕中央显示QMainWindow

3

我希望我的项目主窗口能够显示在屏幕中央。当我调用“self.show()”时,窗口会显示在屏幕中央。

3个回答

8
我知道您已经解决了这个问题,但我为那些有相同问题的人提供这个答案。我主要发布它是因为您要求使用pyQt,而另一个答案是针对Qt(C ++)的。 我在这里找到了一个变通方法:https://bashelton.com/2009/06/pyqt-center-on-screen/ 这是如此简单并且完美地工作,我传递它..
class ExampleWindow (QtGui.QMainWindow):
    def __init__ (self, parent=None):
        '''constructor'''
        QtGui.QMainWindow.__init__(self, parent)
        self.setGeometry(0, 0, 650, 550)
        self.setWindowTitle("My Example Application")
        self.centerOnScreen()

    def centerOnScreen (self):
        '''centerOnScreen()
Centers the window on the screen.'''
        resolution = QtGui.QDesktopWidget().screenGeometry()
        self.move((resolution.width() / 2) - (self.frameSize().width() / 2),
                  (resolution.height() / 2) - (self.frameSize().height() / 2)) 

祝好运!


有没有办法指定这将出现在哪个显示器上?我正在使用2个显示器设置。 - Ely Fialkoff
1
AttributeError: module 'PyQt5.QtGui' has no attribute 'QDesktopWidget' - e-info128
1
这是一个很棒的答案。有用、优雅。对我非常有效! - Alexis R Devitre

1

首先,我建议不要试图强制用户窗口位置,而是让系统的窗口管理器决定它应该去哪里。如果您真的坚持自己定位(也许您正在为一个信息亭编程),您可以在stackoverflow上的以前问题中找到一些信息

这里讨论了一个稍微更优雅的计算方法。

在进行此计算时,重要的是在Qt调整大小后并且在屏幕上显示之前正确地完成。可能有助于创建一个一次性计时器并在计时器的槽中进行屏幕定位。


0

这个在Pyqt5中对我有效:

from PyQt5.QtWidgets import *

qtRectangle = self.frameGeometry()
centerPoint = QDesktopWidget().availableGeometry().center()
qtRectangle.moveCenter(centerPoint)
self.move(qtRectangle.topLeft())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接