"My Graph Generation Application" par Python (PySide + PyQtGraph) Partie 1

introduction

Même les personnes qui ne sont pas spécialisées dans la programmation voudront créer des graphiques lorsqu'elles auront des données. La première chose qui me vient à l'esprit est Excel. Il est également largement utilisé comme prototypage de graphes, mais bien qu'il puisse être apprécié dans une certaine mesure avec des macros, il est souvent frustrant car il est gênant, lent, lourd et inflexible dans les petits détails. N'est-ce pas? Surtout pour un expérimentateur avec un grand nombre d'essais, il serait décourageant d'importer un par un des fichiers de données pour des centaines d'essais dans Excel. Plus encore, lorsque vous découvrez une petite erreur dans la légende des variables ou des graphiques ...

Bien sûr, il existe également des logiciels de dessin de graphiques tels que gnuplot qui peuvent être utilisés relativement facilement. Mais de toute façon, vous souhaitez utiliser une application de génération de graphiques entièrement personnalisée pour vous-même ... Non ... je veux y arriver! Eh bien, j'espère que ce sera une ligne directrice pour ces personnes, alors je publierai diverses choses ensemble.

Le contenu de ce temps est "Introduction et tout le programme".

Cible

Fondamentalement, l'objectif est de développer une "application de génération de graphes Je suis" pour les expérimentateurs. Plus précisément, il s'agit d'une application qui «lit un fichier qui stocke les données de mesure et dessine un graphique tout en modifiant les variables dans la section d'édition de l'interface graphique». Je pense que je n'aime pas le "I'm GUI" que je vais créer, que le format de fichier est différent du format de fichier que mes données gèrent, et que je n'ai pas besoin de changer les variables, mais je les modifierai au besoin. S'il vous plaît je". Pour le moment, les explications de la partie PySide (partie génération GUI), de la partie PyQtGraph (partie dessin graphique) et de la partie traitement détaillé sont séparées autant que possible, j'ai donc l'intention de lire uniquement la partie si nécessaire.

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

Les connaissances préalables sont supposées être "Connaissance de base de Python 3 (jusqu'au branchement conditionnel / boucle)". Avec le «je» à l'esprit, la priorité la plus élevée est de bouger à portée de main, de sorte que la façon de penser orientée objet est transmise. Je vais expliquer PySide et PyQtGraph un peu plus en détail.

Pour être honnête, je suis un programmeur amateur, donc il y a beaucoup de choses que je ne comprends pas. Veuillez signaler toute erreur.

À propos de PySide

Category:LanguageBindings::PySide - Qt Wiki PySide est un groupe de bibliothèques qui a rendu le framework d'interface graphique multiplateforme C ++ "Qt" disponible à partir de Python. Il y a aussi PyQt, mais les licences sont différentes (GPL et LGPL). Qt est le plus récent (?) Cadre d'interface graphique multiplateforme pour les ordinateurs de bureau, moderne, cool et facile à utiliser (approprié). À l'origine, Nokia, l'ancien propriétaire de "Qt", a commencé à développer Qt4 pour qu'il puisse être utilisé en Python. Après cela, il y a eu beaucoup de confusion, mais récemment, il y a eu une histoire sur la liste de diffusion selon laquelle Autodesk, une importante société de logiciels de CAO, a commencé à prendre en charge la dernière version de Qt5. Si vous suivez Twitter avec "PySide" comme mot de recherche, il semble qu'il soit beaucoup utilisé pour étendre le logiciel 3D CG "Maya" créé par Autodesk. De nombreux produits Autodesk utilisent Qt, donc je pense que c'est en partie à cause de cette connexion. Au fait, il y a beaucoup de tweets japonais.

À propos de PyQtGraph

PyQtGraph - Scientific Graphics and GUI Library for Python La bibliothèque de dessin de graphes Python la plus connue est peut-être Matplotlib. De nombreux points de comparaison sont décrits sur le Site Officiel, mais c'est ce PyQtGraph qui a été développé en mettant l'accent sur la réactivité du dessin, ce qui est une faiblesse de Matplotlib. .. Comme le dit PyQtGraph, «Matplotlib est plus mature, beaucoup de gens l'utilisent, et il vaut mieux l'utiliser là-bas», PyQtGraph semble avoir des points qui ne suffisent pas. Cependant, ce n'est qu'une question de temps car les discussions dans la communauté sont actives. Personnellement, je pense que la meilleure chose à propos de PyQtGraph est que si vous affichez deux graphiques côte à côte sans ajuster avec Matplotlib, le problème que la zone de dessin est couverte ou que l'étiquette d'axe est manquante comme indiqué ci-dessous ne se produit pas. Comme son nom l'indique, il s'agit d'une bibliothèque d'interface graphique spécialisée pour le dessin de graphe, qui est dérivée de Qt (PyQt / PySIde pour être exact).

Matploylib vs PyQtGraph

Installation

Si la dernière version de Python est installée, vous pouvez installer les deux à l'invite de commande (terminal / terminal) avec la commande pip. Peut-être avez-vous besoin de nampy lorsque vous mettez PyQtGraph. Dans ce cas, veuillez utiliser Anaconda.

pip install PySide
pip install PyQtGraph

Aperçu du programme

Afin de rendre le flux des explications plus facile à comprendre à l'avenir, je vais vous expliquer la vue d'ensemble du programme pour le moment. Créez un fichier source Python avec le contenu suivant avec un nom de fichier tel que "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]
    #Initialisation de la classe MainWindow(Génération d'interface graphique, connexion de fente de signal)
    def __init__(self, parent = None):
        super(MainWindow, self).__init__(parent)
    
# [5]
    #Mettre à jour fileNameListWidget
    def updateFileNameListWidget(self, fileNameListWidget, folderPath):
        print('updateFileNameListWidget')
    
# [6]
    #Fonction de génération de graphes
    def createGraph(self, folderPath, fileName):
        print('createGraph')
    
# [6.1]
    #Générer un ensemble de listes de données
    def createDataListSet(self, folderPath, fileName):
        print('createDataListSet')
    
# [6.2]
    #Lire un ensemble de listes de données
    def loadDataListSet(self, folderPath, fileName):
        print('loadDataListSet')
    
# [6.3]
    #Générer un graphique de test
    def createTestGraph(self, dataListSet):
        print('createTestGraph')

# [2]
if __name__ == '__main__':
    #Créer une application Qt
    app = QApplication(sys.argv)
    #Créer et afficher une fenêtre
    mainWin = MainWindow()
    mainWin.show()
    #Démarrez la boucle principale de Qt
    sys.exit(app.exec_())

Je vais l'expliquer, y compris la partie prédication dans Shaka. Chaque fonction a une instruction print () comme factice.

Tout d'abord, importez les modules et bibliothèques nécessaires dans ** [1] **. Le module os est utilisé pour lire le fichier qui stocke les données de mesure. A propos de l'importation de PySide et PyQtGraph

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

La raison est de réduire le nombre de frappes. Si vous utilisez Matplotlib, vous devez importer une bibliothèque supplémentaire, mais si vous utilisez PyQtGraph ici, ce sera simple.

Ensuite, la partie ** [2] ** est exécutée comme fonction principale. Comme commenté, mais aux endroits suivants,

    #Créer et afficher une fenêtre
    mainWin = MainWindow()
    mainWin.show()

Crée et affiche une fenêtre appelée mainWin.

La classe MainWindow (), qui est mainWin, hérite de QWwidget et l'initialise avec QWwidget, comme vous pouvez le voir à partir de ** [3] ** et ** [4] **. La prochaine fois, dans ** [4] **, nous décrirons des éléments de l'interface graphique tels qu'un widget de liste pour afficher la liste des fichiers, une zone de texte décrivant le répertoire de la liste à afficher et une zone de dessin graphique. ..

** [5] updateFileNameListWidget () ** est une fonction pour afficher la liste des fichiers dans le widget de liste mentionné ci-dessus.

** [6] createGraph () ** est une fonction d'amortissement pour générer une liste de données et dessiner un graphique basé sur celle-ci. Les listes de données sont créées avec ** [6.1] createDataListSet () ** et ** [6.2] loadDataListSet () **. Plus précisément, une fois que ** [6.2] ** est appelé, les données de mesure stockées dans le fichier sont lues et la liste de données obtenue en ** [6.1] ** est mise en forme en la multipliant par un coefficient et renvoyée. Ce sera. Dessinez un graphique en lançant cette liste de données formatée à ** [6.3] createTestGraph () **.

Ce qui précède est une vue d'ensemble du programme à créer.

D'ailleurs, en fait, il peut être exécuté comme un programme avec une interface graphique telle quelle. Veuillez ouvrir le répertoire où se trouve "graphApp.py" et l'exécuter comme suit. Je pense qu'une fenêtre propre s'ouvrira.

cd 「graphApp.Répertoire où se trouve "py"
python graphApp.py

その1成果

Aperçu de la prochaine fois

À partir de la prochaine fois, je prévois de développer le programme précédent en un peu plus de 300 lignes de code. La prochaine fois, nous ferons de la programmation GUI avec PySide dans [4] \ _ \ _ init \ _ \ _ ().

Recommended Posts

"My Graph Generation Application" par Python (PySide + PyQtGraph) Partie 2
"My Graph Generation Application" par Python (PySide + PyQtGraph) Partie 1
Mon PySide (Python)
Application Python: Pandas Partie 1: Basique
Application Python: Pandas Partie 2: Série
Application de Python: Nettoyage des données Partie 1: Notation Python
Générateur de nombres premiers par Python
Application Python: Numpy Partie 3: Double tableau
Application Python: visualisation de données partie 1: basique
Application de Python: visualisation de données Partie 3: divers graphiques
Application de Python: Pandas Partie 4: Concaténation et combinaison de DataFrames
Dessinez un graphique avec PyQtGraph Part 1-Drawing
Interpolation d'images vidéo par apprentissage en profondeur, partie 1 [Python]
Dessinez un graphique avec les paramètres PyQtGraph Part 4-PlotItem
Dessinez un graphique avec PyQtGraph Partie 6 - Affichage d'une légende
Application de Python: Traitement des données Partie 2: Analyse de divers formats de données