""" Resource list for mucking with DPIs on multiple screens: - https://stackoverflow.com/questions/42141354/convert-pixel-size-to-point-size-for-fonts-on-multiple-platforms - https://stackoverflow.com/questions/25761556/qt5-font-rendering-different-on-various-platforms/25929628#25929628 - https://doc.qt.io/qt-5/highdpi.html - https://stackoverflow.com/questions/20464814/changing-dpi-scaling-size-of-display-make-qt-applications-font-size-get-rendere - https://stackoverflow.com/a/20465247 - https://doc.qt.io/archives/qt-4.8/qfontmetrics.html#width - https://forum.qt.io/topic/54136/how-do-i-get-the-qscreen-my-widget-is-on-qapplication-desktop-screen-returns-a-qwidget-and-qobject_cast-qscreen-returns-null/3 - https://forum.qt.io/topic/43625/point-sizes-are-they-reliable/4 - https://stackoverflow.com/questions/16561879/what-is-the-difference-between-logicaldpix-and-physicaldpix-in-qt - https://doc.qt.io/qt-5/qguiapplication.html#screenAt """ from pyqtgraph import QtGui from PyQt5.QtCore import ( Qt, QCoreApplication ) # Proper high DPI scaling is available in Qt >= 5.6.0. This attibute # must be set before creating the application if hasattr(Qt, 'AA_EnableHighDpiScaling'): QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True) if hasattr(Qt, 'AA_UseHighDpiPixmaps'): QCoreApplication.setAttribute(Qt.AA_UseHighDpiPixmaps, True) app = QtGui.QApplication([]) window = QtGui.QMainWindow() main_widget = QtGui.QWidget() window.setCentralWidget(main_widget) window.show() pxr = main_widget.devicePixelRatioF() # screen_num = app.desktop().screenNumber() # screen = app.screens()[screen_num] screen = app.screenAt(main_widget.geometry().center()) name = screen.name() size = screen.size() geo = screen.availableGeometry() phydpi = screen.physicalDotsPerInch() logdpi = screen.logicalDotsPerInch() print( # f'screen number: {screen_num}\n', f'screen name: {name}\n' f'screen size: {size}\n' f'screen geometry: {geo}\n\n' f'devicePixelRationF(): {pxr}\n' f'physical dpi: {phydpi}\n' f'logical dpi: {logdpi}\n' ) print('-'*50) screen = app.primaryScreen() name = screen.name() size = screen.size() geo = screen.availableGeometry() phydpi = screen.physicalDotsPerInch() logdpi = screen.logicalDotsPerInch() print( # f'screen number: {screen_num}\n', f'screen name: {name}\n' f'screen size: {size}\n' f'screen geometry: {geo}\n\n' f'devicePixelRationF(): {pxr}\n' f'physical dpi: {phydpi}\n' f'logical dpi: {logdpi}\n' ) # app-wide font font = QtGui.QFont("Hack") # use pixel size to be cross-resolution compatible? font.setPixelSize(6) fm = QtGui.QFontMetrics(font) fontdpi = fm.fontDpi() font_h = fm.height() string = '10000' str_br = fm.boundingRect(string) str_w = str_br.width() print( # f'screen number: {screen_num}\n', f'font dpi: {fontdpi}\n' f'font height: {font_h}\n' f'string bounding rect: {str_br}\n' f'string width : {str_w}\n' )