Pyqtgraph Fragen neu

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
caargoo
User
Beiträge: 20
Registriert: Sonntag 26. Januar 2020, 10:42

Hallo zusammen,

eines vorweg: Das folgende Programm hat keinen tieferen Sinn.
Es dient lediglich zu Übungszwecken.

Ich erstelle mit Qt-Designer eine GUI in dem sich ein graphicsView - Widget befindet.
Dieses wird als pyqtgraph PlotItem promotet und als gv1 angesprochen.
Ich möchte links und rechts eine Y-Achse mit unterschiedlichen Skalen haben.
Siehe Bild.
Dazu hab ich 2 Fragen:
1. Wie bekomme ich die Skalierung der linken Achse über die gesamte Achsenlänge?
2. Warum wird die Labelbeschriftung der rechten Achse fast aus dem Widget geschoben?

Bild:
Bild

Code: Alles auswählen

# -*- coding: utf-8 -*- 
from PyQt5 import QtWidgets, QtCore, QtGui, uic
import pyqtgraph as pg
from pyqtgraph import PlotWidget, plot
import sys  
from random import randint

class MainWindow(QtWidgets.QMainWindow):

    def __init__(self):
        super(MainWindow, self).__init__()
        
        uic.loadUi('plot_test.ui', self) 
        self.setup()
        
    def setup(self):
        
        #gv.showGrid(x=True,y=True)
        self.gv1.setYRange(0,100)  # zeigt Brille
        #self.gv1.setXRange(1,10)
        
        # Startwerte
        self.x = list(range(10))
        self.y = [randint(0,10) for _ in range(10)]
        
        # Achsen
        self.gv1.showAxis('left')
        yaxl = self.gv1.getAxis('left')
        self.gv1.getAxis('left').setLabel('Temperatur', units='°C', color='r', **{'font-size':'14pt'})
        self.gv1.getAxis('left').setPen(pg.mkPen(color= 'r', width = 1)) 
        lticks  = [10,12,14,16,18,20,22,24,26,28,30,32]
        yaxl.setTicks([[(v, str(v)) for v in lticks]])        
             
          
        self.gv1.showAxis('right')
        yaxr = self.gv1.getAxis('right')
        yaxr.setWidth(100)
        self.gv1.getAxis('right').setLabel('Luftfeuchte', units='%', color='c', **{'font-size':'14pt'})
        self.gv1.getAxis('right').setPen(pg.mkPen(color= 'c', width = 1)) 
        rticks  = [0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100]
        yaxr.setTicks([[(v, str(v)) for v in rticks]])        
        
        
        pen = pg.mkPen(color = ('b'), width = 1)
        self.data_line = self.gv1.plot(self.x, self.y, pen = pen)
        
        
        self.timer = QtCore.QTimer()
        self.timer.setInterval(1500)
        self.timer.timeout.connect(self.update_plot_data)
        self.timer.start()
        
        
    def update_plot_data(self):
        
        # ersten y wert entfernen
        self.x = self.x[1:]
        # letzten x wert um 1 erhöhen
        self.x.append(self.x[-1] + 1)
        
        
        # ersten wert entfernen
        self.y = self.y[1:]
        # neuen Zufallswert anhängen
        self.y.append(randint(0,100))
        self.wert.setText(str(self.y[-1]))
        
        # Update 
        self.data_line.setData(self.x, self.y)
        #self.gv1.plot(self.x, self.y, pen='y', symbol='+')

            
def main():
    app = QtWidgets.QApplication(sys.argv)
    main = MainWindow()
    main.show()
    main.ende.clicked.connect(main.close) 
    sys.exit(app.exec())
        
if __name__ == '__main__':      
    main()        
    
Danke im voraus
Antworten