Seite 1 von 1

PyQTGraph in MainWindow

Verfasst: Montag 11. Mai 2015, 15:22
von Tobi2707
Hallo Zusammen,

ich bin neu hier un habe folgendes Problem:
Ich habe mit QT Designer ein MainWindow erstellt und programmiere dies mit Python.
Hier gibt es ein TabWidget auf dem sich auf TAB 3 ein GraphicsView befindet. Hier möchte ich gerne einen Graph mit PyQtGraph einbinden, kann mir jemand erklären wie das funktioniert?

Hier mein Code:

Code: Alles auswählen

import matplotlib.pyplot as plt
import numpy as np
import io
import pandas as pd
import pyqtgraph as pg

from PyQt4 import QtCore, QtGui, uic

mainwindow_ui=uic.loadUiType("MainWindow.ui")[0]                        # Load GUI .ui file into the project

class MainWindow(QtGui.QMainWindow, mainwindow_ui):
  def __init__(self, parent=None):
    """pseudo constructor of main window"""
    QtGui.QMainWindow.__init__(self, parent)
    QtCore.QLocale.setDefault(QtCore.QLocale(QtCore.QLocale.English, QtCore.QLocale.UnitedStates))
    #print QtCore.QLocale.system().country()
    self.setupUi(self)
    self.tabWidget.setCurrentIndex(0)                                   # Tab-Index of Opening Window

Das ganze wird in der main aufgerufen, aber das funktioniert..
Vielen dank für eure Hilfe:)

Re: PyQTGraph in MainWindow

Verfasst: Dienstag 12. Mai 2015, 07:03
von MagBen
Du brauchst im QT Designer kein GraphicsView zum TabWidget hinzufügen. pyqtgraph.PlotWidget ist ein QWidget, das Du direkt zum TabWidget hinzufügen kannst. Hier ein kleines Beispiel, wie man pyqtgraph.PlotWidget als DockWidgets zum MainWindow hinzufügt:

Code: Alles auswählen

import sys
from PyQt4.QtCore import Qt
from PyQt4.QtGui import QApplication, QMainWindow, QDockWidget
from pyqtgraph import PlotWidget
import numpy as np

app = QApplication(sys.argv)

x = np.random.normal(size=1000)
y = np.random.normal(size=1000)
plot1 = PlotWidget()
plot1.plot(x, y, pen=None, symbol='o')
dock1 = QDockWidget("random")
dock1.setWidget(plot1)

x = np.linspace(0, 6*np.pi, 1000)
y = np.sin(x)
plot2 = PlotWidget()
plot2.plot(x, y)
dock2 = QDockWidget("sinus")
dock2.setWidget(plot2)

mainWindow = QMainWindow()
mainWindow.addDockWidget(Qt.LeftDockWidgetArea, dock1)
mainWindow.addDockWidget(Qt.LeftDockWidgetArea, dock2)
mainWindow.show()

app.exec_()
Bild

Re: PyQTGraph in MainWindow

Verfasst: Dienstag 12. Mai 2015, 07:16
von Tobi2707
Zunächst danke für die Hilfe. Ich denke die Zeilen 9 bis 22 kann ich exakt so übernehmen.
Wie würde jetzt der Befehl heißen um das ganze in den Tab einzufügen?

Vielen Dank:)

Re: PyQTGraph in MainWindow

Verfasst: Dienstag 12. Mai 2015, 07:27
von MagBen
Tobi2707 hat geschrieben:Wie würde jetzt der Befehl heißen um das ganze in den Tab einzufügen?
insertTab heißt die Methode

Code: Alles auswählen

import sys
from PyQt4.QtCore import Qt
from PyQt4.QtGui import QApplication, QMainWindow, QTabWidget
from pyqtgraph import PlotWidget
import numpy as np

app = QApplication(sys.argv)
tab = QTabWidget()

x = np.random.normal(size=1000)
y = np.random.normal(size=1000)
plot1 = PlotWidget()
plot1.plot(x, y, pen=None, symbol='o')
tab.insertTab(0, plot1, "random")

x = np.linspace(0, 6*np.pi, 1000)
y = np.sin(x)
plot2 = PlotWidget()
plot2.plot(x, y)
tab.insertTab(1, plot2, "sinus")

mainWindow = QMainWindow()
mainWindow.setCentralWidget(tab)
mainWindow.show()

app.exec_()
Bild

Re: PyQTGraph in MainWindow

Verfasst: Dienstag 12. Mai 2015, 07:31
von Tobi2707
das werde ich wohl gleich mal ausprobieren und bescheid sagen:)

Ich habe mal deinen code probiert und bekommen diesen Fehler:

Code: Alles auswählen

ImportError: cannot import name PlotWidget
Obwohl ich alles genauso habe wie du?

Re: PyQTGraph in MainWindow

Verfasst: Dienstag 12. Mai 2015, 07:39
von Tobi2707
Oh sorry, Habe den Fehler gefunden (ein ziemlich dummer sogar):
Ich hatte in meinem Ordner auch noch ein pyqtgraph.py file zum testen erstellt darauf wollte er dann zugreifen:D

Also im Tab Funktioniert es jetzt schon mal, wenn ich das ganze jetzt aber nur in einem kleiner Bereich in einem Tab haben möchte muss ich das ganze wahrscheinlich wieder teilen, wäre hierfür dann das graphicsView zu empfehlen und wie würde hier der Befehl lauten?

Re: PyQTGraph in MainWindow

Verfasst: Dienstag 12. Mai 2015, 08:26
von Tobi2707
Ich habe es auch hier nochmal selbst probiert, vielleicht kann mir ja jemand meine Fehler sagen:
x = np.linspace(0, 6*np.pi, 1000)
y = np.sin(x)
self.plot2 = PlotWidget()
self.plot2.plot(x, y)
self.tabWidget.insertTab(3, self.plot2, "random")

self.view = QtGui.QGraphicsScene()
self.view.addWidget(self.plot2)
self.graphicsView_1.setScene(self.view)
Fehler ist hierbei:

Code: Alles auswählen

QGraphicsProxyWidget::setWidget: cannot embed widget 0x9854858 which is not a toplevel widget, and is not a child of an embedded widget

Re: PyQTGraph in MainWindow

Verfasst: Dienstag 12. Mai 2015, 09:40
von MagBen
Du kannst das selbe PlotWidget nicht an zwei verschiedenen Stellen einfügen,
entweder
self.tabWidget.insertTab(3, self.plot2, "random")
oder
self.view.addWidget(self.plot2)
aber nicht beides.

Re: PyQTGraph in MainWindow

Verfasst: Dienstag 12. Mai 2015, 09:49
von Tobi2707
Ah das habe ich gerade auch gemerkt und habe jetzt eine Änderung vorgenommen. Nun habe ich das Problem dass das Plotwidget zu groß für mein GraphicsView ist, kann man das skallieren?
Würde gerne ein Bild hier hochladen, aber das klappt irgendwie auch niocht so richtig:D

Und noch ne zweite Frage, wenn ich mehrere Graphen in einem Plot habe, wie kann ich verschiedene Farben einstellen?

Vielen Dank, echt super:)

EDIT: http://up.picr.de/21883428fg.jpg

Re: PyQTGraph in MainWindow

Verfasst: Dienstag 12. Mai 2015, 13:59
von Tobi2707
Okay das mit der Farbe habe ich schonmal rausgefunden, das mit der Größe noch nicht.

Nutzt du eigentlich Linux oder wie bekommst du dieses Fensterdesign?

Re: PyQTGraph in MainWindow

Verfasst: Dienstag 12. Mai 2015, 19:16
von MagBen
Tobi2707 hat geschrieben:Nutzt du eigentlich Linux oder wie bekommst du dieses Fensterdesign?
Ubuntu