如何在PyQT中显示在第二个显示器上的窗口?
我正在开发一个应用程序,它会在一个有两个显示器的系统上运行。我希望我的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();