Разрешение экрана по tkinter и PIL?Python

Программы на Python
Гость
Разрешение экрана по tkinter и PIL?

Сообщение Гость »


Согласно tkinter мой экран имеет (1536x864) пикселей, а согласно PIL мой экран имеет (1920x1080) пикселей. Что здесь происходит и есть ли способ решить эту проблему?

Итак, я написал небольшую программу, которая создает прозрачное окно Tkinter, которое я могу перемещать. Когда я нажимаю кнопку, программа использует winfo.rootx, winfo_rooty, ширину и высоту, чтобы вычислить, где находятся четыре края кадра. Затем они передаются в PIL ImageGrab.grab, чтобы тот сделал снимок экрана.

def capture(self,event=None): self.update() x0 = self.winfo_rootx() #левая стена y0 = self.winfo_rooty() #верхняя стена x1 = x0 + собственная ширина #правая стена y1 = y0 + self.height #нижняя стена img = ImageGrab.grab(bbox=(x0,y0,x1,y1)) Когда у меня было окно tkinter в левом верхнем углу, график был идеальным, однако, когда я переместил окно в правый нижний угол, оно захватило прямоугольник, отличный от моего фрейма tkinter.

Должно быть, примерно через 2 часа я заметил, что не так: согласно tkinter, мой экран имеет (1536x864) пикселей. в то время как согласно PIL мой экран имеет (1920x1080) пикселей. Что здесь происходит?

Правильное изображение вверху слева: красный — захватываемый кадр, синий — захваченный кадр. Неправильное изображение внизу справа: красный — это кадр, который захватывается, синий — это захваченный кадр.

Мне удалось это исправить, добавив коэффициент 1920/1536=1,25, чтобы выходные данные tkinter масштабировались для использования в качестве входных данных для PIL.

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