zusammengesetzter Pfeil...
Verfasst: Montag 21. April 2008, 23:40
Hi, mein erster Beitrag und erstmal Hallo an alle / Hello World,
ich versuche gerade einen Pfeil aus meheren einzelnen (wx.Pen) Strichen zu erzeugen.
Die einzelnen Striche sollen später von einem Übergabewert abhängig sein (momentan noch hart gecoded).
Falls es jemanden was sagt, es geht in die Richtung Sankey-Diagramm.
Die einzelnen Pfeile habe ich schon zusammengesetzt gekriegt, nun stellt sich die Frage, wie erstelle ich daraus einen Pfeil?
momentan sieht es so aus:

und mein Ziel wäre das hier (oder so ähnlich):

Mein Code:
(ich bin neu bei Python und relativ unerfahren, ich bitte um Nachsicht
)
Die Kommentare waren i.d.R. Notizen für mich...

Ich wäre über jegliche Hilfe dankbar
Bisher hatte ich gedacht, entweder die Endwerte abzufangen und 2 Dreiecke mit Hintergrundfarben oder Alphawerten zu zeichnen, oder irgendwas zu nutzen, was mir aus dem einen Pfeil macht (Shape o.ä.?)
Würde mich absolut freuen wenn ihr mir weiterhelfen könntet
ich versuche gerade einen Pfeil aus meheren einzelnen (wx.Pen) Strichen zu erzeugen.
Die einzelnen Striche sollen später von einem Übergabewert abhängig sein (momentan noch hart gecoded).
Falls es jemanden was sagt, es geht in die Richtung Sankey-Diagramm.
Die einzelnen Pfeile habe ich schon zusammengesetzt gekriegt, nun stellt sich die Frage, wie erstelle ich daraus einen Pfeil?
momentan sieht es so aus:

und mein Ziel wäre das hier (oder so ähnlich):

Mein Code:
(ich bin neu bei Python und relativ unerfahren, ich bitte um Nachsicht

Die Kommentare waren i.d.R. Notizen für mich...

Code: Alles auswählen
#!/usr/bin/pythonw
import wx
class DrawPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent, -1)
wx.EVT_PAINT(self, self.Strich)
def OnPaint(self, list, St_x, St_y, En_x, En_y):
dc = wx.PaintDC(self)
#dc.Clear()
dc.SetPen(wx.Pen(list[0], list[1])) #Farbe, Breite
dc.DrawLine(St_x, St_y, En_x, En_y) # x1,y1 ,x2, y2
def Strich(self, event="none"):
#Die Variablen mit Uebergabewerten loesen ;)
Objects = [("nothing", 25, 'grey'), ("Apfel", 18, 'green'), ("Birne", 12, 'Blue'), ("Banane", 8, 'yellow')]
St_x= 0
St_y= 20
En_x=200
En_y= 20
for _ in Objects:
#Die Luecke zwischen den Strichen kommt daher, weil wx.pen um die Koords "herum" zeichnet --> die y Werte stimmen nicht mehr --> Luecke
list=[]
list.insert(len(list),_[2])# Farbe Bsp.: list('RED', 5)
list.insert(len(list),_[1])# Menge
# um das drumherumzeichnen auszugleichen, nochmal die Haelfte dazu addieren
St_y1 = St_y + list[1]/2
En_y1 = En_y + list[1]/2
self.OnPaint(list, St_x, St_y1, En_x, En_y1)
St_y = St_y + list[1]
En_y = En_y + list[1]
print 'St_y: (in Haupt Fkt.)', St_y, 'fuer ', list
#print 'Strich: ok'
if __name__ == "__main__":
app = wx.PySimpleApp(0)
frame = wx.Frame(None, -1, "TestSankey",
size=(200, 100))
DrawPanel(frame)
frame.Show(True)
app.MainLoop()
Ich wäre über jegliche Hilfe dankbar

Bisher hatte ich gedacht, entweder die Endwerte abzufangen und 2 Dreiecke mit Hintergrundfarben oder Alphawerten zu zeichnen, oder irgendwas zu nutzen, was mir aus dem einen Pfeil macht (Shape o.ä.?)
Würde mich absolut freuen wenn ihr mir weiterhelfen könntet
