Ich arbeite an einer Anwendung, die viele Widgets verwendet (QGroupBox, QVBoxLayout, QHBoxLayout). Ursprünglich wurde es auf normalen HD-Monitoren entwickelt. Vor kurzem haben viele von uns ein Upgrade auf Monitore mit 4K-Auflösung durchgeführt. Jetzt sind einige der Schaltflächen und Schieberegler so klein komprimiert, dass sie unbrauchbar werden.
Jetzt habe ich versucht, einige Änderungen vorzunehmen, damit die Anwendung sowohl mit HD- als auch mit 4K-Monitoren verwendet werden kann.
Ich fing an, den folgenden Link zu lesen:
https://leomoon.com/journal/python/high-dpi-scaling-in-pyqt5/ Geben Sie hier die Linkbeschreibung ein
Ich dachte, wann immer mein Fenster in einem bestimmten Monitor geöffnet wird, kann ich den folgenden Code aufrufen:
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)
Dann habe ich versucht, die Monitorauflösung (pixel_x und pixel_y) mithilfe des folgenden Codes zu ermitteln, indem ich hier einen verwandten Beitrag verwendet habe .
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
gibt mir die Auflösung meines primären Monitors (meistens Laptops in unserem Fall, die HD sind). screen_width = 78, screen_height = 79
gibt mir die kombinierte Auflösung von virtuellen Maschinen. Ich verstehe jedoch nicht, wie ich diese Werte dynamisch abrufen kann, je nachdem, wo meine Anwendung geöffnet wurde.
Mein Anwendungsfenster ist so entwickelt, dass es auf demselben Monitor geöffnet wird, auf dem es zuletzt geschlossen wurde. Das Problem ist jetzt, dass ich die aktive Monitorauflösung erhalten möchte, wenn meine GUI aufgerufen wird, und mich an diese Auflösung anpassen möchte. Ich würde mich freuen, wenn mir jemand helfen kann.
Ich bin interessiert zu wissen, ob ich die Berechnung der Bildschirmauflösung jedes Mal aufrufen kann, wenn ich mein Fenster von einem HD-Monitor auf einen 4K-Monitor ziehe und umgekehrt.
Edit: Ich habe in diesem Beitrag hier etwas Ähnliches gefunden aber ich konnte nicht viel davon bekommen.
Edit2: Basierend auf der @ Joe-Lösung, Primary Screen Detection, Warum ist mein primärer Bildschirm immer meine Laptop-Auflösung, obwohl ich die Anwendung auf einem 4K-Bildschirm ausführe?
Ich habe gerade versucht, die dpi aller Bildschirme mit dem folgenden Code zu erhalten:
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