[PYTHON] Ich habe ein Programm erstellt, um einzugeben, was ich gegessen habe, und um Kalorien und Zucker anzuzeigen

Hintergrund

Vor kurzem scheint die Zuckerrestriktionsdiät beliebt zu sein. Als ich dachte, ich hätte sie ausprobiert, kam ich auf die Website des Bildungsministeriums und begann zu denken, dass sie genau richtig für diese Aufgabe war.

Verschiedene Daten

Laden Sie die japanische Liste der Lebensmittelzutaten Excel (japanische Version) (Kollektiv) von [Ministerium für Bildung, Kultur, Sport, Wissenschaft und Technologie] herunter (https://www.mext.go.jp/a_menu/syokuhinseibun/1365420.htm).

Es gibt Daten, die als Zeichenfolge eingegeben werden. Seien Sie also vorsichtig, wenn Sie sie für Berechnungen usw. verwenden. (Original Mama)

Bitte beachte, dass. Legen Sie es in das gleiche Verzeichnis.

Laden Sie die Abbildung von [Abbildung] herunter (https://www.irasutoya.com/2013/09/blog-post_4689.html). Benennen Sie es in ** fat.png ** um und legen Sie es im selben Verzeichnis ab.

Angst erzeugen

»Es war schmerzhaft, aus meiner Schlussfolgerung zu sagen ――Ich wurde an die Probleme der grafischen Benutzeroberfläche erinnert

GUI-Teil

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="Berechnung", 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()

Teil bearbeiten

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="Kalorien aufgenommen",
                        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="Menge des aufgenommenen Zuckers",
                        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)

Fertiges Produkt

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*$")#Kompilieren"
        self.sheet = xlrd.open_workbook(excel_path).sheet_by_name('Dieser Tisch')
        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("Kalorienberechnung")
        self.root.resizable(0, 0)

        self.create()

    def create(self):

        #Variablen, die zuerst deklariert werden müssen
        self.juhuku = None
        self.itemid = "None"

        self.root.update_idletasks()  #Magie zum Laden von winfo

        self.frame1 = self.create_pack_frame(self.root, 0.4, 1, "#CCFFCC")
        self.kensaku = self.create_pack_label(self.frame1, "Suche")
        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, "Kandidat")
        self.listbox = self.create_pack_listbox(
            self.frame1, fontsize=10, func=("<Leave>", self.clicked), bg="white", padx=3, pady=5)  #Die Funktionen, die ich auf verschiedene Weise ausprobiert habe, haben damit gut funktioniert

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

        self.button1 = tk.Button(
            self.frame1, text="Einfügen", 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="Berechnung", 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():  #Es ist schwer, wenn Sie es zum Zeitpunkt der Eingabe kontinuierlich tun, also Gegenmaßnahmen
            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() == ():  #Diese Art zu schreiben, weil sie verschwindet, wenn Sie sie nicht halten. Es wird jedoch ein Fehler ausgelöst
            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="Kalorien aufgenommen",
                                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="Menge des aufgenommenen Zuckers",
                                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)

Ausführungsergebnis

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

Fazit

Ich bin froh, dass das, was ich dachte, in Form war. Ich denke jedoch, dass es viele Verbesserungen gibt, daher möchte ich sie beheben.

Referenzseite

Ministerium für Bildung, Kultur, Sport, Wissenschaft und Technologie Abbildungen Aufnahme von unten nach oben Blog Ich möchte Ingenieur werden

Recommended Posts

Ich habe ein Programm erstellt, um einzugeben, was ich gegessen habe, und um Kalorien und Zucker anzuzeigen
Ich habe ein Skript erstellt, um Piktogramme anzuzeigen
Ich habe ein Programm erstellt, um Bilder mit Python und OpenCV in ASCII-Grafik umzuwandeln
Ich habe versucht, ein Programm zu erstellen, um die Fehlersuche von Saiseriya zu lösen (Hinweis)
Ich habe versucht, Bulls and Cows mit einem Shell-Programm zu erstellen
Ich habe den Befehl gegeben, einen farbenfrohen Kalender im Terminal anzuzeigen
Ich habe ein Pay-Management-Programm in Python erstellt!
Ich habe ein Programm erstellt, um Sie per LINE zu benachrichtigen, wenn Schalter eintreffen
Ich habe ein Netzwerk erstellt, um Schwarzweißbilder in Farbbilder umzuwandeln (pix2pix)
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Ich habe ein Tool erstellt, um Slack über Connpass-Ereignisse zu informieren, und es zu Terraform gemacht
Ich habe gerade ein Tool erstellt, mit dem Daten mithilfe der GUI-Operation einfach als Diagramm angezeigt werden können
Ich habe ein Tool erstellt, um Hy nativ zu kompilieren
Was ich dachte und lernte, 100 Tage an einer Programmierschule zu studieren
Ich habe ein Tool erstellt, um neue Artikel zu erhalten
Ich habe ein Programm erstellt, um Wörter im Fenster nachzuschlagen (vorherige Entwicklung)
Ich habe ein Caesar-Kryptografieprogramm in Python erstellt.
Ich habe eine Bibliothek erstellt, um japanische Sätze schön zu brechen
Ich habe ein Skript erstellt, um ein Snippet in README.md einzufügen
Ich habe ein Python-Modul erstellt, um Kommentare zu übersetzen
Ich habe einen Code erstellt, um illustration2vec in ein Keras-Modell zu konvertieren
Ich habe versucht, LINE BOT mit Python und Heroku zu machen
Ich habe einen Befehl zum Markieren des Tabellenclips gegeben
Ich habe eine Python-Bibliothek erstellt, die einen rollierenden Rang hat
〇✕ Ich habe ein Spiel gemacht
Erstellt einen Toolsver, der Betriebssystem, Python, Module und Toolversionen an Markdown ausspuckt
Ich habe ein Tool erstellt, mit dem das Erstellen und Installieren eines öffentlichen Schlüssels etwas einfacher ist.
Ich habe einen Server mit Python-Socket und SSL erstellt und versucht, über den Browser darauf zuzugreifen
Erstellt eine Methode zur automatischen Auswahl und Visualisierung eines geeigneten Diagramms für Pandas DataFrame
Ich habe versucht, eine Rangliste zu erstellen, indem ich das Mitgliederteam der Organisation abgekratzt habe
Ich habe ein Paket erstellt, um Zeitreihen mit Python zu filtern
Ich habe schnell ein Programm geschrieben, um DI mit Python zu lernen
Ich habe eine Schachtel gemacht, um mich auszuruhen, bevor Pepper müde wird
Ich habe einen Befehl zum Generieren eines Kommentars für eine Tabelle in Django eingegeben
Ich habe eine Funktion erstellt, um das Modell von DCGAN zu überprüfen
Ich habe versucht, die Uhrzeit und das heutige Wetter anzuzeigen
[Titan Craft] Ich habe ein Werkzeug gemacht, um einen Riesen nach Minecraft zu rufen
Ich möchte eine schöne Ergänzung zu input () in Python hinzufügen
Ich habe Chatbot mit LINE Messaging API und Python erstellt
Ich habe Sie dazu gebracht, Befehle über einen WEB-Browser auszuführen
Ich habe ein Drehbuch gemacht, um bei meinem Koshien Hallo zu sagen
Was tun, wenn Sie nach dem Durchsuchen einer Textdatei Übereinstimmungen mit Binärdateien (Standardeingabe) erhalten?
Shell-Programm zur Anzeige der Pyramide
Ich habe einen Python-Text gemacht
Ich habe einen Zwietrachtbot gemacht
Ich habe eine einfache Schaltung mit Python gemacht (AND, OR, NOR, etc.)
Ich möchte die Ausführungszeit aufzeichnen und ein Protokoll führen.
Ich habe eine Bibliothek erstellt, die Konfigurationsdateien mit Python einfach lesen kann
Ich habe eine einfache Netzwerkkamera hergestellt, indem ich ESP32-CAM und RTSP kombiniert habe.
Ich habe ein Spiel namens Battle Ship mit Pygame und Tkinter gemacht
Ich habe ein Programm erstellt, das die Fehlersuche in Sekunden löst
Ich habe mit Razpai einen Webserver erstellt, um Anime zu schauen
Wollen Sie nicht sagen, dass Sie ein Gesichtserkennungsprogramm erstellt haben?
Ich habe mit Python, Flask und Heroku ein Nyanko-Tweet-Formular erstellt
Ich ließ RNN Sin Wave lernen und sagte es voraus: Hyper-Parameter-Anpassung
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe ein Ausgabeprogramm für Primzahlentabellen in verschiedenen Sprachen erstellt
Ich möchte eine Pipfile erstellen und im Docker wiedergeben