109 Star 860 Fork 308

PyQt5 / PyQt

Create your Gitee Account
Explore and code with more than 12 million developers,Free private repositories !:)
Sign up
This repository doesn't specify license. Please pay attention to the specific project description and its upstream code dependency when using it.
Clone or Download
ProbeWindow.py 4.06 KB
Copy Edit Raw Blame History
Irony authored 2021-07-13 14:52 . support PySide2
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Created on 2018年6月8日
author: Irony
site: https://pyqt.site , https://github.com/PyQt5
email: 892768447@qq.com
file: ProbeWindow
description: 简单探测窗口和放大截图
"""
import win32gui
try:
from PyQt5.QtCore import Qt, QRect
from PyQt5.QtGui import QPainter, QPen, QCursor, QColor
from PyQt5.QtWidgets import QLabel, QWidget, QApplication
except ImportError:
from PySide2.QtCore import Qt, QRect
from PySide2.QtGui import QPainter, QPen, QCursor, QColor
from PySide2.QtWidgets import QLabel, QWidget, QApplication
class FrameWidget(QWidget):
# 一个全屏的透明窗口
def __init__(self, *args, **kwargs):
super(FrameWidget, self).__init__(*args, **kwargs)
self.setWindowFlags(Qt.Tool | Qt.FramelessWindowHint |
Qt.WindowStaysOnTopHint)
self.setAttribute(Qt.WA_TranslucentBackground, True)
self.showFullScreen() # 全屏
self._rect = QRect() # 被探测的窗口的矩形位置
def setRect(self, x, y, w, h):
# 更新矩形框
self._rect.setX(x)
self._rect.setY(y)
self._rect.setWidth(w - x)
self._rect.setHeight(h - y)
self.update()
def paintEvent(self, event):
super(FrameWidget, self).paintEvent(event)
if self._rect.isValid(): # 画边框
painter = QPainter(self)
painter.setPen(QPen(Qt.red, 4))
painter.drawRect(self._rect)
class Label(QLabel):
def __init__(self, *args, **kwargs):
super(Label, self).__init__(*args, **kwargs)
self.ismd = False # 是不是否按下
self.setAlignment(Qt.AlignCenter)
self.setText('鼠标按住不放拖动到外面')
self.resize(240, 240)
self.frameWidget = FrameWidget() # 边框
def closeEvent(self, event):
self.frameWidget.close()
super(Label, self).closeEvent(event)
def mousePressEvent(self, event):
super(Label, self).mousePressEvent(event)
self.ismd = True # 按下
# 设置鼠标样式为十字
self.setCursor(Qt.CrossCursor)
def mouseReleaseEvent(self, event):
super(Label, self).mouseReleaseEvent(event)
self.ismd = False
self.frameWidget.setRect(0, 0, 0, 0)
# 设置鼠标样式为普通
self.setCursor(Qt.ArrowCursor)
self.clear()
self.setText('鼠标按住不放拖动到外面')
def mouseMoveEvent(self, event):
super(Label, self).mouseMoveEvent(event)
# 得到鼠标在屏幕中的位置
pos = self.mapToGlobal(event.pos())
hwnd = win32gui.WindowFromPoint((pos.x(), pos.y()))
self.frameWidget.setRect(*win32gui.GetWindowRect(hwnd))
# 截图
screen = QApplication.primaryScreen()
if screen is not None:
image = screen.grabWindow(0,
pos.x() - 60, pos.y() - 60, 120, 120)
if not image.isNull():
self.setPixmap(image.scaled(240, 240))
def paintEvent(self, event):
super(Label, self).paintEvent(event)
# 中正间画十字
painter = QPainter(self)
painter.setPen(Qt.red)
x = int(self.width() / 2)
y = int(self.height() / 2)
painter.drawLine(x, 0, x, self.height())
painter.drawLine(0, y, self.width(), y)
if self.ismd:
# 画坐标点
pos = QCursor.pos()
ret = win32gui.GetPixel(win32gui.GetWindowDC(
win32gui.GetDesktopWindow()), pos.x(), pos.y())
r, g, b = ret & 0xff, (ret >> 8) & 0xff, (ret >> 16) & 0xff
print(r, g, b)
painter.setPen(Qt.white)
painter.drawText(self.rect(), Qt.AlignLeft |
Qt.AlignBottom, '({}, {})\nRGB: ({}, {}, {})\n{}'.format(
pos.x(), pos.y(), r, g, b, QColor(r, g, b).name()))
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
app.setQuitOnLastWindowClosed(True)
w = Label()
w.show()
sys.exit(app.exec_())
Python
1
https://gitee.com/PyQt5/PyQt.git
git@gitee.com:PyQt5/PyQt.git
PyQt5
PyQt
PyQt
master

Search