【问题标题】:Define monitor for PyQt6 application为 PyQt6 应用程序定义监视器
【发布时间】:2021-10-15 10:11:37
【问题描述】:

我想知道如何明确定义要启动的应用程序的监视器。
申请结果:

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

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

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 假定这些桌面是物理监视器。
如何明确设置应用程序在主/第一台显示器上打开?

【问题讨论】:

  • print(self.screen().availableGeometry())的输出是什么
  • @eyllanesc PyQt6.QtCore.QRect(0, 25, 1440, 804)
  • @FreddyMcloughlan 是位置的初始计算错误,还是move() 没有按预期工作?计算所需位置的每个阶段的实际值是多少?
  • @ekhumoro 它在我定义Qwindow 对象并设置主屏幕之前返回PyQt6.QtCore.QRect(0, 25, 1440, 801)。这实际上与原始评论不同。我如何检查/修复move()
  • @FreddyMcloughlan cpqr 的值是多少(在调用 moveCenter() 之前和之后)?另外,窗口在屏幕上显示后的实际位置是什么?您实际上还没有说它是否最终处于预期位置。 “问题”仅仅是 Qt 打印该消息 - 还是究竟是什么?

标签: python python-3.x pyqt pyqt6


【解决方案1】:

你能试试下面的方法吗? (我没有环境。我没有尝试。)。如果这不起作用,请告诉我。我将删除此帖子。

#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

【讨论】:

  • win = QWindow(window.windowHandle()) 更改为win = window.windowHandle()。使用您的代码,您正在创建一个以“window.windowHandle()”为父项的新 QWindow
  • win.setScreen(app.primaryScreen()) 在使用win = window.windowHandle() 时产生'NoneType' object has no attribute 'setScreen'。但是,QWindow(window.windowHandle()) 不会抛出错误,而是警告qt.qpa.window: Window position QRect(468,-21 504x896) outside any known screen, using primary screen 的原始问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-22
  • 2012-01-29
相关资源
最近更新 更多