QT-QVBarModelMapper-Problem
Verfasst: Donnerstag 28. Mai 2020, 23:30
				
				Hey Leute ,
Ich habe folgendes Problem Ich versuche gerade in Python folgendes nachzubauen : https://doc.qt.io/qt-5/qtcharts-barmode ... ample.html
Mein Code sieht wie folgt aus :
Also das Programm gibt mir keine Fehler zurück und Funktioniert auch erst nur ich verstehe nicht ( Wenn Ich in meiner Tabelle was ändere aktualisiert leider mein Graph nicht und ich weiß leider nicht wieso ) Ich habe mir den Code im Qt Creator angeschaut dort funktioniert es genau so und Ich habe gedacht das QVBarModelMapper das händelt wenn sich was an den Daten ändert ...
Ich hoffe Ihr könnt mir weiterhelfen.
Mit freundlichen Grüßen:
Marcel
			Ich habe folgendes Problem Ich versuche gerade in Python folgendes nachzubauen : https://doc.qt.io/qt-5/qtcharts-barmode ... ample.html
Mein Code sieht wie folgt aus :
Code: Alles auswählen
import sys, random
from PyQt5.QtWidgets import QApplication, QTableView, QWidget, QHeaderView, QGridLayout, QMainWindow
from PyQt5.QtCore import QAbstractTableModel, QModelIndex, QVariant, Qt, QtDebugMsg, QTime,Qt
from PyQt5.QtGui import QColor, QPainter
from PyQt5.QtChart import QChartView, QValueAxis, QBarCategoryAxis, QChart, QBarSeries, QVBarModelMapper,QBarSet
class CustomTableModel(QAbstractTableModel):
    def __init__(self):
        super(CustomTableModel, self).__init__()
        self.data =[
        [4,9,2,4,5,4],
        [1,0,0,8,6,4],
        [3,5,0,4,3,4],
        [4,9,2,4,5,4],
        [1,0,0,8,6,4],
        [3,5,0,4,3,4],
        [4,9,2,4,5,4],
        [1,0,0,8,6,4],
        [3,5,0,4,3,4],
        [4,9,2,4,5,4],
        [1,0,0,8,6,4],
        [3,5,0,4,3,4],
        ]
    def data(self, index, role):
        if role == Qt.DisplayRole:
            value = self.data[index.row()][index.column()]
            return value
        if role == Qt.EditRole:
            return self.data[index.row()][index.column()]
    def rowCount(self, index):
        return len(self.data)
    def columnCount(self, index):
        return len(self.data[0])
    def headerData(self, section, Qt_Orientation, role=None):
        if role == Qt.DisplayRole:
            if Qt_Orientation == Qt.Horizontal:
                return "Kanal"
            else:
                return ("Jan")
    def flags(self, index):
        return Qt.ItemIsEditable | Qt.ItemIsEnabled | Qt.ItemIsSelectable
    def setData(self, index, value, role):
        if role == Qt.EditRole:
            row = index.row()
            column = index.column()
            data = value
            self.data[row][column] = data
            self.dataChanged.emit(index, index)
            return True
        return False
class Mainwindow():
    def __init__(self):
        app = QApplication(sys.argv)
        self.win = QWidget()
        m_model = CustomTableModel()
        tableview = QTableView()
        tableview.setModel(m_model)
        tableview.setMinimumWidth(300)
        tableview.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
        tableview.verticalHeader().setSectionResizeMode(QHeaderView.Stretch)
        m_model.setParent(tableview)
        chart = self.chart()
        series = self.series(m_model,chart)
        self.Achsen(chart,series)
        chartview = self.chartview(chart)
        self.layout(tableview,chartview)
        self.win.show()
        sys.exit(app.exec_())
#-----------------------------------------------------------------------------------------------------------------------
    def chart(self):
        chart = QChart()
        chart.setAnimationOptions(QChart.AllAnimations)
        return chart
    def series(self,m_model,chart):
        series = QBarSeries()
        first = 3
        count = 5
        mapper = QVBarModelMapper()
        mapper.setFirstBarSetColumn(1)
        mapper.setLastBarSetColumn(4)
        mapper.setFirstRow(first)
        mapper.setRowCount(count)
        mapper.setSeries(series)
        mapper.setModel(m_model)
        chart.addSeries(series)
        return series
    def Achsen(self,chart,series):
        categories = ["April","May","June","July","August"]
        X_Achse = QBarCategoryAxis()
        X_Achse.append(categories)
        chart.addAxis(X_Achse,Qt.AlignBottom)
        series.attachAxis(X_Achse)
        Y_Achse = QValueAxis()
        print(Y_Achse)
        chart.addAxis(Y_Achse,Qt.AlignLeft)
        series.attachAxis(Y_Achse)
    def chartview(self,chart):
        chartview = QChartView(chart)
        chartview.setRenderHint(QPainter.Antialiasing)
        chartview.setMinimumSize(640, 480)
        return chartview
    def layout(self,tableview,chartview):
        Layout = QGridLayout()
        Layout.addWidget(tableview,1,0)
        Layout.addWidget(chartview,1,1)
        Layout.setColumnStretch(1, 1)
        Layout.setColumnStretch(0, 0)
        self.win.setLayout(Layout)
if __name__ == '__main__':
    Mainwindow()Also das Programm gibt mir keine Fehler zurück und Funktioniert auch erst nur ich verstehe nicht ( Wenn Ich in meiner Tabelle was ändere aktualisiert leider mein Graph nicht und ich weiß leider nicht wieso ) Ich habe mir den Code im Qt Creator angeschaut dort funktioniert es genau so und Ich habe gedacht das QVBarModelMapper das händelt wenn sich was an den Daten ändert ...
Ich hoffe Ihr könnt mir weiterhelfen.
Mit freundlichen Grüßen:
Marcel