PyQTGraph in MainWindow

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Tobi2707
User
Beiträge: 13
Registriert: Montag 11. Mai 2015, 15:15

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:)
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

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
a fool with a tool is still a fool, www.magben.de, YouTube
Tobi2707
User
Beiträge: 13
Registriert: Montag 11. Mai 2015, 15:15

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:)
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

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
a fool with a tool is still a fool, www.magben.de, YouTube
Tobi2707
User
Beiträge: 13
Registriert: Montag 11. Mai 2015, 15:15

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?
Tobi2707
User
Beiträge: 13
Registriert: Montag 11. Mai 2015, 15:15

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?
Tobi2707
User
Beiträge: 13
Registriert: Montag 11. Mai 2015, 15:15

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
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

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.
a fool with a tool is still a fool, www.magben.de, YouTube
Tobi2707
User
Beiträge: 13
Registriert: Montag 11. Mai 2015, 15:15

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
Tobi2707
User
Beiträge: 13
Registriert: Montag 11. Mai 2015, 15:15

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?
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Tobi2707 hat geschrieben:Nutzt du eigentlich Linux oder wie bekommst du dieses Fensterdesign?
Ubuntu
a fool with a tool is still a fool, www.magben.de, YouTube
Antworten