J'ai essayé de remodeler le code de Python débutant (lycéen) en crunchy orienté objet

Nous les ferons réapparaître dans le Programme créé par le lycéen K. Le résultat de l'exécution ressemble à ceci コメント 2019-11-17 160125.png Lorsque vous appuyez sur le bouton, la valeur compte. Le programme qui a utilisé tk pour la première fois est bien fait. Je pense que c'est bien de pouvoir réaliser un programme qui fonctionne comme prévu.

Fabriqué par M. K


import tkinter as tk

count = 0

def dispLabel():
    global count
    count = count + 1
    lbl.configure(text = str(count) + "Pressé deux fois")


root = tk.Tk()
root.geometry("300x80")

lbl = tk.Label(text="Bouton de comptage")
btn = tk.Button(text="presse", command = dispLabel)

lbl.pack()
btn.pack()
tk.mainloop()

Cependant, il s'agit d'un programme qui stocke la valeur du compteur en tant que variable globale et ressemble à un modèle pour les débutants.

Dans un programme réel, le contenu de traitement peut être plus compliqué ou un traitement similaire peut se produire plusieurs fois. En introduisant l'orientation objet, vous pouvez créer des programmes efficacement. Le programme de M. K n'avait qu'un bouton qui compte les nombres, mais en supposant que d'autres boutons y seront ajoutés, j'essaierai de le transformer en un programme orienté objet

Avec la méthode de programmation de K, le problème avec l'ajout de boutons est qu'il est nécessaire d'ajouter des variables globales telles que count1 et count2 à l'ajout de bouton. Le processus d'affichage dans TK et le processus de comptage sont intégrés et non séparés. Il semble bon de créer un objet pour compter et avoir une variable de comptage à l'intérieur de cet objet.

class Counter():
    def __init__(self):
        self.count = 0
    
    def get_next_value(self):
        self.count +=1
        return str(self.count)

Initialisez count avec \ _ \ _ init__ () et comptez chaque fois que vous appelez get_next_value ().

J'ai également réalisé DownCounter et CounterAlphabet. La classe Application est un objet qui affiche des boutons et des étiquettes et met à jour l'affichage lorsque le bouton est enfoncé. J'ai essayé de gérer la classe Application en me référant à Explication of Tcl / Tkcl / Tk.

import tkinter as tk
    
class Counter():
    def __init__(self):
        self.count = 0
    
    def get_next_value(self):
        self.count +=1
        return str(self.count)

class DownCounter(Counter):
    def __init__(self):
        self.count = 99
    
    def get_next_value(self):
        self.count -=1
        return str(self.count)

class CounterAlphabet(Counter):
    word_list = ["zero", "one", "two", "three"]
    def get_next_value(self):
        self.count +=1
        try:
            return self.word_list[self.count]
        except IndexError:
            return "many"

class Application(tk.Frame):
    def __init__(self, master):
        super().__init__(master)
        self.master = master
        self.master.geometry("300x160")
        self.pack() 
            
    def add_button(self, counter, label="Bouton de comptage", msg="Pressé deux fois"):
        lbl = tk.Label(text=label)
        def update_label():
            str = counter.get_next_value()
            lbl.configure(text = str + msg )
        btn = tk.Button(text="presse", command = update_label)
        lbl.pack()
        btn.pack()
    
root = tk.Tk()
app = Application(root)
counter1 = Counter()
counter2 = DownCounter()
counter3 = CounterAlphabet()
app.add_button(counter1, "Bouton de comptage")
app.add_button(counter2, "Bouton de compte à rebours","Fois")
app.add_button(counter3, "Bouton de comptage(Anglais)"," times")
app.mainloop()

Résultat d'exécution コメント 実行結果

Merci K d'avoir fourni le programme.

Programme reçu dans le commentaire

M. shiracamus a commenté un exemple plus sophistiqué. Veuillez vous référer à la section des commentaires. D'autres modifications magiques sont les bienvenues.

Recommended Posts

J'ai essayé de remodeler le code de Python débutant (lycéen) en crunchy orienté objet
J'ai essayé de refactoriser le code de Python débutant (lycéen)
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
[Python] Un lycéen a implémenté Perceptron et a essayé de classer les iris.
J'ai essayé de résumer les opérations de chaîne de Python
Programmation débutant (lycéen) Optimiser l'algorithme créé
J'ai essayé de trouver l'entropie de l'image avec python
[Python] J'ai essayé de visualiser la relation de suivi de Twitter
De zéro connaissance de Python à la création d'IA en première année du collège
J'ai écrit le code pour écrire le code Brainf * ck en python
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python
(Python) J'ai essayé d'analyser 1 million de mains ~ J'ai essayé d'estimer le nombre d'AA ~
J'ai essayé de vérifier et d'analyser l'accélération de Python par Cython
J'ai essayé de rationaliser le rôle standard des nouveaux employés avec Python
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
J'ai essayé de corriger la forme trapézoïdale de l'image
J'ai essayé de vectoriser les paroles de Hinatazaka 46!
[Python] J'ai essayé de juger l'image du membre du groupe d'idols en utilisant Keras
J'ai essayé de visualiser facilement les tweets de JAWS DAYS 2017 avec Python + ELK
J'ai essayé d'automatiser le dépôt de 100 yens des courses de chevaux Rakuten (python / sélénium)
J'ai essayé d'envoyer automatiquement la littérature du nouveau virus corona à LINE avec Python
J'ai essayé de représenter graphiquement les packages installés en Python
J'ai essayé de résumer comment utiliser matplotlib de python
J'ai essayé de résumer la forme de base de GPLVM
J'ai essayé de toucher un fichier CSV avec Python
Python pratique 100 coups J'ai essayé de visualiser l'arbre de décision du chapitre 5 en utilisant graphviz
J'ai essayé de résoudre Soma Cube avec python
J'ai essayé d'automatiser la mise à jour de l'article du blog Livedoor avec Python et sélénium.
mong - J'ai essayé de porter le code qui génère de manière aléatoire le nom du conteneur Docker vers Python -
La génération combinée des débutants Python (lycéens) était en diagonale au-dessus (génération combinée par traitement récursif)
J'ai essayé de mettre Pytest dans la bataille réelle
[Python] J'ai essayé de représenter graphiquement le top 10 des ombres à paupières
J'ai essayé de visualiser les informations spacha de VTuber
J'ai essayé d'effacer la partie négative de Meros
J'ai essayé de résoudre le problème avec Python Vol.1
J'ai senti que j'avais porté le code Python en C ++ 98.
[Python] J'ai essayé d'obtenir Json de squid ring 2
J'ai essayé de comparer la vitesse de traitement avec dplyr de R et pandas de Python
J'ai essayé de classer les voix des acteurs de la voix
J'ai essayé d'exécuter l'exemple de code du module Ansible
Le 15e temps réel hors ligne, j'ai essayé de résoudre le problème de l'écriture avec python
J'ai essayé de résoudre le problème de F02 comment écrire en temps réel hors ligne avec Python
J'ai essayé "Streamlit" qui transforme le code Python en une application web tel quel
J'ai écrit un doctest dans "J'ai essayé de simuler la probabilité d'un jeu de bingo avec Python"
[Courses de chevaux] J'ai essayé de quantifier la force du cheval de course
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
J'ai essayé de simuler la propagation de l'infection avec Python
J'ai essayé d'obtenir les informations de localisation du bus Odakyu
J'ai essayé de trouver la moyenne de plusieurs colonnes avec TensorFlow
[Chaîne de Markov] J'ai essayé de charger des émotions négatives dans Python.
[Chaîne de Markov] J'ai essayé de lire les citations en Python.
J'ai essayé de résumer le code souvent utilisé dans Pandas
Le processus de création et d'amélioration du code Python orienté objet