Определить коэффициент DPI/масштабирования в приложении Python TkInterPython

Программы на Python
Anonymous
Определить коэффициент DPI/масштабирования в приложении Python TkInter

Сообщение Anonymous »

Мне бы хотелось, чтобы мое приложение могло определять, работает ли оно на экране HiDPI, и если да, то масштабировать себя, чтобы его можно было использовать. Как сказано в этом вопросе, я знаю, что мне нужно установить коэффициент масштабирования, и что этот коэффициент должен быть моим DPI, разделенным на 72; моя проблема в том, чтобы получить мой DPI. Вот что у меня есть:

Код: Выделить всё

def get_dpi(window):
MM_TO_IN = 1/25.4
pxw = window.master.winfo_screenwidth()
inw = window.master.winfo_screenmmwidth() * MM_TO_IN
return pxw/inw

root = Tk()
root.tk.call('tk', 'scaling', get_dpi(root)/72)
Это не работает (тестировалось на экране моего ноутбука с разрешением 4K). При дальнейшем рассмотрении я понял, что get_dpi() возвращает 96,0, а winfo_screenmmwidth() возвращает 1016! (К счастью, ширина моего ноутбука не превышает метра).

Я предполагаю, что TkInter вычисляет ширину в мм на основе какого-то внутреннего DPI, ошибочно определенного как 96. , но я не уверен, откуда он это взял; Сейчас я работаю в Linux, и xrdb -query возвращает DPI, равный 196, поэтому он не получает DPI от X-сервера.

Кто-нибудь знает кросс-платформенный способ получить разрешение экрана или заставить TkInter правильно его получить? Или, более конкретно: как я могу заставить TkInter хорошо работать с экранами HiDPI, а также нормально работать на обычных? Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/429 ... pplication

Вернуться в «Python»