Je suis en train de concevoir une interface graphique avec PyQt
où j'ai besoin d'afficher une fenêtre matplotlib/pylab lorsque je clique sur un bouton qui fait l'intrigue des données d'une fonction que j'ai créée. C'est comme une exécution utilisée dans Matlab. Je veux garder la fenêtre matplotlib/pylab comme fenêtre chaque fois que j'appuie sur ce bouton.Comment tracer sur mon interface graphique
Répondre
Eli Bendersky a écrit un exemple de code qui utilise matplotlib dans les PyQt: http://eli.thegreenplace.net/2009/01/20/matplotlib-with-pyqt-guis/
Intégration Matplotlib avec PyQt prend un peu de travail. Voici un exemple: http://sourceforge.net/mailarchive/message.php?msg_id=29086544
Cependant, il y a quelques bibliothèques complotant conçus spécifiquement autour PyQt:
Voici un exemple de base qui va tracer trois échantillons différents en utilisant un QThread
:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import random
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg
from matplotlib.figure import Figure
from PyQt4 import QtGui, QtCore
class MatplotlibWidget(QtGui.QWidget):
def __init__(self, parent=None):
super(MatplotlibWidget, self).__init__(parent)
self.figure = Figure()
self.canvas = FigureCanvasQTAgg(self.figure)
self.axis = self.figure.add_subplot(111)
self.layoutVertical = QtGui.QVBoxLayout(self)
self.layoutVertical.addWidget(self.canvas)
class ThreadSample(QtCore.QThread):
newSample = QtCore.pyqtSignal(list)
def __init__(self, parent=None):
super(ThreadSample, self).__init__(parent)
def run(self):
randomSample = random.sample(range(0, 10), 10)
self.newSample.emit(randomSample)
class MyWindow(QtGui.QWidget):
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)
self.pushButtonPlot = QtGui.QPushButton(self)
self.pushButtonPlot.setText("Plot")
self.pushButtonPlot.clicked.connect(self.on_pushButtonPlot_clicked)
self.matplotlibWidget = MatplotlibWidget(self)
self.layoutVertical = QtGui.QVBoxLayout(self)
self.layoutVertical.addWidget(self.pushButtonPlot)
self.layoutVertical.addWidget(self.matplotlibWidget)
self.threadSample = ThreadSample(self)
self.threadSample.newSample.connect(self.on_threadSample_newSample)
self.threadSample.finished.connect(self.on_threadSample_finished)
@QtCore.pyqtSlot()
def on_pushButtonPlot_clicked(self):
self.samples = 0
self.matplotlibWidget.axis.clear()
self.threadSample.start()
@QtCore.pyqtSlot(list)
def on_threadSample_newSample(self, sample):
self.matplotlibWidget.axis.plot(sample)
self.matplotlibWidget.canvas.draw()
@QtCore.pyqtSlot()
def on_threadSample_finished(self):
self.samples += 1
if self.samples <= 2:
self.threadSample.start()
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
app.setApplicationName('MyWindow')
main = MyWindow()
main.resize(666, 333)
main.show()
sys.exit(app.exec_())
Si je vous comprends bien vous avez une application avec une interface graphique et que vous voulez tracer un graphique dans une fenêtre séparée que l'interface graphique utilise. pyqtgraph
peut le faire bien.
premier type pip install pyqtgraph
dans l'invite de commande pour installer pyqtgraph
puis
import pyqtgraph as pg
pg.setConfigOption('background', 'w') # sets background to white
pg.setConfigOption('foreground', 'k') # sets axis color to black
pw = pg.plot(x, y, pen='g') # 1st plot (green)
pw.plot(x2, y2, pen='b') # 2nd plot in same figure (blue)
pw.setLabel('bottom', 'x-label') # x-label
pw.setLabel('left', 'y-label') # y-label
plus d'info ici: http://www.pyqtgraph.org/documentation/how_to_use.html
Ceci est du code de user1006989 (meilleure réponse) adaptée à PyQt5 , espérons qu'il sera utile à quelqu'un:
Voici un exemple de base qui tracera trois échantillons différents en utilisant un QThread:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import random
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg
from matplotlib.figure import Figure
from PyQt5 import QtCore #conda install pyqt
from PyQt5 import QtWidgets
class MatplotlibWidget(QtWidgets.QWidget):
def __init__(self, parent=None):
super(MatplotlibWidget, self).__init__(parent)
self.figure = Figure()
self.canvas = FigureCanvasQTAgg(self.figure)
self.axis = self.figure.add_subplot(111)
self.layoutVertical = QtWidgets.QVBoxLayout(self)#QVBoxLayout
self.layoutVertical.addWidget(self.canvas)
class ThreadSample(QtCore.QThread):
newSample = QtCore.pyqtSignal(list)
def __init__(self, parent=None):
super(ThreadSample, self).__init__(parent)
def run(self):
randomSample = random.sample(range(0, 10), 10)
self.newSample.emit(randomSample)
class MyWindow(QtWidgets.QWidget):
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)
self.pushButtonPlot = QtWidgets.QPushButton(self)
self.pushButtonPlot.setText("Plot")
self.pushButtonPlot.clicked.connect(self.on_pushButtonPlot_clicked)
self.matplotlibWidget = MatplotlibWidget(self)
self.layoutVertical = QtWidgets.QVBoxLayout(self)
self.layoutVertical.addWidget(self.pushButtonPlot)
self.layoutVertical.addWidget(self.matplotlibWidget)
self.threadSample = ThreadSample(self)
self.threadSample.newSample.connect(self.on_threadSample_newSample)
self.threadSample.finished.connect(self.on_threadSample_finished)
@QtCore.pyqtSlot()
def on_pushButtonPlot_clicked(self):
self.samples = 0
self.matplotlibWidget.axis.clear()
self.threadSample.start()
@QtCore.pyqtSlot(list)
def on_threadSample_newSample(self, sample):
self.matplotlibWidget.axis.plot(sample)
self.matplotlibWidget.canvas.draw()
@QtCore.pyqtSlot()
def on_threadSample_finished(self):
self.samples += 1
if self.samples <= 2:
self.threadSample.start()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
app.setApplicationName('MyWindow')
main = MyWindow()
main.resize(666, 333)
main.show()
sys.exit(app.exec_())
- 1. L'écriture de flux est en retard sur mon interface graphique
- 2. Tracer deux facteurs sur le même graphique
- 3. Interface beanstalkd/interface graphique
- 4. Comment faire pour que mon interface graphique fonctionne
- 5. comment tracer un graphique RDF pour l'inspection?
- 6. Comment dois-je organiser mon interface graphique Java?
- 7. Tracer graphique en utilisant .NET
- 8. Comment tracer des valeurs natives sur un graphique dans un graphique de base?
- 9. Afficher la sortie CMD dans mon interface graphique (Java)
- 10. WPF ajouter une horloge à mon interface graphique
- 11. Comment ajouter une étiquette multiligne sur une interface graphique Java?
- 12. interface graphique mod_rewrite?
- 13. Interface utilisateur graphique
- 14. Comment développer une bonne interface graphique?
- 15. tracer un graphique 3D dans matlab?
- 16. Interface graphique Citrix en C#
- 17. Comment automatiser une interface graphique Siebel?
- 18. En C# comment afficher une interface graphique d'une autre interface graphique, basée sur l'événement d'une classe dans un autre thread?
- 19. Interface graphique C# avec onglets
- 20. Appel de sommeil sur le thread courant bloque mon interface graphique principale
- 21. Comment tracer un graphique de colonnes empilées dans R?
- 22. Interface utilisateur graphique C# dans MVC
- 23. Contrôle d'une interface graphique C# basée sur les arguments d'entrée
- 24. Création d'une interface utilisateur graphique basée sur Swing dans Jython
- 25. Apprendre différentes technologies Java sans interface graphique?
- 26. Interface graphique tactile dans Windows Mobile
- 27. Polices japonaises dans une interface graphique Java
- 28. Interface graphique pour le processus de construction
- 29. C++ Comment créer une interface graphique en directx?
- 30. comment tracer ~~ 200k de paires de données sur un graphique 2D? Est-ce possible avec php?
Vous générez les données pour tracer l'intérieur de votre classe (avec le générateur aléatoire). Est-il possible de transmettre les données de l'extérieur. Quelque chose comme ça: 'main = MyWindow (data)' – jonie83