Flip screen-info script to qt6, refine it to heck.
Buncha updates and improvements, - adjust sub-namespace imports according to console warnings. - iterate all detected screens in a loop and instead report which is the primary and the current. - type annotate all vars where non-obvious, particularly the`Qt` refs.testing_utils
parent
db77d7ab29
commit
40dca34fde
|
@ -1,4 +1,22 @@
|
||||||
"""
|
# piker: trading gear for hackers
|
||||||
|
# Copyright (C) Tyler Goodlet (in stewardship for pikers)
|
||||||
|
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
'''
|
||||||
|
A per-display, DPI (scaling) info dumper.
|
||||||
|
|
||||||
Resource list for mucking with DPIs on multiple screens:
|
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/42141354/convert-pixel-size-to-point-size-for-fonts-on-multiple-platforms
|
||||||
|
@ -12,89 +30,86 @@ Resource list for mucking with DPIs on multiple screens:
|
||||||
- https://stackoverflow.com/questions/16561879/what-is-the-difference-between-logicaldpix-and-physicaldpix-in-qt
|
- https://stackoverflow.com/questions/16561879/what-is-the-difference-between-logicaldpix-and-physicaldpix-in-qt
|
||||||
- https://doc.qt.io/qt-5/qguiapplication.html#screenAt
|
- https://doc.qt.io/qt-5/qguiapplication.html#screenAt
|
||||||
|
|
||||||
"""
|
'''
|
||||||
|
|
||||||
from pyqtgraph import QtGui
|
from pyqtgraph import QtGui
|
||||||
from PyQt5.QtCore import (
|
from PyQt6 import (
|
||||||
Qt, QCoreApplication
|
QtCore,
|
||||||
|
QtWidgets,
|
||||||
|
)
|
||||||
|
from PyQt6.QtCore import (
|
||||||
|
Qt,
|
||||||
|
QCoreApplication,
|
||||||
|
QSize,
|
||||||
|
QRect,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Proper high DPI scaling is available in Qt >= 5.6.0. This attibute
|
# Proper high DPI scaling is available in Qt >= 5.6.0. This attibute
|
||||||
# must be set before creating the application
|
# must be set before creating the application
|
||||||
if hasattr(Qt, 'AA_EnableHighDpiScaling'):
|
if hasattr(Qt, 'AA_EnableHighDpiScaling'):
|
||||||
QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True)
|
QCoreApplication.setAttribute(
|
||||||
|
Qt.AA_EnableHighDpiScaling,
|
||||||
|
True,
|
||||||
|
)
|
||||||
|
|
||||||
if hasattr(Qt, 'AA_UseHighDpiPixmaps'):
|
if hasattr(Qt, 'AA_UseHighDpiPixmaps'):
|
||||||
QCoreApplication.setAttribute(Qt.AA_UseHighDpiPixmaps, True)
|
QCoreApplication.setAttribute(
|
||||||
|
Qt.AA_UseHighDpiPixmaps,
|
||||||
|
True,
|
||||||
|
)
|
||||||
|
|
||||||
|
app = QtWidgets.QApplication([])
|
||||||
app = QtGui.QApplication([])
|
window = QtWidgets.QMainWindow()
|
||||||
window = QtGui.QMainWindow()
|
main_widget = QtWidgets.QWidget()
|
||||||
main_widget = QtGui.QWidget()
|
|
||||||
window.setCentralWidget(main_widget)
|
window.setCentralWidget(main_widget)
|
||||||
window.show()
|
window.show()
|
||||||
|
|
||||||
pxr = main_widget.devicePixelRatioF()
|
pxr: float = main_widget.devicePixelRatioF()
|
||||||
|
|
||||||
# screen_num = app.desktop().screenNumber()
|
# explicitly get main widget and primary displays
|
||||||
# screen = app.screens()[screen_num]
|
current_screen: QtGui.QScreen = app.screenAt(
|
||||||
|
main_widget.geometry().center()
|
||||||
|
)
|
||||||
|
primary_screen: QtGui.QScreen = app.primaryScreen()
|
||||||
|
|
||||||
screen = app.screenAt(main_widget.geometry().center())
|
screen: QtGui.QScreen
|
||||||
|
for screen in app.screens():
|
||||||
name = screen.name()
|
name: str = screen.name()
|
||||||
size = screen.size()
|
model: str = screen.model().rstrip()
|
||||||
geo = screen.availableGeometry()
|
size: QSize = screen.size()
|
||||||
phydpi = screen.physicalDotsPerInch()
|
geo: QRect = screen.availableGeometry()
|
||||||
logdpi = screen.logicalDotsPerInch()
|
phydpi: float = screen.physicalDotsPerInch()
|
||||||
|
logdpi: float = screen.logicalDotsPerInch()
|
||||||
|
is_primary: bool = screen is primary_screen
|
||||||
|
is_current: bool = screen is current_screen
|
||||||
|
|
||||||
print(
|
print(
|
||||||
# f'screen number: {screen_num}\n',
|
f'------ screen name: {name} ------\n'
|
||||||
f'screen name: {name}\n'
|
f'|_primary: {is_primary}\n'
|
||||||
f'screen size: {size}\n'
|
f' _current: {is_current}\n'
|
||||||
f'screen geometry: {geo}\n\n'
|
f' _model: {model}\n'
|
||||||
f'devicePixelRationF(): {pxr}\n'
|
f' _screen size: {size}\n'
|
||||||
f'physical dpi: {phydpi}\n'
|
f' _screen geometry: {geo}\n'
|
||||||
f'logical dpi: {logdpi}\n'
|
f' _devicePixelRationF(): {pxr}\n'
|
||||||
|
f' _physical dpi: {phydpi}\n'
|
||||||
|
f' _logical dpi: {logdpi}\n'
|
||||||
)
|
)
|
||||||
|
|
||||||
print('-'*50)
|
# app-wide font info
|
||||||
|
|
||||||
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")
|
font = QtGui.QFont("Hack")
|
||||||
# use pixel size to be cross-resolution compatible?
|
# use pixel size to be cross-resolution compatible?
|
||||||
font.setPixelSize(6)
|
font.setPixelSize(6)
|
||||||
|
|
||||||
|
|
||||||
fm = QtGui.QFontMetrics(font)
|
fm = QtGui.QFontMetrics(font)
|
||||||
fontdpi = fm.fontDpi()
|
fontdpi: float = fm.fontDpi()
|
||||||
font_h = fm.height()
|
font_h: int = fm.height()
|
||||||
|
|
||||||
string = '10000'
|
|
||||||
str_br = fm.boundingRect(string)
|
|
||||||
str_w = str_br.width()
|
|
||||||
|
|
||||||
|
string: str = '10000'
|
||||||
|
str_br: QtCore.QRect = fm.boundingRect(string)
|
||||||
|
str_w: int = str_br.width()
|
||||||
|
|
||||||
print(
|
print(
|
||||||
# f'screen number: {screen_num}\n',
|
f'------ global font settings ------\n'
|
||||||
f'font dpi: {fontdpi}\n'
|
f'font dpi: {fontdpi}\n'
|
||||||
f'font height: {font_h}\n'
|
f'font height: {font_h}\n'
|
||||||
f'string bounding rect: {str_br}\n'
|
f'string bounding rect: {str_br}\n'
|
||||||
|
|
Loading…
Reference in New Issue