如何在PyQT中显示在第二个显示器上的窗口?

6 投票
3 回答
13848 浏览
提问于 2025-04-16 22:25

我正在开发一个应用程序,它会在一个有两个显示器的系统上运行。我希望我的PyQt应用能够自动把某个窗口发送到第二个屏幕上。

这该怎么在Qt中实现呢?(可以用Python或者C++)

3 个回答

0

虽然有点晚了,但这可能对使用PySide6的朋友们有帮助,来这里找答案的也可以参考一下。这个方法应该也适用于PyQt。

之前的回答提到了一些Python的解决方案。QDesktopWidget在Qt5中已经被淘汰,并且在Qt6中被移除了。现在可以用QScreen来获取关于可用屏幕和屏幕几何信息的功能。你可以使用屏幕几何的QRect属性来移动窗口小部件。 (https://doc.qt.io/qtforpython-6/overviews/widgets-changes-qt6.html#qdesktopwidget-and-qapplication-desktop)。

app = QApplication(sys.argv)
widget = MyWidget()

screens = app.screens()
# one way; with two screens    
if len(screens) > 1:
    screen = screens[1]
else:
    screen = screens[0]

# Another way to remove primary screen and choose from remaining screens
# current_screen = app.primaryScreen()
# screens.remove(current_screen)
# screen = screens[0]

qr = screen.geometry()
widget.move(qr.left(), qr.top())
widget.show()
4

在PyQt5中,下面的代码对我有效:

import sys
from PyQt5.QtWidgets import QApplication, QDesktopWidget

app = QApplication(sys.argv)

widget = ... # define your widget
display_monitor = ... # the number of the monitor you want to display your widget

monitor = QDesktopWidget().screenGeometry(display_monitor)
widget.move(monitor.left(), monitor.top())
widget.showFullScreen()

更新一下。在PyQt6中,应该使用:

...
from PyQt6.QtGui import QScreen
...
monitors = QScreen.virtualSiblings(widget.screen())
monitor = monitors[display_monitor].availableGeometry()
...

显示器的编号是从0开始算的。

3

使用 QDesktopWidget 可以获取多显示器系统上的屏幕信息。

下面是一些伪代码,用来让一个小部件覆盖第一个屏幕。

QDesktopWidget *pDesktop = QApplication::desktop ();

//Get 1st screen's geometry
QRect RectScreen0 = pDesktop->screenGeometry (0);

//Move the widget to first screen without changing its geometry
my_Widget->move (RectScreen0.left(),RectScreen0.top());

my_pWidget->resize (RectScreen0.width(),RectScreen0.height());

my_Widget->showMaximized();

撰写回答