"My Graph Generation Application" von Python (PySide + PyQtGraph) Teil 1

Einführung

Selbst Leute, die nicht auf Programmierung spezialisiert sind, möchten Diagramme erstellen, wenn sie Daten haben. Das erste, was mir dabei einfällt, ist Excel. Es wird auch häufig als Graph-Prototyping verwendet, aber obwohl es bis zu einem gewissen Grad mit Makros verwendet werden kann, ist es oft frustrierend, weil es in kleinen Details mühsam, langsam, schwer und unflexibel ist. Ist es nicht? Insbesondere für einen Experimentator mit einer großen Anzahl von Versuchen wäre es entmutigend, Datendateien für Hunderte von Versuchen nacheinander in Excel zu importieren. Umso mehr, wenn Sie einen kleinen Fehler in der Legende von Variablen oder Diagrammen entdecken ...

Natürlich gibt es auch Grafikzeichnungssoftware wie Gnuplot, die relativ einfach verwendet werden kann. Trotzdem möchten Sie eine vollständig angepasste Anwendung zur Graphengenerierung für sich selbst verwenden ...! Nein ... ich will es schaffen! Nun, ich hoffe, dass es eine Richtlinie für solche Leute sein wird, also werde ich verschiedene Dinge zusammen veröffentlichen.

Der Inhalt dieser Zeit ist "Einführung und das gesamte Programm".

Ziel

Grundsätzlich besteht das Ziel darin, eine "Ich bin Graph Generierungsanwendung" für Experimentatoren zu entwickeln. Insbesondere handelt es sich um eine Anwendung, die "eine Datei liest, in der Messdaten gespeichert und ein Diagramm gezeichnet werden, während Variablen im Bearbeitungsbereich der GUI geändert werden". Ich denke, dass mir die "Ich bin GUI", die ich erstellen werde, nicht gefällt, dass sich das Dateiformat von dem Dateiformat unterscheidet, das meine Daten verarbeiten, und dass ich die Variablen nicht ändern muss, aber ich werde sie nach Bedarf ändern. Bitte ich". Derzeit werden die Erläuterungen zum PySide-Teil (GUI-Generierungsteil), zum PyQtGraph-Teil (Grafikzeichnungsteil) und zum Detailverarbeitungsteil so weit wie möglich getrennt, sodass ich beabsichtige, nur den Teil nach Bedarf zu lesen.

おれおれグラフ生成アプリケーション

Vorausgesetztes Wissen wird als "Grundkenntnisse in Python 3 (bis zur bedingten Verzweigung / Schleife)" vorausgesetzt. Mit Blick auf "Ich" ist es die höchste Priorität, sich zur Hand zu bewegen, damit die objektorientierte Denkweise durchlaufen wird. Ich werde PySide und PyQtGraph etwas genauer erklären.

Um ehrlich zu sein, ich bin ein Hobby-Programmierer, daher gibt es viele Dinge, die ich nicht verstehe. Bitte weisen Sie auf Fehler hin.

Über PySide

Category:LanguageBindings::PySide - Qt Wiki PySide ist eine Gruppe von Bibliotheken, die das plattformübergreifende C ++ - GUI-Framework "Qt" von Python verfügbar gemacht haben. Es gibt auch PyQt, aber die Lizenzen sind unterschiedlich (GPL und LGPL). Qt ist das neueste (?) Plattformübergreifende GUI-Framework für Desktops, modern, cool und einfach zu bedienen (angemessen). Ursprünglich begann Nokia, der frühere Besitzer von "Qt", mit der Entwicklung von Qt4, damit es in Python verwendet werden kann. Danach gab es viel Verwirrung, aber kürzlich gab es eine Geschichte auf der Mailingliste, dass Autodesk, ein großes CAD-Softwareunternehmen, damit begann, die neueste Version von Qt5 zu unterstützen. Wenn Sie Twitter mit "PySide" als Suchwort folgen, wird es anscheinend häufig verwendet, um die 3D-CG-Software "Maya" von Autodesk zu erweitern. Viele Autodesk-Produkte verwenden Qt, daher denke ich, dass dies teilweise auf diese Verbindung zurückzuführen ist. Übrigens gibt es viele japanische Tweets.

Über PyQtGraph

PyQtGraph - Scientific Graphics and GUI Library for Python Die vielleicht bekannteste Python-Grafikzeichnungsbibliothek ist Matplotlib. Viele Vergleichspunkte sind auf der offiziellen Website beschrieben, aber es ist dieses PyQt-Diagramm, das mit Schwerpunkt auf der Reaktionsfähigkeit beim Zeichnen entwickelt wurde, was eine Schwäche von Matplotlib darstellt. .. Wie PyQtGraph sagt: "Matplotlib ist reifer, viele Leute benutzen es und es ist besser, es dort zu benutzen", scheint es einige Punkte zu geben, die PyQtGraph fehlen. Es ist jedoch nur eine Frage der Zeit, da die Diskussionen in der Community aktiv sind. Persönlich denke ich, dass das Beste an PyQtGraph ist, dass, wenn Sie zwei Diagramme nebeneinander anzeigen, ohne sie mit Matplotlib anzupassen, das Problem, dass der Zeichenbereich abgedeckt ist oder die Achsenbeschriftung fehlt, wie unten gezeigt, nicht auftritt. Wie der Name schon sagt, handelt es sich um eine auf das Zeichnen von Grafiken spezialisierte GUI-Bibliothek, die von Qt (genauer gesagt PyQt / PySIde) abgeleitet ist.

Matploylib vs PyQtGraph

Installation

Wenn Sie das neueste Python installiert haben, können Sie beide an der Eingabeaufforderung (Terminal / Terminal) mit dem Befehl pip installieren. Vielleicht brauchen Sie nampy, wenn Sie PyQtGraph setzen. In diesem Fall verwenden Sie bitte Anaconda.

pip install PySide
pip install PyQtGraph

Übersicht über das Programm

Um den Ablauf der Erklärungen in Zukunft verständlicher zu gestalten, werde ich vorerst das Gesamtbild des Programms erläutern. Erstellen Sie eine Python-Quelldatei mit dem folgenden Inhalt und einem Dateinamen wie "graphApp.py".

graphApp.py


# [1]
import sys
import os
from PySide.QtCore import *
from PySide.QtGui import *
import pyqtgraph as pg

# [3]
class MainWindow(QWidget):
# [4]
    #Initialisierung der MainWindow-Klasse(GUI-Generierung, Signalsteckplatzverbindung)
    def __init__(self, parent = None):
        super(MainWindow, self).__init__(parent)
    
# [5]
    #Aktualisieren Sie fileNameListWidget
    def updateFileNameListWidget(self, fileNameListWidget, folderPath):
        print('updateFileNameListWidget')
    
# [6]
    #Graphgenerierungsfunktion
    def createGraph(self, folderPath, fileName):
        print('createGraph')
    
# [6.1]
    #Generieren Sie eine Reihe von Datenlisten
    def createDataListSet(self, folderPath, fileName):
        print('createDataListSet')
    
# [6.2]
    #Lesen Sie eine Reihe von Datenlisten
    def loadDataListSet(self, folderPath, fileName):
        print('loadDataListSet')
    
# [6.3]
    #Generieren Sie ein Testdiagramm
    def createTestGraph(self, dataListSet):
        print('createTestGraph')

# [2]
if __name__ == '__main__':
    #Erstellen Sie eine Qt-Anwendung
    app = QApplication(sys.argv)
    #Erstellen Sie ein Fenster und zeigen Sie es an
    mainWin = MainWindow()
    mainWin.show()
    #Starten Sie die Hauptschleife von Qt
    sys.exit(app.exec_())

Ich werde es erklären, einschließlich des Predigtteils in Shaka. Jede Funktion hat eine print () - Anweisung als Dummy.

Importieren Sie zunächst die erforderlichen Module und Bibliotheken in ** [1] **. Das OS-Modul wird zum Lesen der Datei verwendet, in der die Messdaten gespeichert sind. Informationen zum Importieren von PySide und PyQtGraph

from PySide.QtCore import *
from PySide.QtGui import *
import pyqtgraph as pg

Der Grund ist, die Anzahl der Tastenanschläge zu reduzieren. Wenn Sie Matplotlib verwenden, müssen Sie eine zusätzliche Bibliothek importieren. Wenn Sie jedoch PyQtGraph hier verwenden, ist dies einfach.

Dann wird der Teil ** [2] ** als Hauptfunktion ausgeführt. Wie kommentiert, aber an folgenden Stellen,

    #Erstellen Sie ein Fenster und zeigen Sie es an
    mainWin = MainWindow()
    mainWin.show()

Erstellt ein Fenster mit dem Namen mainWin und zeigt es an.

Die MainWindow () -Klasse mainWin erbt QWwidget und initialisiert es mit QWwidget, wie Sie aus ** [3] ** und ** [4] ** ersehen können. Das nächste Mal beschreiben wir in ** [4] ** GUI-Elemente wie ein Listen-Widget zum Anzeigen der Dateiliste, ein Textfeld, das das Verzeichnis der anzuzeigenden Liste beschreibt, und einen Diagrammzeichnungsbereich. ..

** [5] updateFileNameListWidget () ** ist eine Funktion zum Anzeigen der Dateiliste im oben genannten Listen-Widget.

** [6] createGraph () ** ist eine Kissenfunktion zum Generieren einer Datenliste und zum Zeichnen eines darauf basierenden Diagramms. Datenlisten werden mit ** [6.1] createDataListSet () ** und ** [6.2] loadDataListSet () ** erstellt. Insbesondere werden nach dem Aufruf von ** [6.2] ** die in der Datei gespeicherten Messdaten gelesen und die in ** [6.1] ** erhaltene Datenliste durch Multiplizieren mit einem Koeffizienten geformt und zurückgegeben. Es wird sein. Zeichnen Sie ein Diagramm, indem Sie diese formatierte Datenliste in ** [6.3] createTestGraph () ** werfen.

Das Obige ist das Gesamtbild des zu erstellenden Programms.

Übrigens kann es tatsächlich als Programm mit einer GUI ausgeführt werden, wie es ist. Bitte öffnen Sie das Verzeichnis, in dem sich "graphApp.py" befindet, und führen Sie es wie folgt aus. Ich denke, ein sauberes Fenster wird sich öffnen.

cd 「graphApp.Verzeichnis, in dem sich "py" befindet
python graphApp.py

その1成果

Vorschau beim nächsten Mal

Ab dem nächsten Mal plane ich, das vorherige Programm auf etwas mehr als 300 Codezeilen zu erweitern. Nächstes Mal werden wir die GUI-Programmierung mit PySide in [4] \ _ \ _ init \ _ \ _ () durchführen.

Recommended Posts

"My Graph Generation Application" von Python (PySide + PyQtGraph) Teil 2
"My Graph Generation Application" von Python (PySide + PyQtGraph) Teil 1
Mein PySide (Python)
Python-Anwendung: Pandas Teil 1: Basic
Python-Anwendung: Pandas Teil 2: Serie
Anwendung von Python: Datenbereinigung Teil 1: Python-Notation
Primzahlgenerator von Python
Python-Anwendung: Numpy Teil 3: Double Array
Python-Anwendung: Datenvisualisierung Teil 1: Grundlegend
Anwendung von Python: Datenvisualisierung Teil 3: Verschiedene Grafiken
Anwendung von Python: Pandas Teil 4: Verketten und Kombinieren von DataFrames
Zeichnen Sie ein Diagramm mit PyQtGraph Part 1-Drawing
Videorahmeninterpolation durch tiefes Lernen Teil 1 [Python]
Zeichnen Sie ein Diagramm mit den Einstellungen von PyQtGraph Part 4-PlotItem
Zeichnen Sie ein Diagramm mit PyQtGraph Teil 6 - Anzeigen einer Legende
Anwendung von Python: Datenverarbeitung Teil 2: Analyse verschiedener Datenformate