Координации инструмента для поднесения Pyside Comportanates из -за масштабирования монитора и настройки двойного мониторPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Координации инструмента для поднесения Pyside Comportanates из -за масштабирования монитора и настройки двойного монитор

Сообщение Anonymous »

У меня есть приложение Python, которое отражает область экрана с использованием библиотек Pyside6 и PIL.
Приложение хорошо работает на мониторе разрешения 1980x1080. Однако при использовании его на моем первичном мониторе с разрешением 2560x1600 и масштабирующим коэффициентом 175%существует значительное несоответствие между захваченной областью и фактическим снимком экрана. Как я могу настроить координаты, чтобы учесть коэффициент масштабирования монитора? Какой подход я должен использовать для реализации этой функции?

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

# source from https://github.com/harupy/snipping-tool
import sys
from PySide6 import QtCore, QtGui, QtWidgets
import tkinter as tk
from PIL import ImageGrab
import numpy as np
import cv2
import pygetwindow as gw

class MyWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
root = tk.Tk()
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
root.withdraw()  # Hide the root window
screen_geometry = gw.getWindowsWithTitle(gw.getActiveWindow().title)[0]
virtual_screen_width = screen_geometry.width
virtual_screen_height = screen_geometry.height
self.setGeometry(0, 0, virtual_screen_width, virtual_screen_height)
self.setWindowTitle(' ')
self.begin = QtCore.QPoint()
self.end = QtCore.QPoint()
self.setWindowOpacity(0.3)
self.num_snip = 0
self.is_snipping = False
QtWidgets.QApplication.setOverrideCursor(
QtGui.QCursor(QtCore.Qt.CrossCursor)
)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
print('Capture the screen...')
print('Press q if you want to quit...')
self.show()

def paintEvent(self, event):
if self.is_snipping:
brush_color = (0, 0, 0, 0)
lw = 0
opacity = 0
else:
brush_color = (128, 128, 255, 128)
lw = 3
opacity = 0.3

self.setWindowOpacity(opacity)
qp = QtGui.QPainter(self)
qp.setPen(QtGui.QPen(QtGui.QColor('black'), lw))
qp.setBrush(QtGui.QColor(*brush_color))
qp.drawRect(QtCore.QRectF(self.begin, self.end))

def keyPressEvent(self, event):
if event.key() == QtCore.Qt.Key_Q:
print('Quit')
self.close()
event.accept()

def mousePressEvent(self, event):
self.begin = event.position()
self.end = self.begin
self.update()

def mouseMoveEvent(self, event):
self.end = event.position()
self.update()

def mouseReleaseEvent(self, event):
self.num_snip += 1
x1 = min(self.begin.x(), self.end.x())
y1 = min(self.begin.y(), self.end.y())
x2 = max(self.begin.x(), self.end.x())
y2 = max(self.begin.y(), self.end.y())

self.is_snipping = True
self.repaint()
QtWidgets.QApplication.processEvents()
img = ImageGrab.grab(bbox=(x1, y1, x2, y2))
self.is_snipping = False
self.repaint()
QtWidgets.QApplication.processEvents()
img_name = 'snip{}.png'.format(self.num_snip)
img.save(img_name)
print(img_name, 'saved')
img = cv2.cvtColor(np.array(img), cv2.COLOR_BGR2RGB)

if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = MyWidget()
window.show()
app.aboutToQuit.connect(app.deleteLater)
sys.exit(app.exec())

Я в настоящее время изучаю библиотеку ScreenInfo для решения проблем, связанных с разрешением экрана и масштабированием DPI ..

Подробнее здесь: https://stackoverflow.com/questions/785 ... ual-monito
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Несоответствие координат инструмента обрезки PySide из-за масштабирования монитора и настройки двух мониторов
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Несоответствие координат инструмента обрезки PySide из-за масштабирования монитора и настройки двух мониторов
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Координации на переписную трактую - Python
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Функция координации в Google Maps Polygon?
    Anonymous » » в форуме Javascript
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • В чем секрет двойного масштабирования Safari?
    Anonymous » » в форуме CSS
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous

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