多くのウィジェット(QGroupBox、QVBoxLayout、QHBoxLayout)を使用しているアプリケーションで作業しています。当初は通常のHDモニターで開発されました。しかし、最近私たちの多くは4K解像度のモニターにアップグレードしました。現在、一部のボタンとスライダーは非常に小さく圧縮されているため、使用できません。
ここで、アプリケーションをHDモニターと4Kモニターの両方で使用できるように、いくつかの変更を加えようとしました。
私は以下のリンクを読み始めました:
https://leomoon.com/journal/python/high-dpi-scaling-in-pyqt5/ ここにリンクの説明を入力
ウィンドウが特定のモニターで開かれているときはいつでも、次のコードを呼び出すことができると思いました。
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)
次に、以下のコードを使用して、ここの関連する投稿を使用して、モニターの解像度(pixel_xおよびpixel_y)を取得しようとしました。
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
プライマリモニター(ほとんどの場合、ラップトップはHDです)の解像度を取得します。screen_width = 78, screen_height = 79
仮想マシンを組み合わせた解像度を取得します。しかし、アプリケーションを開いた場所に応じて、これらの値を動的に取得する方法がわかりません。
私のアプリケーションウィンドウは、前回閉じたときと同じモニターで開くように開発されています。問題は、GUIが呼び出されるたびにアクティブなモニターの解像度を取得し、その解像度に適応させたいことです。誰かが私を助けてくれるとうれしいです。
ウィンドウをHDモニターから4Kモニターにドラッグしたり、その逆を行ったりするたびに、画面解像度の計算を呼び出すことができるかどうか知りたいです。
編集:私はここのこの投稿で似たようなものを見つけましたが、これから多くを得ることができませんでした。
Edit2:@Joeソリューションのプライマリ画面検出に基づいて、4K画面でアプリケーションを実行しているのに、なぜ私のプライマリ画面が常に私のラップトップ解像度であるのですか?
以下のコードを使用して、すべての画面のdpiを取得しようとしました:
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