Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to display a window on a secondary display in PyQT?

I am developing an application; which will run on a system with 2 displays. I want my PyQt app to be able to automatically route a particular window to the second screen.

How can this be done in Qt? (either in Python or C++)

like image 939
Anoop Avatar asked Jul 28 '11 06:07

Anoop


2 Answers

Use QDesktopWidget to access to screen information on multi-head systems.

Here is pseudo code to make a widget cover first screen.

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();
like image 64
O.C. Avatar answered Nov 15 '22 04:11

O.C.


The following works for me in 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()

Update. In PyQt6 one should use:

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

Monitors should be counted starting from 0.

like image 28
Agamemnon Avatar answered Nov 15 '22 04:11

Agamemnon