Matplotlib Plot in Qt Gui TabWidget

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
QTim
User
Beiträge: 7
Registriert: Mittwoch 27. September 2017, 08:58

Hallo,
ich habe eine kleine GUI geschrieben, welche ein TabWidget enthält und in die Tabs möchte ich gerne auf Knopfdruck eine Funktion plotten.
Zwar gibt es auf http://matplotlib.org/2.0.0/examples/us ... n_qt4.html ein beispiel, wie man einen Plot in eine Gui einbettet, allerdings bin ich noch ein Frischling in Python und verstehe nicht ganz, wie man den Plot in den Tab integriert.
Die Dokumentation von QT hat mir ebenfalls nicht weitergeholfen. http://doc.qt.io/qt-4.8/qtabwidget.html
Sie besagt, ich soll child widgets in die page widgets integrieren??? ich verstehe leider nicht, was die meinen..

Das habe ich bisher geschrieben:

Code: Alles auswählen

from PyQt4 import QtCore, QtGui
from PyQt4.QtGui import QMainWindow, QTabWidget, QWidget
import sys

from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure

class Ui_GTM_Form(QtGui.QWidget):

    def __init__(self):
        QtGui.QWidget.__init__(self)

        self.main_frame = QtGui.QWidget()                              
        self.tabWidget = QtGui.QTabWidget( self.main_frame )           
        self.vbox = vbox = QtGui.QVBoxLayout()                         
        vbox.addWidget(self.tabWidget)                                 

        
        self.setWindowIcon(QtGui.QIcon("Fraunhofer_icon.png"))
        self.setupUi(self)
        
       
    def StartGTM(self):
        print "Start"
        x = np.linspace(1, 2*np.pi, 100)
        y = np.sin(np.pi*x)+0.1*np.random.randn(100)

        f = Figure() 
        a = f.add_subplot(111)
        a.plot(x,y)


        tabwid = QTabWidget()
        WGA = QWidget()
        canvas = FigureCanvas(f)
        canvas.setParent(WGA)
        
        tabwid.addTab(WGA, "Tab A")		#??? ; Tab A ist der Name des ersten tabs

        tabwid.addWidget(FigureCanvas(f))
        canvas.show()
        
if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    ex = Ui_GTM_Form()
    ex.show()
    sys.exit(app.exec_())

Hat jemand eventuell eine Idee, wie es funktionieren könnte? ich bin solangsam mit meinem Latein am Ende..
Ich nutze Python 2.7 mit PyQt4..
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Qt4 ist wirklich sehr, sehr alt. Das solltest du gar nicht mehr benutzen.

Hier ein Tutorial fuer PyQt5 & matplotlib:

https://pythonspot.com/en/pyqt5-matplotlib/
QTim
User
Beiträge: 7
Registriert: Mittwoch 27. September 2017, 08:58

Danke, Problem ist leider nur dass ich PyQt5 nicht auf meinem Pi zum laufen bringen konnte, deshalb versuche ich es so
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wundert mich. Ich hab's laufen gehabt. Ich habe eigentlich sehr gute Erfahrungen mit Ubuntu MATE gemacht, und da gibt's das AFAIK mit bei.
QTim
User
Beiträge: 7
Registriert: Mittwoch 27. September 2017, 08:58

Ich muss auch gestehen, dass das mein erstes Projekt ist, indem ich mich mit dem Pi richtig auseinandersetze und mich gerade erst in die Linuxwelt einfinde. Viel Erfahrung habe ich noch nicht, da ich das ca erst seit zwei Wochen mache. Installiert ist Jessie, falls es interessiert :D
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich habe kein Qt4 und werde das auch nicht extra installieren. Da es auch nicht mehr maintained wird, wuerde ich dir raten auf Ubuntu zu wechseln. Da findest du pyqt5:

https://packages.ubuntu.com/search?suit ... chon=names

Aber vielleicht hast du Glueck und wer anders hier kann dir helfen.
Antworten