Estoy trabajando en una aplicación que utiliza muchos widgets (QGroupBox, QVBoxLayout, QHBoxLayout). Inicialmente se desarrolló en monitores HD normales. Pero, recientemente, muchos de nosotros actualizamos a monitores de resolución 4K. Ahora, algunos de los botones y controles deslizantes están comprimidos tan pequeños que no se pueden usar.
Ahora intenté hacer algunos cambios para que la aplicación se pueda usar con monitores HD y 4K.
Empecé a leer el siguiente enlace:
https://leomoon.com/journal/python/high-dpi-scaling-in-pyqt5/ ingrese la descripción del enlace aquí
Pensé que cada vez que mi ventana se abre en un monitor en particular, puedo llamar al siguiente código:
if pixel_x > 1920 and pixel_y > 1080:
Qapp.setAttribute(Qt.AA_EnableHighDpiScaling, True)
Qapp.setAttribute(Qt.AA_UseHighDpiPixmaps, True)
else:
Qapp.setAttribute(Qt.AA_EnableHighDpiScaling, False)
Qapp.setAttribute(Qt.AA_UseHighDpiPixmaps, False)
Luego traté de obtener la resolución del monitor (pixel_x y pixel_y) usando el código a continuación usando la publicación relacionada aquí .
import sys, ctypes
user32 = ctypes.windll.user32
user32.SetProcessDPIAware()
screen_width = 0 #78
screen_height = 1 #79
[pixel_x , pixel_y ] = [user32.GetSystemMetrics(screen_width), user32.GetSystemMetrics(screen_height)]
screen_width = 0, screen_height = 1
me da la resolución de mi monitor primario (en su mayoría computadoras portátiles en nuestro caso que son HD). screen_width = 78, screen_height = 79
me da la resolución combinada de máquinas virtuales. Pero no entiendo cómo puedo obtener dinámicamente estos valores dependiendo de dónde se abrió mi aplicación.
La ventana de mi aplicación está desarrollada de tal manera que se abrirá en el mismo monitor donde se cerró la última vez. El problema ahora es que quiero obtener la resolución del monitor activo cada vez que se llama a mi GUI y adaptarme a esa resolución. Me alegraría si alguien me puede ayudar.
Me interesa saber si puedo llamar al cálculo de resolución de pantalla cada vez que arrastro mi ventana desde un monitor HD a un monitor 4K y viceversa.
Editar: he encontrado algo similar en esta publicación aquí, pero no pude obtener mucho de esto.
Edit2: Basado en la solución @Joe, Detección de pantalla primaria, ¿por qué mi pantalla principal siempre es la resolución de mi computadora portátil aunque ejecuto la aplicación en una pantalla 4K?
Solo traté de obtener el dpi de todas las pantallas usando el siguiente código:
def screen_selection():
app = QApplication(sys.argv)
valid_screens = []
for index, screen_no in enumerate(app.screens()):
screen = app.screens()[index]
dpi = screen.physicalDotsPerInch()
valid_screens.append(dpi)
return valid_screens