J'ai essayé d'implémenter ce qui semble être un outil de snipper Windows avec Python

Aperçu

J'ai implémenté ce qui semble être un outil de capture Windows (un programme qui enregistre la zone sélectionnée par glisser-déposer sous forme d'image) en Python. C'est peut-être une mise en œuvre plutôt agressive, mais pardonnez-moi s'il vous plaît.

J'ai téléchargé l'endroit où le programme s'exécute sur Youtube, alors jetez un œil. https://www.youtube.com/watch?v=e2zePSUGwaA

Motivation

Lorsque j'ai créé le programme de "J'ai essayé de jouer à un jeu de frappe avec Python" publié la dernière fois, il a été capturé sur l'écran . Lorsque je cherchais un moyen intuitif et dynamique d'obtenir les coordonnées en pixels de la zone que je voulais, j'ai pensé qu'un format comme l'outil de snipping Windows serait le meilleur, alors implémentons-le en Python. J'ai pensé.

environnement

OS : Windows10 Python Version : 3.5.3

Principales bibliothèques utilisées

PyQt5, Pillow, OpenCV

Comportement du programme

main.py


# -*- coding: utf-8 -*-

import sys
from PyQt5 import QtWidgets, QtCore, QtGui
import tkinter as tk
from PIL import ImageGrab, Image
import matplotlib.pyplot as plt
import numpy as np
import cv2

class MyWidget(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        root = tk.Tk()
        screen_width = root.winfo_screenwidth()
        screen_height = root.winfo_screenheight()
        self.setGeometry(0,0,screen_width, screen_height)
        self.setWindowTitle("")
        self.setWindowOpacity(0.3)
        QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.CrossCursor))
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
        self.begin = QtCore.QPoint()
        self.end = QtCore.QPoint()

        print("Capture the screen...")
        self.show()

    def paintEvent(self, event):
        qp = QtGui.QPainter(self)
        qp.setPen(QtGui.QPen(QtGui.QColor("black"), 3))
        qp.setBrush(QtGui.QColor(128, 128, 255, 128))
        qp.drawRect(QtCore.QRect(self.begin, self.end))       
        
    def mousePressEvent(self, event):
        self.begin = event.pos()
        self.end = self.begin
        self.update()

    def mouseMoveEvent(self, event):
        self.end = event.pos()
        self.update()
    
    def mouseReleaseEvent(self, event):
        self.end = event.pos()
        self.close()
           
        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())
        
        img = ImageGrab.grab(bbox=(x1,y1,x2,y2))
        img.save("capture.png ")
        img = cv2.cvtColor(np.array(img), cv2.COLOR_BGR2RGB)

        cv2.imshow('Captured Image', img)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
        
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = MyWidget()
    window.show()
    app.aboutToQuit.connect(app.deleteLater)
    sys.exit(app.exec_())


  1. À l'aide de `` PyQt5 '', placez une interface graphique avec un arrière-plan transparent afin qu'elle couvre tout l'écran.
  2. À l'aide d'un écouteur d'événement lié à la souris, acquérez les coordonnées des pixels en faisant glisser sur l'interface graphique et dessinez un rectangle en fonction de cela.
  3. Au moment de la suppression, après avoir effacé l'interface graphique, utilisez ImageGrab de Pillow``` pour capturer la zone sélectionnée et l'enregistrer en tant qu'image.
  4. Affichez l'image acquise en utilisant OpenCV.

application

  1. Combinez avec un programme à partir de la capture d'écran.
  2. Faites quelque chose avec les coordonnées acquises.

Résumé

J'ai pu implémenter ce qui semble être un outil de capture Windows en Python.

Recommended Posts

J'ai essayé d'implémenter ce qui semble être un outil de snipper Windows avec Python
J'ai essayé d'implémenter un pseudo pachislot en Python
J'ai essayé d'implémenter un automate cellulaire unidimensionnel en Python
J'ai essayé d'implémenter PLSA en Python
J'ai essayé d'implémenter la permutation en Python
J'ai essayé d'implémenter PLSA dans Python 2
J'ai essayé d'implémenter PPO en Python
J'ai essayé de mettre en œuvre un jeu de dilemme de prisonnier mal compris en Python
J'ai essayé d'implémenter TOPIC MODEL en Python
J'ai essayé d'implémenter le tri sélectif en python
J'ai essayé d'implémenter le jeu de cartes de Trump en Python
Je veux facilement implémenter le délai d'expiration en python
J'ai essayé d'implémenter GA (algorithme génétique) en Python
J'ai essayé "Comment obtenir une méthode décorée en Python"
J'ai essayé d'implémenter la fonction d'envoi de courrier en Python
J'ai fait un chronomètre en utilisant tkinter avec python
J'ai essayé d'implémenter le blackjack du jeu Trump en Python
[5e] J'ai essayé de créer un certain outil de type Authenticator avec python
[2nd] J'ai essayé de créer un certain outil de type Authenticator avec python
[3ème] J'ai essayé de créer un certain outil de type Authenticator avec python
Ce qui semble être un modèle pour la partie d'entrée standard du pro de la concurrence en python3
[4th] J'ai essayé de créer un certain outil de type Authenticator avec python
[1er] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai créé un outil de mot de passe en Python.
J'ai essayé d'implémenter la régression linéaire bayésienne par échantillonnage de Gibbs en python
J'ai essayé de développer un formateur qui génère des journaux Python en JSON
Notes J'ai recherché la création d'outils de ligne de commande en Python
Je veux créer une fenêtre avec Python
J'ai essayé de jouer à un jeu de frappe avec Python
J'ai essayé d'ajouter un module Python 3 en C
J'ai essayé d'implémenter le tri par fusion en Python avec le moins de lignes possible
Ce à quoi j'étais accro lors de la création d'applications Web dans un environnement Windows
J'ai essayé de créer une classe qui peut facilement sérialiser Json en Python
Je souhaite créer une file d'attente prioritaire pouvant être mise à jour avec Python (2.7)
[Python] Deep Learning: J'ai essayé d'implémenter Deep Learning (DBN, SDA) sans utiliser de bibliothèque.
J'ai essayé d'expliquer à quoi sert le générateur Python aussi facilement que possible.
J'ai essayé de représenter graphiquement les packages installés en Python
Je souhaite intégrer une variable dans une chaîne Python
J'ai essayé d'implémenter Mine Sweeper sur un terminal avec python
Je veux écrire en Python! (2) Écrivons un test
Je veux échantillonner au hasard un fichier avec Python
J'ai essayé d'implémenter le perceptron artificiel avec python
Je veux travailler avec un robot en python.
J'ai essayé de résumer comment utiliser les pandas de python
J'ai essayé de créer un environnement avec WSL + Ubuntu + VS Code dans un environnement Windows
J'ai essayé de générer automatiquement la chaîne de caractères à entrer dans M. Adjustment avec Python
J'ai essayé d'implémenter StarGAN (1)
J'ai essayé d'implémenter une ligne moyenne mobile de volume avec Quantx
J'ai essayé de mettre en œuvre le modèle de base du réseau neuronal récurrent
J'ai essayé de créer une API list.csv avec Python à partir de swagger.yaml
traitement python3 qui semble utilisable dans paiza
[Chaîne de Markov] J'ai essayé de lire les citations en Python.
J'ai essayé "un programme qui supprime les déclarations en double en Python"
Comment implémenter Python EXE pour Windows avec le conteneur Docker
J'ai créé une classe en Python et essayé de taper du canard
J'ai essayé de changer le script python de 2.7.11 à 3.6.0 sur Windows10
Je veux pouvoir exécuter Python avec VS Code