ich bin relativ neu hier und auch was GUI Programmierung angeht aber ich bin bei meinem derzeitigen Projekt über etwas gestolpert wo ich nicht mehr weiter komme:
Ich bin dabei eine Echtzeitdarstellung eines Audiosignals (mittels pyaudio) zu implementieren. Was ich machen wollte funktioniert auch alles Prima.... jedoch leider nur unter OSX und Windows! Auf meiner Ubuntu Kiste funktioniert es zwar auch aber das Bild schaut total "pixlig" aus.
Hier ist was ich mache.... ich habe ein Frame von fixer Größe
Code: Alles auswählen
class RealTimeSonarFrame(wx.Frame):
def __init__(self, parent, id, title):
...
self.panel = SonarPanel(self,self.config)
self.timer = wx.Timer(self)
self.SetMinSize((900, 200))
self.SetMaxSize((900, 200))
self.timer.Start(50)
...
def on_timer(self, event):
self.panel.update_drawing()
Code: Alles auswählen
class SonarPanel(wx.Window):
def __init__(self, parent, config):
...
self.Bind(wx.EVT_PAINT, self.on_paint)
...
def update_drawing(self):
self.Refresh(False)
def on_paint(self, event):
dc = wx.AutoBufferedPaintDC(self)
dc.Clear()
width, height = self.GetClientSize()
self.mySonar.draw(dc)
Code: Alles auswählen
class Sonargram(object):
def __init__(self, size, config):
...
self.myIMG = wx.EmptyImage(self.size.x,self.size.y)
...
def draw(self,dc):
newImg = self.myIMG.GetSubImage(wx.Rect(self.oldFFTlen, 0, self.size.x-self.oldFFTlen, self.size.y))
self.myIMG.Paste(newImg,0,0)
for i in range(0,len(self.fftData)):
for j in range(0,self.size.y):
ampl = self.fftData[i][self.size.y-j]
invAmpl = 255-ampl
if invAmpl < 0 or invAmpl > 255:
self.myIMG.SetRGB(self.size.x-len(self.fftData)+i,j,0,0,0)
else:
if self.config.color == 'red':
print 'sdfs'
self.myIMG.SetRGB(self.size.x-len(self.fftData)+i,j,invAmpl,0,0)
elif self.config.color == 'green':
self.myIMG.SetRGB(self.size.x-len(self.fftData)+i,j,0,invAmpl,0)
elif self.config.color == 'blue':
self.myIMG.SetRGB(self.size.x-len(self.fftData)+i,j,0, 0, invAmpl)
elif self.config.color == 'gray':
self.myIMG.SetRGB(self.size.x-len(self.fftData)+i,j,invAmpl,invAmpl,invAmpl)
dc.DrawBitmap(wx.BitmapFromImage(self.myIMG),0,0)
self.oldFFTlen = len(self.fftData)
self.fftData = []
Code: Alles auswählen
dc.SetPen(wx.Pen(wx.Color(invAmpl,0,0),2))
dc.DrawPoint(self.size.x-len(self.fftData)+i,j)
Code: Alles auswählen
dc.DrawBitmap(wx.BitmapFromImage(self.myIMG),0,0)
Code: Alles auswählen
newImg = self.myIMG.GetSubImage(wx.Rect(self.oldFFTlen, 0, self.size.x-self.oldFFTlen, self.size.y))
self.myIMG.Paste(newImg,0,0)
Hat einer von euch eine Idee????? Ich komm einfach nicht weiter!
1000 Dank schon mal