Ich habe versucht, ein scheinbar Windows-Snipper-Tool mit Python zu implementieren

Überblick

Ich habe in Python ein Windows-Snipping-Tool implementiert (ein Programm, das den durch Ziehen und Ablegen ausgewählten Bereich als Bild speichert). Es mag eine ziemlich aggressive Implementierung sein, aber bitte verzeihen Sie mir.

Ich habe den Ort, an dem das Programm läuft, auf Youtube hochgeladen. https://www.youtube.com/watch?v=e2zePSUGwaA

Motivation

Als ich das zuletzt veröffentlichte Programm "Ich habe versucht, ein Schreibspiel mit Python zu spielen" erstellt habe, wurde es auf dem Bildschirm erfasst. Als ich nach einer intuitiven und dynamischen Methode suchte, um die Pixelkoordinaten des gewünschten Bereichs zu ermitteln, dachte ich, dass ein Format wie das Windows-Snippering-Tool das beste wäre. Implementieren Sie es also in Python. Ich dachte.

Umgebung

OS : Windows10 Python Version : 3.5.3

Hauptbibliotheken verwendet

PyQt5, Pillow, OpenCV

Programmverhalten

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. Platzieren Sie mit `` `PyQt5``` eine GUI mit transparentem Hintergrund, sodass sie den gesamten Bildschirm abdeckt.
  2. Erfassen Sie mit einem mausbezogenen Ereignis-Listener die Pixelkoordinaten durch Ziehen auf der GUI und zeichnen Sie darauf basierend ein Rechteck.
  3. Verwenden Sie beim Löschen nach dem Löschen der GUI `ImageGrab``` von` Pillow```, um den ausgewählten Bereich zu erfassen und als Bild zu speichern.
  4. Zeigen Sie das aufgenommene Bild mit OpenCV an.

Anwendung

  1. Kombinieren Sie mit einem Programm, das mit der Bildschirmaufnahme beginnt.
  2. Machen Sie etwas mit den erfassten Koordinaten.

Zusammenfassung

Ich konnte ein scheinbar Windows-Snipping-Tool in Python implementieren.

Recommended Posts

Ich habe versucht, ein scheinbar Windows-Snipper-Tool mit Python zu implementieren
Ich habe versucht, einen Pseudo-Pachislot in Python zu implementieren
Ich habe versucht, einen eindimensionalen Zellautomaten in Python zu implementieren
Ich habe versucht, PLSA in Python zu implementieren
Ich habe versucht, Permutation in Python zu implementieren
Ich habe versucht, PLSA in Python 2 zu implementieren
Ich habe versucht, PPO in Python zu implementieren
Ich habe versucht, ein missverstandenes Gefangenendilemma in Python zu implementieren
Ich habe versucht, TOPIC MODEL in Python zu implementieren
Ich habe versucht, eine selektive Sortierung in Python zu implementieren
Ich habe versucht, Trumps Kartenspiel in Python zu implementieren
Ich möchte Timeout einfach in Python implementieren
Ich habe versucht, GA (genetischer Algorithmus) in Python zu implementieren
Ich habe versucht "Wie man eine Methode in Python dekoriert"
Ich habe versucht, die Mail-Sendefunktion in Python zu implementieren
Ich habe eine Stoppuhr mit tkinter mit Python gemacht
Ich habe versucht, das Blackjack of Trump-Spiel mit Python zu implementieren
[5.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[2nd] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[3.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Was scheint eine Vorlage für den Standardeingabe-Teil des Competition Pro in Python3 zu sein
[4.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[1.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe ein Passwort-Tool in Python erstellt.
Ich habe versucht, die Bayes'sche lineare Regression durch Gibbs-Sampling in Python zu implementieren
Ich habe versucht, einen Formatierer zu entwickeln, der Python-Protokolle in JSON ausgibt
Hinweise Ich habe nachgeschlagen, um Befehlszeilentools in Python zu erstellen
Ich möchte mit Python ein Fenster erstellen
Ich habe versucht, mit Python ein Tippspiel zu spielen
Ich habe versucht, ein Python 3-Modul in C hinzuzufügen
Ich habe versucht, die Zusammenführungssortierung in Python mit möglichst wenigen Zeilen zu implementieren
Wovon ich beim Erstellen von Webanwendungen in einer Windows-Umgebung abhängig war
Ich habe versucht, eine Klasse zu erstellen, mit der Json in Python problemlos serialisiert werden kann
Ich möchte eine Prioritätswarteschlange erstellen, die mit Python (2.7) aktualisiert werden kann.
[Python] Deep Learning: Ich habe versucht, Deep Learning (DBN, SDA) ohne Verwendung einer Bibliothek zu implementieren.
Ich habe versucht zu erklären, wozu der Python-Generator so einfach wie möglich ist.
Ich habe versucht, die in Python installierten Pakete grafisch darzustellen
Ich möchte eine Variable in einen Python-String einbetten
Ich habe versucht, Mine Sweeper auf dem Terminal mit Python zu implementieren
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
Ich möchte eine Datei mit Python zufällig testen
Ich habe versucht, künstliches Perzeptron mit Python zu implementieren
Ich möchte mit einem Roboter in Python arbeiten.
Ich habe versucht zusammenzufassen, wie man Pandas von Python benutzt
Ich habe versucht, eine Umgebung mit WSL + Ubuntu + VS-Code in einer Windows-Umgebung zu erstellen
Ich habe versucht, automatisch die Zeichenfolge zu generieren, die mit Python in Mr. Adjustment eingegeben werden soll
Ich habe versucht, StarGAN (1) zu implementieren.
Ich habe versucht, mit Quantx eine Linie mit gleitendem Durchschnitt des Volumens zu implementieren
Ich habe versucht, das grundlegende Modell des wiederkehrenden neuronalen Netzwerks zu implementieren
Ich habe versucht, API list.csv mit Python aus swagger.yaml zu erstellen
Python3-Verarbeitung, die in Paiza verwendbar zu sein scheint
[Markov-Kette] Ich habe versucht, die Zitate in Python einzulesen.
Ich habe versucht, "ein Programm, das doppelte Anweisungen in Python entfernt"
So implementieren Sie Python EXE für Windows mit Docker-Container
Ich habe eine Klasse in Python erstellt und versucht, Enten zu tippen
Ich habe versucht, das Python-Skript unter Windows 10 von 2.7.11 auf 3.6.0 zu ändern
Ich möchte Python mit VS-Code ausführen können