1

我想知道如何明确定义要启动的应用程序的监视器。
该应用程序产生:

qt.qpa.window: Window position QRect(468,-22 504x896) outside any known screen, using 
primary screen

执行时。
window 对象的定义如下:

class MainWindow(QMainWindow):

    def center(self):
        """
        Center window in middle of screen
        """
        qr = self.frameGeometry()
        cp = self.screen().availableGeometry().center()

        qr.moveCenter(cp)
        self.move(qr.topLeft())

    def __init__(self) -> None:
        super().__init__()

        self.center()

        self.show()

def main():
    app = QApplication(sys.argv)

    # Init window
    window = MainWindow()
    sys.exit(app.exec())


我在一台 Mac 笔记本电脑上,我有多个虚拟桌面,PyQt 假设它们是物理监视器。
如何明确设置应用程序在主/第一台显示器上打开?

4

1 回答 1

0

你可以试试下面这样的东西。(我没有环境。我没有尝试。)。如果这不起作用,请告诉我。我将删除此帖子。

#MAINWINDOW OBJECT
window = MainWindow()

#GET QWINDOW OBJECT
win = window.windowHandle()

#SET PRIMARY SCREEN
win.setScreen(app.primaryScreen()) #app is your application object.

文档中也有注释

https://doc.qt.io/qtforpython-5/PySide2/QtGui/QWindow.html#PySide2.QtGui.PySide2.QtGui.QWindow.setScreen

注意:如果屏幕是多个屏幕的虚拟桌面的一部分,则窗口不会自动移动到 newScreen。要相对于屏幕放置窗口,请使用屏幕的 topLeft() 位置。

您也可以尝试获取所有可用的屏幕

screens = app.screens()

也许你可以迭代它们并设置你想要的屏幕。

win.setScreen(screens[0]) #example
于 2021-08-12T02:31:36.240 回答