[PYTHON] Erstellen Sie den Image Viewer mit Tkinter

1. Zuallererst

Im vorherigen Artikel habe ich ** Tkinter-Vorlage ** eingeführt. In diesem Artikel werde ich vorstellen, wie eine Image Viewer-Anwendung basierend auf dieser Vorlage erstellt wird.

Umgebung

Windows 10 64 bit Python 3.7 IDE : Pycharm

2. Übersicht über den Image Viewer

Die folgende Abbildung zeigt ein Lochbild der diesmal erstellten Image Viewer-Anwendung. .. Die einzige Funktion dieser Anwendung besteht darin, eine Bilddatei auszuwählen und dieses Bild anzuzeigen. Fügen Sie dann die Funktion zum Ausschalten des Bildschirms und die Funktion zum Schließen der Anwendung hinzu.

image.png `Die Person auf dem Bild ist Professor Ralph, eine Autorität für amerikanische Immunologie. ``

3. Image Viewer-Design

Die folgende Abbildung zeigt das Layout des Image Viewers.

Bereiten Sie das Widget ** vor, das Teil der Anwendung ist.

  1. Canvas-Widget: Ein Feld zum Anzeigen von Bildern. 2.Label Frame Widget: Bereiten Sie drei Schaltflächen vor, aber ein Feld, um diese Schaltflächen zusammenzusetzen.
  2. Schaltfläche: Drei Schaltflächen: Bild laden, Bild löschen, Anwendung beenden.

Verwenden Sie die Rastermethode, um jedes Widget zu platzieren. image.png

Beschreibung der Tkinter-Vorlage

** Dies ist der Programmcode der Vorlage, die in Tkinter Templated Article eingeführt wurde.

Vorlagenkonfiguration

  1. Anwendungsklasse Widget-Einstellungen und Platzierung, definieren Sie die Event-Callback-Funktion
  2. Hauptfunktion

In dieser Vorlage ** stellen Sie den Code zusammen, indem Sie das im vorherigen Kapitel beschriebene Widget festlegen und anordnen und die Funktion "Ereignisrückruf" ausfüllen. ** (Rahmen → Fleisch)

import tkinter as tk
from tkinter import ttk

class Application(tk.Frame):
    def __init__(self,master):
        super().__init__(master)
        self.pack()

        self.master.geometry("300x300")
        self.master.title("Tkinter with Class Template")

        self.create_widgets()

    def create_widgets(self):
        pass

    def callBack(self):
        pass

def main():
    root = tk.Tk()
    app = Application(master=root)#Inherit
    app.mainloop()

if __name__ == "__main__":
    main()

3.1. Canvas-Einstellungen

Legen Sie das Canvas-Widget fest und platzieren Sie es im Methodenteil create_widgets der Klassenanwendung. Verwenden Sie die Rastermethode für die Platzierung.

    def create_widgets(self):
        #Canvas
        self.canvas1 = tk.Canvas(self)
        self.canvas1.configure(width=640, height=480, bg='orange')
        self.canvas1.create_rectangle(0,0,120, 70, fill='green')
        self.canvas1.grid(column=1, row=0)
        self.canvas1.grid(padx=20, pady=20)

3.2.File Open -> Image Load Dies ist der Teil, der die Datei öffnet und die Bilddatei lädt. Definieren Sie nach dem Setzen der Schaltfläche das loadImage () der Event Callback-Funktion. Die if-Anweisung in LoadImage () wurde hinzugefügt, um das Seitenverhältnis des Bildes zu überprüfen und die Größe des Originalbilds an die Größe des Canvas anzupassen. Während der Konvertierung der Bilddatei wird dann der Teil der RGB-Konvertierung von openCV, der Konvertierung in PIL und der Konvertierung in imageTK fortgesetzt. Verwenden Sie abschließend "self.canvas1.create_image", um das Bild im Canvas-Widget anzuzeigen.


    def create_widgets(self):
       
        #File open and Load Image
        self.button_open = ttk.Button(self.frame_button)
        self.button_open.configure(text = 'Load Image')
        self.button_open.grid(column=0, row=1)
        self.button_open.configure(command=self.loadImage)
       
    # Event Call Back
    def loadImage(self):

        self.filename = filedialog.askopenfilename()
        
        self.image_bgr = cv2.imread(self.filename)
        
        self.height, self.width = self.image_bgr.shape[:2]
        if self.width > self.height:
            self.new_size = (640,480)
        else:
            self.new_size = (480,480)
        
        self.image_bgr_resize = cv2.resize(self.image_bgr, self.new_size, interpolation=cv2.INTER_AREA)
        self.image_rgb = cv2.cvtColor( self.image_bgr_resize, cv2.COLOR_BGR2RGB )  #Da imread BGR ist, wird es in RGB konvertiert
        self.image_PIL = Image.fromarray(self.image_rgb) #Konvertieren Sie vom RGB- in das PIL-Format
        self.image_tk = ImageTk.PhotoImage(self.image_PIL) #In das ImageTk-Format konvertieren
        self.canvas1.create_image(320,240, image=self.image_tk)

Die folgende Abbildung zeigt das Bild, das beim Öffnen der Datei aufgenommen wurde. Um diese Funktion zu verwenden, verwenden Sie filesialog.askopenfilename (). Wenn der Ordnername jedoch japanische Zeichen (UTF-8) enthält, tritt ein Fehler auf. Stellen Sie diesmal bitte sicher, dass der Ordnername, in dem die Bilddateien gespeichert sind, in Englisch ist. (Wenn Sie wissen, wie Sie dieses Problem lösen können, hinterlassen Sie bitte eine Nachricht.)

image.png

3.3. Bildschirm löschen

Es ist eine Funktion zum Ausschalten des Bildschirms auf Leinwand. Verwenden Sie die Methode canvas.delete ().

    def clearImage(self):
        self.canvas1.delete("all")

3.4 Schaltfläche Beenden

Beim Beenden wird die MessageBox angezeigt und das Urteil des Benutzers wird erneut als "Sind Sie sicher, dass Sie beenden möchten?" Bestätigt.

    def quit_app(self):
        self.Msgbox = tk.messagebox.askquestion("Exit Applictaion", "Are you sure?", icon="warning")
        if self.Msgbox == "yes":
            self.master.destroy()
        else:
            tk.messagebox.showinfo("Return", "you will now return to application screen")

Die folgende Abbildung zeigt den Bildschirm, wenn die MessageBox angezeigt wird. image.png

4. Ausführungsergebnis

Die folgende Abbildung zeigt das Ausführungsergebnis. Es wurde bestätigt, dass es wie geplant funktioniert. Es wurde bestätigt, dass Clear Image und Quit ebenfalls in Ordnung sind.

image.png

5. Zusammenfassung

  1. Ich habe eine Image Viewer-Anwendung mit der Basisvorlage von Tkinter erstellt.
  2. Wir haben bestätigt, dass es möglich ist, Anwendungen für verschiedene Zwecke zu erstellen, indem die erforderlichen Widgets zur Basisvorlage hinzugefügt werden.
  3. Es ist ziemlich gut. Tkinter.

6. Gesamtcode

import tkinter as tk
from tkinter import ttk

import sys
import os
from tkinter import *
from tkinter import messagebox,filedialog
import numpy as np
from PIL import Image, ImageTk
import cv2
# coding: utf-8
#Ich konnte keine japanischen Zeichen in den Ordnernamen einfügen.


class Application(tk.Frame):
    def __init__(self,master):
        super().__init__(master)
        self.pack()

        self.master.geometry("800x600")
        self.master.title("Tkinter with Class Template")

        self.create_widgets()



    def create_widgets(self):
        #Canvas
        self.canvas1 = tk.Canvas(self)
        self.canvas1.configure(width=640, height=480, bg='orange')
        self.canvas1.create_rectangle(0,0,120, 70, fill='green')
        self.canvas1.grid(column=1, row=0)
        self.canvas1.grid(padx=20, pady=20)

        #Frame
        self.frame_button = ttk.LabelFrame(self)
        self.frame_button.configure(text=' Button Frame ')
        self.frame_button.grid(column=1,row=1)
        self.frame_button.grid(padx=20, pady=20)

        #File open and Load Image
        self.button_open = ttk.Button(self.frame_button)
        self.button_open.configure(text = 'Load Image')
        self.button_open.grid(column=0, row=1)
        self.button_open.configure(command=self.loadImage)

        # Clear Button
        self.button_clear = ttk.Button( self.frame_button )
        self.button_clear.configure( text='Clear Image' )
        self.button_clear.grid( column=1, row=1 )
        self.button_clear.configure(command=self.clearImage)

        # Quit Button
        self.button_quit = ttk.Button( self.frame_button )
        self.button_quit.config( text='Quit' )
        self.button_quit.grid( column=2, row=1 )
        self.button_quit.configure(command = self.quit_app)

    # Event Call Back
    def loadImage(self):

        #self.folder_name = filedialog.askdirectory()
        self.filename = filedialog.askopenfilename()
        #print(self.folder_name)
        print(self.filename)

        self.image_bgr = cv2.imread(self.filename)
        self.height, self.width = self.image_bgr.shape[:2]
        print(self.height, self.width)
        if self.width > self.height:
            self.new_size = (640,480)
        else:
            self.new_size = (480,480)

        self.image_bgr_resize = cv2.resize(self.image_bgr, self.new_size, interpolation=cv2.INTER_AREA)
        self.image_rgb = cv2.cvtColor( self.image_bgr_resize, cv2.COLOR_BGR2RGB )  #Da imread BGR ist, wird es in RGB konvertiert

       # self.image_rgb = cv2.cvtColor(self.image_bgr, cv2.COLOR_BGR2RGB) #Da imread BGR ist, wird es in RGB konvertiert
        self.image_PIL = Image.fromarray(self.image_rgb) #Konvertieren Sie vom RGB- in das PIL-Format
        self.image_tk = ImageTk.PhotoImage(self.image_PIL) #In das ImageTk-Format konvertieren
        self.canvas1.create_image(320,240, image=self.image_tk)


    def clearImage(self):
        self.canvas1.delete("all")
    
    def quit_app(self):
        self.Msgbox = tk.messagebox.askquestion("Exit Applictaion", "Are you sure?", icon="warning")
        if self.Msgbox == "yes":
            self.master.destroy()
        else:
            tk.messagebox.showinfo("Return", "you will now return to application screen")

def main():
    root = tk.Tk()
    app = Application(master=root)#Inherit
    app.mainloop()

if __name__ == "__main__":
    main()

7. Referenzmaterialien

  1. Tkinter-Klassifizierungsvorlage
  2. [Python] Versuchen Sie, Tkinters Leinwand zu verwenden
  3. OpenCV-Python-Image in einem von Tkinter erstellten Fenster anzeigen

Recommended Posts

Erstellen Sie den Image Viewer mit Tkinter
Erstellen Sie mit PySimpleGUI einen Bildverarbeitungs-Viewer
Erstellen einer Bildaufteilungs-App mit Tkinter
Erstellen Sie mit Python + PIL ein Dummy-Image.
Erstellen Sie eine GUI-App mit Tkinter of Python
MVC mit Tkinter
[Golang] Erstellen Sie ein Docker-Image mit Github-Aktionen
Erstellen Sie mit tkinter [Python] einen Rahmen mit transparentem Hintergrund.
Erstellen Sie eine mit tkinter erstellte ausführbare GUI-Datei
Erstellen eines Hintergrundbilds mit Tupfen mit der Python-Bildbibliothek
Erstellen Sie eine Bildkompositions-App mit Flask + Pillow
GUI-Bildschneidewerkzeug mit Python + Tkinter
Erstellen Sie eine Matrix mit PythonGUI (tkinter-Kombinationsfeld)
Erstellen Sie ein Bild mit Zeichen mit Python (Japanisch)
Bildverarbeitung mit MyHDL
Bilderkennung mit Keras
Werde mit Tkinter Weihnachtsmann
Erstelle Spiele mit Pygame
Erstellen Sie einen Filter mit scipy
Bildverarbeitung mit Python
Bildverarbeitung mit PIL
Erstellen Sie mit Py2app und Tkinter eine native GUI-App
Versuchen Sie, mit Tkinter in Python dynamisch einen Checkbutton zu erstellen
Erstellen Sie mit PyQt5 und PyQtGraph einen 3D-Modell-Viewer
Erstellen verschiedener Photoshop-Videos mit Python + OpenCV ② Erstellen Sie Photoshop-Standbilder
[Python] Erstellen Sie mit cx_Freeze eine Verteilungsdatei für das Tkinter-Programm
Ich bekomme "zu früh, um ein Bild zu erstellen" auf tkinter
Bild herunterladen mit Flickr API
Bildverarbeitung mit Python (Teil 2)
Einführung in Tkinter 2: Button
Lesen Sie die Bildkoordinaten mit Python-matplotlib
Arbeiten Sie mit tkinter und Maus
Bildverarbeitung mit PIL (Pillow)
Erstellen Sie eine Umgebung mit virtualenv
[Python] Erstellen Sie mit tkinter einen Bildschirm zur Datei- und Ordnerpfadspezifikation
Erstellen Sie Cloud-TPU mit tf-nightly
Erstellen Sie eine API mit Django
Erstellen / Suchen / Erstellen einer Tabelle mit PynamoDB
Bildbearbeitung mit Python OpenCV
Erstellen Sie ein 3D-GIF mit Python3
Lösung, wenn das Bild mit tkinter [python] nicht angezeigt werden kann
Erstellen Sie ein Lebensspiel, das manuell mit tkinter aktualisiert wird
Erstellen Sie eine Homepage mit Django
[Lernrekord] Erstelle mit Pyhtons Tkinter ein mysteriöses Dungeon-Spiel
Hochladen und Anpassen von Bildern mit django-ckeditor
Sortieren von Bilddateien mit Python (2)
Sortieren von Bilddateien mit Python (3)
Bildschirmumschaltung / Bildschirmübergang mit Tkinter
Bildverarbeitung mit Python (Teil 1)
Tweet mit Bild in Python
Bilddateien mit Python sortieren
Erstellen Sie benutzerdefinierte Regeln mit ElastAlert
Erstellen Sie eine Patentkarte mit Streamlit
Bildverarbeitung mit Python (3)
Führen Sie Label mit tkinter [Python] aus.
Bildunterschriftengenerierung mit Chainer
Holen Sie sich Bildfunktionen mit OpenCV
Ich habe den BMI mit tkinter gemessen