[PYTHON] J'ai créé une fenêtre pour la sortie du journal avec Tkinter

Le débogage d'impression en temps réel est difficile lors de la création d'une interface graphique sous Windows avec Tkinter J'ai pensé qu'il serait plus pratique de lancer la fenêtre de journal en plus de la fenêtre principale, alors je l'ai créée. Puisqu'il s'agit d'une sous-fenêtre à la dernière, lancez la fenêtre au niveau supérieur. (Je ne comprends pas vraiment comment utiliser les fenêtres Toplevel de Tkinter) Ce n'est pas intéressant avec juste la fenêtre de journal, donc j'ai mis une case à cocher qui peut être affichée / masquée en fonction du type de journal. LogWindow.png

Addendum: Ajout de la vue ('end') car elle était sortie mais n'était pas défilée pour suivre la sortie. Ajout de write (str) et flush () pour prendre en charge la sortie Python standard

Vous pouvez l'utiliser comme sys.stdout = Logwindow.

IOLogWindow.py


import sys
import serial
import binascii
import time
import tkinter as tk
from tkinter import scrolledtext

TEXT_COLORS = {
    'MESSAGE' : 'black',
    'INPUT' : 'blue',
    'OUTPUT' : 'green',
    'ERROR' : 'red',
    'DEBUG' : 'yellow'    
    }

# Initial value = flag=True or False
class SimpleCheck(tk.Checkbutton):
    def __init__(self, parent, *args, **kw):
        self.flag = kw.pop('flag')
        self.var =  tk.BooleanVar()
        if self.flag:
            self.var.set(True)
        self.txt = kw["text"]
        tk.Checkbutton.__init__(self, parent, *args, **kw, variable=self.var)

    def get(self):
        return self.var.get()

class IOLogFrame(tk.Frame):
    def __init__(self, master):    
        tk.Frame.__init__(self, master)
        master.title("Log Window")

        #view/hide choice
        select_frame = tk.LabelFrame(master, text= "Log text disable",relief = 'groove')

        self.ckboxs = []
        for key in TEXT_COLORS:
            cb = SimpleCheck(select_frame, text=key, command=self.callback, flag=False)
            self.ckboxs.append(cb)
            cb.pack(side='left')
        select_frame.pack(side = 'top', fill = 'x')
        
        self.txt = scrolledtext.ScrolledText(master)
        self.txt.pack(fill=tk.BOTH, expand=1)
        for key in TEXT_COLORS:
            self.txt.tag_config(key, foreground=TEXT_COLORS[key])

    def callback(self):
        count = 0
        for key in TEXT_COLORS:
            if(self.ckboxs[count].get()):
                self.hide(key)
            else:
                self.view(key)
            count += 1

    def print(self, str, state='MESSAGE'):
        self.txt.insert(tk.END, str+'\n', state)
        self.txt.see(tk.END)

    def hide(self, tag):
        self.txt.tag_config(tag, elide=True)

    def view(self, tag):
        self.txt.tag_config(tag, elide=False)

    def write(self, str, state='MESSAGE'):
        self.txt.insert(tk.END, str+'\n', state)
        self.txt.see(tk.END)

    def flush(self):
        pass

#sample main window
class IOLogWindow(tk.Toplevel):
    def __init__(self, master):
        master.title("Main WIndow")
        tk.Toplevel.__init__(self, master)
        io = IOLogFrame(self)
        io.print("Message")
        io.print("--ERROR--", 'ERROR')
        io.print("--INPUT--", 'INPUT')
        io.print("--OUTPUT--", 'OUTPUT')
        io.print("--DEBUG--", 'DEBUG')    
        
if __name__ == '__main__':
    win = tk.Tk()
    io=IOLogWindow(win)
    win.mainloop()
    


Recommended Posts

J'ai créé une fenêtre pour la sortie du journal avec Tkinter
[Python] J'ai créé un téléchargeur Youtube avec Tkinter.
J'ai fait une loterie avec Python.
J'ai créé un démon avec Python
J'ai créé un moniteur de ressources pour Raspberry Pi avec une feuille de calcul
J'ai fait un jeu de puzzle (comme) avec Tkinter of Python
J'ai créé un docset de tableau de bord pour Holoviews
J'ai fait un compteur de caractères avec Python
J'ai créé beaucoup de fichiers pour la connexion RDP avec Python
J'ai créé un environnement de développement pour Django 3.0 avec Docker, Docker-compose, Poetry
J'ai fait une carte hexadécimale avec Python
J'ai fait un jeu de vie avec Numpy
J'ai fait un générateur Hanko avec GAN
J'ai fait un jeu rogue-like avec Python
J'ai fait un programme qui calcule automatiquement le zodiaque avec tkinter
J'ai fait un simple blackjack avec Python
J'ai créé un fichier de configuration avec Python
J'ai fait une bibliothèque pour l'assurance actuarielle
J'ai fait une application WEB avec Django
J'ai fait un simulateur de neurones avec Python
J'ai créé un fichier de dictionnaire python pour Neocomplete
J'ai fait une prévision météo de type bot avec Python.
J'ai fait un algorithme de rechange2 moins cher pour uWSGI
J'ai créé un outil utile pour Digital Ocean
J'ai créé une application graphique avec Python + PyQt5
J'ai essayé de créer un bloqueur de filles pourries sur Twitter avec Python ①
Procédure de création d'un LineBot réalisé avec Python
J'ai fait un simple portefeuille de Bitcoin avec pycoin
J'ai créé un téléchargeur pour l'expression distribuée par mot
J'ai créé un Bot LINE avec Serverless Framework!
J'ai fait un graphique de nombres aléatoires avec Numpy
Nous avons créé un produit de prévention du télétravail.
J'ai fait un jeu de cueillette avec Python
Made Mattermost Bot avec Python (+ Flask)
〇✕ J'ai fait un jeu
[Pour les débutants] J'ai fait un capteur humain avec Raspberry Pi et notifié LINE!
[AWS] J'ai créé un BOT de rappel avec LINE WORKS
J'ai créé un bot de livre de compte de ménage avec LINE Bot
Création de l'outil de gestion des utilisateurs Let's Chat
J'ai fait un jeu d'éclairage de sapin de Noël avec Python
J'ai créé un outil de nettoyage pour Google Container Registry
J'ai créé une application de notification de nouvelles en ligne avec Python
J'ai créé une VM qui exécute OpenCV pour Python
J'ai créé un environnement Python3 sur Ubuntu avec direnv.
J'ai essayé de faire LINE BOT avec Python et Heroku
[Python] J'ai créé un classificateur pour les iris [Machine learning]
J'ai essayé un RPA simple pour me connecter avec du sélénium
J'ai fait un jeu mono tombé avec Sense HAT
J'ai fait un blackjack avec du python!
J'ai fait un texte Python
Fait une commande pour FizzBuzz
J'ai fait un robot discord
J'ai mesuré l'IMC avec tkinter
J'ai créé COVID19_simulator avec JupyterLab
J'ai créé Word2Vec avec Pytorch
J'ai fait un blackjack avec Python.
J'ai créé wordcloud avec Python.