[PYTHON] J'ai créé un programme pour saisir ce que j'ai mangé et afficher les calories et les sucres

Contexte

Récemment, il semble que le régime de restriction du sucre soit populaire, alors quand j'ai pensé l'avoir essayé, je suis arrivé sur le site Web du ministère de l'Éducation et j'ai commencé à penser qu'il était parfait pour la tâche.

Diverses données

Téléchargez la liste des ingrédients de la norme alimentaire japonaise Excel (version japonaise) (collective) auprès du Ministère de l'éducation, de la culture, des sports, des sciences et de la technologie

Certaines données sont saisies sous forme de chaîne de caractères, soyez donc prudent lorsque vous les utilisez pour des calculs, etc. (Original Mama)

Veuillez noter que. Mettez-le dans le même répertoire.

Téléchargez l'illustration sur Illustration. Renommez-le en ** fat.png ** et placez-le dans le même répertoire.

Créer de l'angoisse

`` C'était douloureux de dire d'après la conclusion que j'ai faite ―― Je me suis souvenu de la gêne de l'interface graphique --98% du temps qu'il a fallu souffrir de l'interface graphique ――CUI vous suffit pour créer le vôtre ――Tkinter ne semble pas être très bon en premier lieu (je ne sais pas) ―― La détermination de créer une nouvelle interface graphique a surgi. «Au début, je voulais pouvoir changer la taille de la fenêtre, mais j'ai abandonné.

Partie GUI

main.py



self.frame5 = tk.Frame(self.root, width=self.root.winfo_width() * 0.6, height=self.root.winfo_height() * 0.1, bg="#CCFFCC")

self.button2 = tk.Button(
    self.frame5, text="calculer", font=(u'Meilio', 17), width=40)
self.button2.bind("<Button-1>", self.show_result)

self.frame5.place(x=512, y=648)
self.frame5.pack_propagate(0)
self.button2.pack(expand=True)

self.root.mainloop()

Partie de traitement

main.py


self.list2 = self.listbox2.get(0, tk.END)
self.list3 = self.listbox3.get(0, tk.END)
self.list3 = [float(i.replace("(g)", ""))*0.01 for i in self.list3]

self.cal = 0
self.toshitsu = 0
for i in range(len(self.list2)):
    self.number = self.shokuhinmei.index(self.list2[i])
    self.cal += self.eiyolist[self.number][5]*self.list3[i]
    if self.eiyolist[self.number][16] != "Tr":
        self.toshitsu += float(self.eiyolist[self.number]
                                [16])*self.list3[i]

self.frame1.destroy()
self.frame2.destroy()
self.frame3.destroy()
self.frame4.destroy()
self.frame5.destroy()

self.canvas = tk.Canvas(self.root, width=1280, height=720)
self.pngfile = tk.PhotoImage(file="fat.png ")

self.cal = str(round(self.cal, 1)) + "kcal"
self.toshitsu = str(round(self.toshitsu, 1)) + "g"
self.canvas.create_image(400, 400, image=self.pngfile)
self.canvas.create_text(900, 180, text="Calories ingérées",
                        font=(u'Meilio', 60))
self.canvas.create_text(900, 300, text=self.cal,
                        font=(u'Meilio', 60, "bold"), fill="red")
self.canvas.create_text(900, 420, text="Quantité de sucre ingérée",
                        font=(u'Meilio', 60))
self.canvas.create_text(900, 540, text=self.toshitsu,
                        font=(u'Meilio', 60, "bold"), fill="red")

self.canvas.place(x=0, y=0)

Produit fini

main.py


# -*- coding: utf-8 -*-
import tkinter as tk
import time
import re
import xlrd


excel_path = '1365334_1r12.xlsx'
pic_path = "fat.png "


class app():
    def __init__(self, excel_path, pic_path):
        self.pic_path = pic_path
        self.int_seiki = re.compile(r"^[1-9]\d*$")#Compiler"
        self.sheet = xlrd.open_workbook(excel_path).sheet_by_name('Cette table')
        self.eiyolist = [self.sheet.row_values(row)
                         for row in range(self.sheet.nrows) if row > 7]
        self.shokuhinmei = [self.eiyolist[i][3].replace(
            '\u3000', " ") for i in range(len(self.eiyolist))]

        self.root = tk.Tk()
        self.root.geometry("1280x720")
        self.root.title("Calcul des calories")
        self.root.resizable(0, 0)

        self.create()

    def create(self):

        #Variables qui doivent être déclarées en premier
        self.juhuku = None
        self.itemid = "None"

        self.root.update_idletasks()  #Magie pour charger winfo

        self.frame1 = self.create_pack_frame(self.root, 0.4, 1, "#CCFFCC")
        self.kensaku = self.create_pack_label(self.frame1, "Chercher")
        self.entry = self.create_pack_entry(self.frame1, bind=(
            '<KeyRelease>', self.show_list), padx=30, pady=5)
        self.kouho = self.create_pack_label(self.frame1, "Candidat")
        self.listbox = self.create_pack_listbox(
            self.frame1, fontsize=10, func=("<Leave>", self.clicked), bg="white", padx=3, pady=5)  #Les fonctions que j'ai essayées fonctionnaient bien avec ceci

        self.gram = self.create_pack_label(self.frame1, "Gramme(g)")
        self.gramentry = self.create_pack_entry(
            self.frame1, bind=('<Return>', self.insert), pady=5)

        self.button1 = tk.Button(
            self.frame1, text="Insérer", font=(u'Meilio', 10), width=10)
        self.button1.bind("<Button-1>", self.insert)
        self.button1.place(x=380, y=680)

        # frame2---------------------------------------------------------------
        self.frame2 = self.create_pack_frame(self.root, 0.48, 0.9)
        self.listbox2 = self.create_pack_listbox(self.frame2)

        # frame3---------------------------------------------------------------
        self.frame3 = self.create_pack_frame(self.root, 0.1, 0.9)
        self.listbox3 = self.create_pack_listbox(self.frame3)

        # frame4---------------------------------------------------------------
        self.frame4 = self.create_pack_frame(self.root, 0.02, 0.9)
        self.listbox4 = self.create_pack_listbox(
            self.frame4, bg="pink", func=("<Double-Button-1>", self.deleteC))

        # frame5---------------------------------------------------------------
        self.frame5 = tk.Frame(self.root, width=self.root.winfo_width(
        ) * 0.6, height=self.root.winfo_height() * 0.1, bg="#CCFFCC")

        self.button2 = tk.Button(
            self.frame5, text="calculer", font=(u'Meilio', 17), width=40)
        self.button2.bind("<Button-1>", self.show_result)

        self.frame5.place(x=512, y=648)
        self.frame5.pack_propagate(0)
        self.button2.pack(expand=True)

        self.root.mainloop()

    def create_pack_entry(self, frame, fontsize=15, bind=None, fill=None, padx=0, pady=0):
        self.New_entry = tk.Entry(frame, font=(u'Meilio', fontsize))
        if len(bind) == 2:
            self.New_entry.bind(bind[0], bind[1])
        self.New_entry.pack(fill=fill, padx=padx, pady=pady)
        return self.New_entry

    def create_pack_label(self, frame, text, fontsize=15, bg="#CCFFCC"):
        self.label = tk.Label(frame, text=text,
                              font=(u'Meilio', fontsize), bg=bg)
        self.label.pack()
        return self.label

    def create_pack_frame(self, root, width, height, bg="white"):
        self.New_frame = tk.Frame(root, width=root.winfo_width(
        ) * width, height=root.winfo_height()*height, bg=bg)
        self.New_frame.pack(anchor=tk.NW, side='left', expand=True)
        self.New_frame.pack_propagate(0)
        return self.New_frame

    def create_pack_listbox(self, frame, fontsize=15, bg="#CCFFCC", func=None, padx=0, pady=0, height=20):
        self.New_listbox = tk.Listbox(frame, font=(
            u'Meilio', fontsize), bg=bg, height=height)
        if func != None:
            self.New_listbox.bind(func[0], func[1])
        self.New_listbox.pack(fill='both', expand=True, padx=padx, pady=pady)
        return self.New_listbox

    def show_list(self, event):
        if self.juhuku == self.entry.get():  #C'est lourd si vous le faites en continu au moment de la saisie, donc des contre-mesures
            return
        self.juhuku = self.entry.get()
        self.select_food = []
        self.listbox.delete(0, tk.END)
        for i in self.shokuhinmei:
            if self.juhuku in i:
                self.listbox.insert(tk.END, i)
                self.select_food.append(i)

    def insert(self, event):
        if len(self.itemid) == 1 and re.match(self.int_seiki, self.gramentry.get()):
            self.listbox2.insert(tk.END, self.select_food[self.itemid[0]])
            self.listbox3.insert(tk.END, self.gramentry.get() + "(g)")
            self.listbox4.insert(tk.END, "✖")

    def clicked(self, event):
        if self.listbox.curselection() == ():  #Cette façon d'écrire car elle disparaît si vous ne la tenez pas. Cependant, cela induit un bug
            return
        self.itemid = self.listbox.curselection()

    def deleteC(self, event):
        if self.listbox4.curselection() == ():
            return
        self.listbox2.delete(self.listbox4.curselection()[0])
        self.listbox3.delete(self.listbox4.curselection()[0])
        self.listbox4.delete(self.listbox4.curselection()[0])

    def show_result(self, event):
        self.list2 = self.listbox2.get(0, tk.END)
        self.list3 = self.listbox3.get(0, tk.END)
        self.list3 = [float(i.replace("(g)", ""))*0.01 for i in self.list3]

        self.cal = 0
        self.toshitsu = 0
        for i in range(len(self.list2)):
            self.number = self.shokuhinmei.index(self.list2[i])
            self.cal += self.eiyolist[self.number][5] * self.list3[i]

            self.tansuikabutsu = float(
                self.eiyolist[self.number][16]) if self.eiyolist[self.number][16] != "Tr" else 0

            self.shokumotsuseni = float(self.eiyolist[self.number][20].replace(
                "(", "").replace(")", "").replace("-", "0").replace("Tr", "0"))

            self.sa = self.tansuikabutsu - self.shokumotsuseni
            if self.sa >= 0:
                self.toshitsu += self.sa*self.list3[i]

        self.frame1.destroy()
        self.frame2.destroy()
        self.frame3.destroy()
        self.frame4.destroy()
        self.frame5.destroy()

        self.canvas = tk.Canvas(self.root, width=1280, height=720)
        self.pngfile = tk.PhotoImage(file=self.pic_path)

        self.cal = str(round(self.cal, 1)) + "kcal"
        self.toshitsu = str(round(self.toshitsu, 1)) + "g"
        self.canvas.create_image(400, 400, image=self.pngfile)
        self.canvas.create_text(900, 180, text="Calories ingérées",
                                font=(u'Meilio', 60))
        self.canvas.create_text(900, 300, text=self.cal,
                                font=(u'Meilio', 60, "bold"), fill="red")
        self.canvas.create_text(900, 420, text="Quantité de sucre ingérée",
                                font=(u'Meilio', 60))
        self.canvas.create_text(900, 540, text=self.toshitsu,
                                font=(u'Meilio', 60, "bold"), fill="red")

        self.canvas.bind("<Double-Button-1>", self.moto)

        self.canvas.place(x=0, y=0)

    def moto(self, event):
        self.canvas.destroy()
        self.create()


if __name__ == "__main__":
    app = app(excel_path, pic_path)

Résultat d'exécution

スクリーンショット (636).png スクリーンショット (635).png

Conclusion

Je suis content que ce que je pensais soit en forme. Cependant, je pense qu'il y a de nombreuses améliorations, alors j'aimerais les corriger.

Site de référence

Ministère de l'éducation, de la culture, des sports, des sciences et de la technologie Illustrations Enregistrer de bas en haut Blog Je veux devenir ingénieur

Recommended Posts

J'ai créé un programme pour saisir ce que j'ai mangé et afficher les calories et les sucres
J'ai fait un script pour afficher des pictogrammes
J'ai créé un programme pour convertir des images en art ASCII avec Python et OpenCV
J'ai essayé de faire un programme pour résoudre (indice) la recherche d'erreur de Saiseriya
J'ai essayé de créer des taureaux et des vaches avec un programme shell
J'ai fait une commande pour afficher un calendrier coloré dans le terminal
J'ai fait un programme de gestion de la paie en Python!
J'ai créé un programme pour vous avertir par LINE lorsque les commutateurs arrivent
J'ai créé un réseau pour convertir des images noir et blanc en images couleur (pix2pix)
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
J'ai créé un outil pour informer Slack des événements Connpass et en ai fait Terraform
Je viens de créer un outil pour afficher facilement les données sous forme de graphique par opération GUI
J'ai créé un outil pour compiler nativement Hy
Ce que j'ai pensé et appris à étudier pendant 100 jours dans une école de programmation
J'ai créé un outil pour obtenir de nouveaux articles
J'ai créé un programme pour rechercher des mots sur la fenêtre (développement précédent)
J'ai créé un programme cryptographique César en Python.
J'ai fait une bibliothèque pour bien séparer les phrases japonaises
J'ai fait un script pour mettre un extrait dans README.md
J'ai créé un module Python pour traduire les commentaires
J'ai créé un code pour convertir illustration2vec en modèle Keras
J'ai essayé de faire LINE BOT avec Python et Heroku
J'ai fait une commande pour marquer le clip de la table
J'ai créé une bibliothèque python qui fait rouler le rang
〇✕ J'ai fait un jeu
Création d'un toolver qui crache le système d'exploitation, Python, les modules et les versions d'outils à Markdown
J'ai créé un outil qui facilite un peu la création et l'installation d'une clé publique.
J'ai créé un serveur avec socket Python et ssl et j'ai essayé d'y accéder depuis le navigateur
Création d'une méthode pour sélectionner et visualiser automatiquement un graphique approprié pour les pandas DataFrame
J'ai essayé de faire un classement en grattant l'équipe des membres de l'organisation
J'ai créé un package pour filtrer les séries chronologiques avec python
J'ai écrit rapidement un programme pour étudier la DI avec Python ①
J'ai fait une boîte pour me reposer avant que Pepper ne se fatigue
J'ai fait une commande pour générer un commentaire pour une table dans Django
J'ai fait une fonction pour vérifier le modèle de DCGAN
J'ai essayé d'afficher l'heure et la météo d'aujourd'hui w
[Titan Craft] J'ai créé un outil pour invoquer un géant sur Minecraft
Je veux ajouter un joli complément à input () en python
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python
Je vous ai fait exécuter des commandes depuis un navigateur WEB
J'ai fait un script pour dire bonjour à mon Koshien
Que faire lorsque vous obtenez des correspondances de fichier binaire (entrée standard) après la greffe d'un fichier texte
Programme Shell pour afficher la pyramide
J'ai fait un texte Python
J'ai fait un robot discord
J'ai fait un circuit simple avec Python (AND, OR, NOR, etc.)
Je souhaite enregistrer l'heure d'exécution et conserver un journal.
J'ai créé une bibliothèque qui lit facilement les fichiers de configuration avec Python
J'ai créé une caméra réseau simple en combinant ESP32-CAM et RTSP.
J'ai créé un jeu appelé Battle Ship en utilisant pygame et tkinter
J'ai créé un programme qui résout la recherche d'erreur en quelques secondes
J'ai créé un serveur Web avec Razpai pour regarder des anime
Vous ne voulez pas dire que vous avez créé un programme de reconnaissance faciale?
J'ai créé un formulaire de tweet Nyanko avec Python, Flask et Heroku
J'ai fait apprendre à RNN l'onde de péché et j'ai essayé de prédire: l'ajustement des paramètres hyper
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
J'ai créé un programme de sortie de table de nombres premiers dans différentes langues
Je veux créer un fichier pip et le refléter dans le menu fixe