Lassen Sie uns eine GUI mit Python erstellen.

Einführung

Vielen Dank. Ich werde zum ersten Mal seit langer Zeit einen Artikel veröffentlichen. Das ist Wamaro. Aufgrund der jüngsten Umstände verstecke ich das Schaben. In den alten Tagen, als ich hörte, dass es kratzte, "Was? Was ist es? Ich habe nachgedacht, aber jetzt habe ich das starke Gefühl, dass ich kratzen muss. Ich habe wirklich das Gefühl, dass sich die Ideen der Menschen je nach Position und Zeit ändern. In diesem Sinne habe ich übrigens an einem Programm gearbeitet, das ich komplett losgeworden bin. Sogar jetzt schreibe ich, ohne von irgendjemandem für die Kapselung oder das Erlernen des Codes verantwortlich gemacht zu werden. Das Programm soll ein Werkzeug sein. Es macht also keinen Sinn, ohne Zweck schriftlich zu schreiben. Du musst nicht einmal lernen. Daher schafft der Verrückte gewaltsam einen Zweck. Das ist der Grund. Dieses Mal möchte ich eine GUI mit Python erstellen. Insbesondere möchte ich nach Eingabe des Buchungskreises und des angegebenen Zeitraums den Code der App schreiben, der den Übergang des Aktienkurses während dieses Zeitraums anzeigt.

Umgebung

Die Umgebung ist unten dargestellt. ・ Windows10 ・ Python3 (Anakonda) Die Entwicklung erfolgte hauptsächlich im Jupyter-Labor.

Überblick über den Inhalt des Codes

Ich werde den Inhalt des Codes kurz erläutern. Wenn Sie nur die Ergebnisse wünschen, können Sie sich auf den endgültigen "endgültigen Code" beziehen.

Erforderliche Bibliotheken

Die diesmal verwendete Bibliothek ist unten dargestellt.


from pandas_datareader import data
import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
import matplotlib.pyplot as plt
from matplotlib.figure import Figure
import numpy as np
%matplotlib inline

Das Hauptgefühl ist wie folgt. ・ Pandas: Zur Datenverarbeitung -Matplotlib: Für die Diagrammanzeige (% matplotlib inline wird verwendet, wenn Diagramme im Jupyter-System angezeigt werden.) ・ Numpy: Zur Berechnung -Tkinter: Für die GUI-Erstellung. (Es gibt viele Typen, aber tkinter ist standardmäßig in anaconda enthalten, daher ist es einfach zu bedienen.)

Ich benutze eine solche orthodoxe Bibliothek.

Funktionsdefinition

Ich habe diesmal einige Funktionen definiert. Es gibt zwei Haupt. ・ Funktion zum Erfassen von Aktienkursdaten

Funktion zum Abrufen von Aktienkursdaten

Nachdem ich die Aktienkursdaten aus dem Buchungskreis erhalten hatte, definierte ich eine Funktion, die den Durchschnitt von 5,25,50 Tagen berechnet, zu den Daten hinzufügt und zurückgibt. Dies ist ein rundes Pakuri von Kinocode.


def company_stock(start,end,company_code):
    df = data.DataReader(company_code,'stooq')
    df = df[(df.index <=end)&(df.index >=start)]

    date=df.index
    price=df['Close']

    span01 = 5
    span02 = 25
    span03 = 50

    df['sma01'] = price.rolling(window=span01).mean()
    df['sma02'] = price.rolling(window=span02).mean()
    df['sma03'] = price.rolling(window=span03).mean()
    
    return df

Eine Funktion, die ein Diagramm berechnet und anzeigt, wenn eine Taste gedrückt wird

Das Ereignis beim Drücken der Taste wird als Funktion definiert. Wir definieren eine Funktion, die den Wert aus dem Text abruft, die Aktienkursdaten abruft und diese in der GUI mit dem Diagrammsatz anzeigt.


##Klicken Sie auf Ereignis
def btn_click():
    company_code = txtBox.get()
    start = txtBox2.get()
    end = txtBox3.get()

    df = company_stock(start,end,company_code)
    date=df.index
    price=df['Close']
    
    #plt.figure(figsize=(20,10))
    
    fig = Figure(figsize=(6,6), dpi=100)
    plt = fig.add_subplot(2,1,1)
    plt.plot(date,price,label=company_code)
    plt.plot(date,df['sma01'],label='sma01')
    plt.plot(date,df['sma02'],label='sma02')
    plt.plot(date,df['sma03'],label='sma03')
    
    plt.set_title(company_code)
    plt.set_xlabel('date')
    plt.set_ylabel('price')
    #plt.title(company_code)
    #plt.xlabel('date')
    #plt.ylabel('price')
    plt.legend()

    plt = fig.add_subplot(2,1,2)
    plt.bar(date,df['Volume'],label='Volume',color='grey')
    plt.legend()


    canvas = FigureCanvasTkAgg(fig, master=root)  # Generate canvas instance, Embedding fig in root
    canvas.draw()
    canvas.get_tk_widget().place(x=10, y=120)

GUI-Einstellungen

Code zum Einstellen der GUI. Anordnung und Bildschirme werden durch Ausprobieren erstellt. Schaltflächenereignisse werden festgelegt, indem der Funktion "command = btn_click" zugeordnet wird. (Ich dachte, es wäre verständlich, wenn ich es ziemlich oft schreiben würde.)

# Figure instance
fig = plt.Figure(figsize=(6,6), dpi=100)

root = tk.Tk()
root.title("stock analsis")
root.geometry("620x740")

#Schreiben Sie Text
label = tk.Label(root, text="Buchungskreis")
label.place(x=10, y=10)

label2 = tk.Label(root, text="Anfangsdatum")
label2.place(x=120, y=10)

label3 = tk.Label(root, text="Endtermin")
label3.place(x=230, y=10)

#Schreiben Sie eine Schaltfläche
txtBox = tk.Entry()
txtBox.configure(state='normal', width=15)
txtBox.place(x=10, y=40)

txtBox2 = tk.Entry()
txtBox2.configure(state='normal', width=15)
txtBox2.place(x=120, y=40)

txtBox3 = tk.Entry()
txtBox3.configure(state='normal', width=15)
txtBox3.place(x=230, y=40)

#Installieren Sie die Schaltfläche
button = tk.Button(text='Aktienkursanzeige', width=20, command=btn_click)
button.place(x=10, y=80)


#Schreiben Sie eine Grafik
canvas = FigureCanvasTkAgg(fig, master=root)  # Generate canvas instance, Embedding fig in root
canvas.draw()
canvas.get_tk_widget().place(x=10, y=120)

root.mainloop()

Endgültiger Code

Das Endergebnis ist Code wie folgt: (Schließen Sie einfach das Kabel von oben an.) Wenn Sie dies kopieren, wird es vorerst wahrscheinlich funktionieren!

stock_analysis.py



from pandas_datareader import data
import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
import matplotlib.pyplot as plt
from matplotlib.figure import Figure
import numpy as np
%matplotlib inline

def company_stock(start,end,company_code):
    df = data.DataReader(company_code,'stooq')
    df = df[(df.index <=end)&(df.index >=start)]

    date=df.index
    price=df['Close']

    span01 = 5
    span02 = 25
    span03 = 50

    df['sma01'] = price.rolling(window=span01).mean()
    df['sma02'] = price.rolling(window=span02).mean()
    df['sma03'] = price.rolling(window=span03).mean()
    
    return df

#Klicken Sie auf Ereignis
def btn_click():
    company_code = txtBox.get()
    start = txtBox2.get()
    end = txtBox3.get()

    df = company_stock(start,end,company_code)
    date=df.index
    price=df['Close']
    
    #plt.figure(figsize=(20,10))
    
    fig = Figure(figsize=(6,6), dpi=100)
    plt = fig.add_subplot(2,1,1)
    plt.plot(date,price,label=company_code)
    plt.plot(date,df['sma01'],label='sma01')
    plt.plot(date,df['sma02'],label='sma02')
    plt.plot(date,df['sma03'],label='sma03')
    
    plt.set_title(company_code)
    plt.set_xlabel('date')
    plt.set_ylabel('price')
    #plt.title(company_code)
    #plt.xlabel('date')
    #plt.ylabel('price')
    plt.legend()

    plt = fig.add_subplot(2,1,2)
    plt.bar(date,df['Volume'],label='Volume',color='grey')
    plt.legend()


    canvas = FigureCanvasTkAgg(fig, master=root)  # Generate canvas instance, Embedding fig in root
    canvas.draw()
    canvas.get_tk_widget().place(x=10, y=120)

# Figure instance
fig = plt.Figure(figsize=(6,6), dpi=100)

root = tk.Tk()
root.title("stock analsis")
root.geometry("620x740")

#Schreiben Sie Text
label = tk.Label(root, text="Buchungskreis")
label.place(x=10, y=10)

label2 = tk.Label(root, text="Anfangsdatum")
label2.place(x=120, y=10)

label3 = tk.Label(root, text="Endtermin")
label3.place(x=230, y=10)

#Schreiben Sie eine Schaltfläche
txtBox = tk.Entry()
txtBox.configure(state='normal', width=15)
txtBox.place(x=10, y=40)

txtBox2 = tk.Entry()
txtBox2.configure(state='normal', width=15)
txtBox2.place(x=120, y=40)

txtBox3 = tk.Entry()
txtBox3.configure(state='normal', width=15)
txtBox3.place(x=230, y=40)

#Installieren Sie die Schaltfläche
button = tk.Button(text='Aktienkursanzeige', width=20, command=btn_click)
button.place(x=10, y=80)


#Schreiben Sie eine Grafik
canvas = FigureCanvasTkAgg(fig, master=root)  # Generate canvas instance, Embedding fig in root
canvas.draw()
canvas.get_tk_widget().place(x=10, y=120)

root.mainloop()

Beziehen Sie den Buchungskreis von der Securities Exchange Site, wie in der folgenden Abbildung gezeigt. image.png

Wenn Sie die darauf basierenden Bedingungen eingeben, können Sie die folgenden Ergebnisse erhalten.

image.png

abschließend

Vorläufig wusste ich, wie man das Diagramm auf der GUI anzeigt, daher dachte ich, es wäre einfacher, das Diagramm anzuzeigen und zu betrachten. Ich wurde wieder schlauer. Aber ich möchte mich daran erinnern. (Ich habe vergessen, wie man SSH außerhalb des LAN verwendet, mit dem ich in letzter Zeit große Probleme hatte, und habe die Fragilität des Gedächtnisses der Menschen gespürt.)

Recommended Posts

Lassen Sie uns eine GUI mit Python erstellen.
Lassen Sie uns ein Diagramm mit Python erstellen! !!
Lassen Sie uns mit Python ein Shiritori-Spiel machen
Lassen Sie uns mit Python langsam sprechen
Erstellen Sie ein Webframework mit Python! (1)
Machen wir einen Twitter-Bot mit Python!
Erstellen Sie ein Webframework mit Python! (2)
Machen Sie eine Lotterie mit Python
Ersetzen wir UWSC durch Python (5) Machen wir einen Roboter
[Lass uns mit Python spielen] Ein Haushaltsbuch erstellen
Machen wir einen Blockbruch mit wxPython
Versuchen Sie, ein einfaches Spiel mit Python 3 und iPhone zu erstellen
Erstellen Sie ein Empfehlungssystem mit Python
Machen wir mit xCAT einen Spacon
[Super einfach] Machen wir einen LINE BOT mit Python.
Lassen Sie uns mit Python einen Web-Socket-Client erstellen. (Zugriffstoken-Authentifizierung)
Erstellen wir mit Python eine kostenlose Gruppe
Lassen Sie uns mit PLY 1 eine einfache Sprache erstellen
[Python] Lassen Sie uns matplotlib mit Japanisch kompatibel machen
Machen wir mit Pylearn 2 eine dreiäugige KI
Lassen Sie uns eine Kombinationsberechnung mit Python durchführen
Erstellen Sie eine Desktop-App mit Python mit Electron
Lassen Sie uns einen Web-Chat mit WebSocket mit AWS serverless (Python) durchführen!
Machen Sie Twitter Trend Bot mit Heroku + Python
Ich habe eine GUI-App mit Python + PyQt5 erstellt
Ich möchte ein Spiel mit Python machen
Sie können auch mit Python problemlos eine GUI erstellen
Versuchen Sie, in Python einen "Entschlüsselungs" -Code zu erstellen
Versuchen Sie, mit Python eine Diedergruppe zu bilden
Lassen Sie uns mit SWIG ein Modul für Python erstellen
Dateidialog mit Python-GUI öffnen (tkinter.filedialog)
[Ev3dev] Lassen Sie uns ein Fernsteuerungsprogramm von Python mit dem RPyC-Protokoll erstellen
Machen wir einen Discord Bot.
Machen wir Othello mit wxPython
Erstelle Puyopuyo AI mit Python
[GUI in Python] PyQt5-Layout-Management-
Erstellen Sie ein Lesezeichen in Python
Schreiben wir Python mitinema4d.
Erstellen Sie ein Verzeichnis mit Python
Lassen Sie uns Git-Cat mit Python bauen
[GUI mit Python] PyQt5-Vorbereitung-
Machen Sie ein Feuer mit kdeplot
[GUI mit Python] PyQt5 -Paint-
Kombinieren Sie sich wiederholende Zeichenfolgen mit regulären Python-Ausdrücken zu einer.
Lassen Sie uns ein Befehls-Standby-Tool mit Python erstellen
[Übung] Erstellen Sie eine Watson-App mit Python! # 2 [Übersetzungsfunktion]
[Übung] Erstellen Sie eine Watson-App mit Python! # 1 [Sprachdiskriminierung]
Erstellen Sie einen einfachen Slackbot mit einer interaktiven Schaltfläche in Python
Machen Sie mit Python einen Haltepunkt auf der c-Ebene
Lassen Sie uns das Abhängigkeitsmanagement mit pip etwas einfacher machen
[Zum Spielen] Versuche Yuma zu einem LINE Bot zu machen (Python)
Erstellen Sie mit Python Pandas Py Installer ein CSV-Formatierungswerkzeug
Lassen Sie uns eine Mac-App mit Tkinter und py2app erstellen
Versuchen Sie, mit Rhinoceros / Grasshopper / GHPython ein sphärisches Gitter zu erstellen
Was ist Gott? Erstelle einen einfachen Chatbot mit Python
[Piyopiyokai # 1] Spielen wir mit Lambda: Erstellen eines Python-Skripts