Изменение бэкэнда matplotlib на Qt изменяет системный DPI в Jupyter NotebookPython

Программы на Python
Anonymous
 Изменение бэкэнда matplotlib на Qt изменяет системный DPI в Jupyter Notebook

Сообщение Anonymous »

Для справки: я протестировал это на мониторе 4K (диагональ 28 дюймов) при масштабировании 200 % и на мониторе 1920 x 1200 (диагональ 16 дюймов) с масштабированием 125 %; оба они ведут себя одинаково. Весь этот код выполняется в Jupyter Notebook внутри VS Code с использованием расширения Jupyter, поставляемого Microsoft.
В сценарии, который я недавно написал, я заметил, что при использовании filedialog.askopenfilename() на мониторе 4K при масштабировании 200 % диалоговое окно файла имело разрешение 1920x1080 вместо ожидаемого 4K. Затем я реализовал некоторые возможности построения графиков в сценарии и использовал %matplotlib qt, чтобы переключить серверную часть matplotlib на Qt по какой-то причине, которую я не могу вспомнить. После этого я заметил, что все мои окна Tkinter имеют правильное разрешение, хотя я не менял ничего, непосредственно касающегося Tkinter.
Я пытался выяснить, что было изменено, и запустил следующий код, чтобы проверить, что на самом деле изменилось. Я запускал это на своем ноутбуке с монитором 1920x1200 (диагональ 16 дюймов).

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

import tkinter
from win32api import GetSystemMetrics
import ctypes

# Comment out the line below to see the difference (Requires restarting the Jupyter Kernel)
%matplotlib qt

root = tkinter.Tk()
dpi = root.winfo_fpixels('1i')
print('Tkinter DPI is:', dpi)

print("Width =", GetSystemMetrics(0))
print("Height =", GetSystemMetrics(1))

print('Process DPI Awareness: ', ctypes.windll.shcore.GetProcessDpiAwareness())
Вывод этого БЕЗ %matplotlib qt:

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

Tkinter DPI is: 96.09458128078816
Width = 1536
Height = 960
Process DPI Awareness:  0
И когда я запускаю код WITH %matplotlib qt, я получаю:

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

Tkinter DPI is: 120.11822660098522
Width = 1920
Height = 1200
Process DPI Awareness:  0
Очевидно, что осведомленность о DPI не была изменена, если только я не допустил ошибку при проверке. У меня нет идей о том, что происходит, и я просмотрел страницы github matplotlib и github ipympl, но безрезультатно.

Подробнее здесь: https://stackoverflow.com/questions/793 ... r-notebook

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