ich sollte im Praktikum die unten stehende Aufgabe lösen.
Ich habe eigentlich alles soweit gemacht aber an einer stelle gibt er mir fehler aus könnte jemand mir einen tip geben.
Aufgabe:
Erstellen Sie eine Anwendung zur Visualisierung von Produkteigenschaften mit Hilfe eines sog. "Star Plot". Eine Erklärung zu
dieser Darstellungsweise finden Sie z.B. bei wikipedia (http://en.wikipedia.org/wiki/Star_plot).
Berücksichtigen Sie folgende Anforderungen:
- Es sollen 5 Eigenschaften dargestellt werden, zu jeder Eigenschaft soll es 4 Bewertungsstufen geben
- Die Bezeichnungen der Eigenschaften sollen an den Achsen ausgewiesen werden
- Je Eigenschaft soll eine Farbe verwendet werden (für Beschriftung und Achsen)
- Die Bewertungsstufen müssen durch Markierungen erkennbar sein
- In einer Datei "starplot.dat" sollen die verschiedenen darzustellenden Fälle in einer geeigneten Datenstruktur
abgelegt werden; es muss in der Anwendung möglich sein, den Fall auszuwählen und darstellen zu lassen
- Die Auswahl des Falls soll durch einen Menüeintrag und einen Schalter oder eine Combobox im Toolbar ermöglicht
werden
Als Anwendungsbeispiel können Sie die Bewertung von Kraftfahrzeugen verwenden mit den Eigenschaften
"CO2-Emmission", "Durchschnittsverbrauch", "Preis", "Motorleistung", "Drehmoment" mit entsprechenden
Bewertungsstufen.
und hier das Code
Code: Alles auswählen
import wx
import math
import csv
class Starplot(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, wx.ID_ANY, title, size=(900, 700))
self.SetBackgroundColour('grey')
self.content = []
self.choice = []
self.vector = [0,0,0,0,0]
self.bezeichnung = ["NULL","NULL","NULL","NULL","NULL"]
self.ueberschrift = "NULL"
self.colour = ["blue","green","white","brown","red"]
wx.FutureCall(10, self.DrawControls)
def GetChoices(self):
for i in range(len(self.content)):
[b]self.choice.append(str(self.content[i]["Bezeichnung"]))[/b] Hier gibt er mir fehler aus
def DrawControls(self):
tb = self.CreateToolBar()
self.LoadCSV()
self.GetChoices()
cbID = wx.NewId()
tb.AddControl(wx.ComboBox(tb, cbID, "", size=(250,-1), choices=self.choice, style=wx.CB_DROPDOWN))
self.Bind(wx.EVT_COMBOBOX, self.OnClickCombo, id = cbID)
tb.Realize()
self.DrawGraph()
def OnClickCombo(self, event):
#print event.GetString()
self.ueberschrift = event.GetString()
for i in range(len(self.content)):
if self.content[i]["Bezeichnung"] == event.GetString():
self.vector[0] = int(self.content[i]["Bewertungsstufe 1"])
self.bezeichnung[0] = self.content[i]["Eigenschaft 1"]
self.vector[1] = int(self.content[i]["Bewertungsstufe 2"])
self.bezeichnung[1] = self.content[i]["Eigenschaft 2"]
self.vector[2] = int(self.content[i]["Bewertungsstufe 3"])
self.bezeichnung[2] = self.content[i]["Eigenschaft 3"]
self.vector[3] = int(self.content[i]["Bewertungsstufe 4"])
self.bezeichnung[3] = self.content[i]["Eigenschaft 4"]
self.vector[4] = int(self.content[i]["Bewertungsstufe 5"])
self.bezeichnung[4] = self.content[i]["Eigenschaft 5"]
self.dc.Clear()
self.DrawGraph()
def DrawGraph(self):
center = 600/2
baseAngle = 72.0
baseOffset = 60.0
self.dc = wx.ClientDC(self)
self.dc.Clear()
for i in range(5):
self.dc.SetPen(wx.Pen(self.colour[i], 3))
self.dc.SetTextForeground(self.colour[i])
self.Rotate(baseAngle*i, 0.0, 280.0) #Rotate(angle,rotationCentre, offestAfterRotation=None)
self.dc.DrawLine(center, center, self.xneu+center, self.yneu+center)
self.dc.DrawText(self.bezeichnung[i], self.xneu+center+20, self.yneu+center)
self.dc.SetPen(wx.Pen('black',5))
for i in range(5):
self.Rotate(baseAngle*i, 0.0, baseOffset)
self.dc.DrawPoint(self.xneu+center, self.yneu+center)
self.Rotate(baseAngle*i, 0.0, baseOffset*2)
self.dc.DrawPoint(self.xneu+center, self.yneu+center)
self.Rotate(baseAngle*i, 0.0, baseOffset*3)
self.dc.DrawPoint(self.xneu+center, self.yneu+center)
self.Rotate(baseAngle*i, 0.0, baseOffset*4)
self.dc.DrawPoint(self.xneu+center, self.yneu+center)
self.x1 = [0,0,0,0,0]
self.y1 = [0,0,0,0,0]
for i in range(5):
self.Rotate(baseAngle*i, 0.0, baseOffset*self.vector[i])
self.x1[i] = self.xneu
self.y1[i] = self.yneu
self.dc.SetPen(wx.Pen('yellow',3))
self.dc.DrawLine(self.x1[0]+center,self.y1[0]+center,self.x1[1]+center,self.y1[1]+center)
self.dc.DrawLine(self.x1[1]+center,self.y1[1]+center,self.x1[2]+center,self.y1[2]+center)
self.dc.DrawLine(self.x1[2]+center,self.y1[2]+center,self.x1[3]+center,self.y1[3]+center)
self.dc.DrawLine(self.x1[3]+center,self.y1[3]+center,self.x1[4]+center,self.y1[4]+center)
self.dc.DrawLine(self.x1[4]+center,self.y1[4]+center,self.x1[0]+center,self.y1[0]+center)
self.dc.SetTextForeground("black")
self.dc.DrawText(self.ueberschrift, center, 10)
def LoadCSV(self):
filename="starplot.dat"
reader = csv.DictReader(file(filename, "rb"))
for row in reader:
self.content.append(row)
def Rotate(self, angle, origin, length):
self.xneu = 0.0
self.yneu = 0.0
angle = math.radians(angle)
self.xneu = length*math.cos(origin)*math.cos(angle)-length*math.sin(origin)*math.sin(angle)
self.yneu = length*math.sin(origin)*math.cos(angle)+length*math.cos(origin)*math.sin(angle)
if __name__ == "__main__":
app = wx.App()
Starplot(None, 'Star Plot!').Show(True)
app.MainLoop()
"Bezeichnung","Eigenschaft 1","Bewertungsstufe 1","Eigenschaft 2","Bewertungsstufe 2","Eigenschaft 3","Bewertungsstufe 3","Eigenschaft 4","Bewertungsstufe 4","Eigenschaft 5","Bewertungsstufe 5"
"Smart","CO2-Emmission","1","Durchschnittsverbrauch","1","Preis","3","Motorleistung","1","Drehmoment","1"