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