Wie kann ich 3 bilder in einen wx.Window blinken, d.h. sie nach einen Zeitinterwal auswaechseln und anzeigen.
Die bilder werden in drei statbmp geladen und die muessten dann eins nach dem anderen nagezeigt werden.
Ich habe es mit Show() versucht, es geht mit 2 Bilder, aber nicht mit drei.

Code: Alles auswählen
# -*- coding: cp1250 -*-
import wx
import wx.lib.scrolledpanel as scrolled
import wx.lib.buttons
global blinkn
blinkn='1'
class MyFrame(wx.Frame):
def __init__(self, parent = None, id = -1, title = "", size = wx.Size(1000, 750)):
wx.Frame.__init__(self, parent, id, title= '', pos = wx.Point(0, 0), size = size)
self.statusbar=self.CreateStatusBar()
self.sashWindow1 = wx.SashWindow(self, name='sashWindow1', pos=wx.Point(820, 24), size=wx.Size(152, 128), style=wx.CLIP_CHILDREN | wx.SW_3D)
self.scrolledWindow1 = wx.ScrolledWindow(self, name='scrolledWindow', pos=wx.Point(0, 24), size=wx.Size(780, 550), style=wx.HSCROLL | wx.VSCROLL)
self.scrolledWindow1.SetBackgroundColour(wx.Colour(0, 90, 159))
self.scrolledWindow1.SetScrollbars(1,1, 3000, 2000)
self.scrolledWindow1.SetScrollRate(40,40)
self.toggleButton2 = wx.ToggleButton(self, label='Show Image', name='toggleButton2', pos=wx.Point(800, 295), size=wx.Size(90, 23), style=0)
self.checkBox4 = wx.CheckBox(self, label='Start / Stop', name='checkBox4', pos=wx.Point(880, 202), size=wx.Size(75, 13), style=0)
statbmp = wx.StaticBitmap(self.scrolledWindow1)
self.statbmp = statbmp
statbmp2 = wx.StaticBitmap(self.scrolledWindow1)
self.statbmp2 = statbmp2
statbmp3 = wx.StaticBitmap(self.scrolledWindow1)
self.statbmp3 = statbmp3
self.toggleButton2.Bind(wx.EVT_TOGGLEBUTTON, self.update_bitmap)
self.statbmp.Bind(wx.EVT_MOTION, self.OnMotion)
self.Bind(wx.EVT_TIMER, self.blink)
self.timer = wx.Timer(self)
self.timer.Start(int((1/float(4))*1000))
def blink(self, event):
global blinkn
if self.checkBox4.GetValue() == True:
if blinkn=='1':
self.statbmp.Show(True)
self.statbmp2.Show(False)
self.statbmp3.Show(False)
blinkn='2'
if blinkn=='2':
self.statbmp.Show(False)
self.statbmp2.Show(True)
self.statbmp3.Show(False)
blinkn='3'
if blinkn=='3':
self.statbmp3.Show(True)
self.statbmp.Show(False)
self.statbmp2.Show(False)
blinkn='1'
## So funktioniert es mit 2 statbmps
## def blink(self, event):
## if (self.checkBox4.GetValue() == True):
## if self.statbmp.Show() == True:
## self.statbmp2.Show(False)
## self.statbmp.Show(True)
##
## else:
## self.statbmp.Show(False)
## self.statbmp2.Show(True)
def OnMotion(self, event):
pt = event.GetPositionTuple()
self.statusbar.SetStatusText(str(pt))
event.Skip()
def update_bitmap(self, event = None):
"""
Bild1 holen und anzeigen
"""
w, h = 3000, 2000 # hier sollte natürlich die korrekte Größe stehen
bmp = wx.EmptyBitmap(w, h)
dc = wx.MemoryDC(bmp)
hdc = dc.GetHDC()
tmpbmp = wx.Bitmap("spanish.jpg")
dc.DrawBitmap(tmpbmp, 0, 0)
# Bildaufbau blockieren
self.scrolledWindow1.Freeze()
# Bild zuweisen
self.statbmp.SetBitmap(bmp)
# ScrolledWindow einrichten
self.scrolledWindow1.FitInside()
self.scrolledWindow1.SetScrollbars(20, 20, w/20, h/20)
self.statbmp.Refresh()
# Bildaufbau wieder erlauben
self.scrolledWindow1.Thaw()
"""
Bild2 holen und anzeigen
"""
w, h = 3000, 2000 # hier sollte natürlich die korrekte Größe stehen
bmp2 = wx.EmptyBitmap(w, h)
dc2 = wx.MemoryDC(bmp2)
hdc2 = dc2.GetHDC()
tmpbmp2 = wx.Bitmap("Samsung.jpg")
dc2.DrawBitmap(tmpbmp2, 0, 0)
# Bildaufbau blockieren
self.scrolledWindow1.Freeze()
# Bild zuweisen
self.statbmp2.SetBitmap(bmp2)
# ScrolledWindow einrichten
self.scrolledWindow1.FitInside()
self.scrolledWindow1.SetScrollbars(20, 20, w/20, h/20)
self.statbmp2.Refresh()
# Bildaufbau wieder erlauben
self.scrolledWindow1.Thaw()
"""
Bild3 holen und anzeigen
"""
w, h = 3000, 2000 # hier sollte natürlich die korrekte Größe stehen
bmp3 = wx.EmptyBitmap(w, h)
dc3 = wx.MemoryDC(bmp3)
hdc3 = dc3.GetHDC()
tmpbmp3 = wx.Bitmap("mist.jpg")
dc3.DrawBitmap(tmpbmp3, 0, 0)
# Bildaufbau blockieren
self.scrolledWindow1.Freeze()
# Bild zuweisen
self.statbmp3.SetBitmap(bmp3)
# ScrolledWindow einrichten
self.scrolledWindow1.FitInside()
self.scrolledWindow1.SetScrollbars(20, 20, w/20, h/20)
self.statbmp3.Refresh()
# Bildaufbau wieder erlauben
self.scrolledWindow1.Thaw()
def main():
app = wx.PySimpleApp()
myframe = MyFrame()
#myframe.Center()
myframe.Show()
app.MainLoop()
if __name__ == "__main__":
main()
Danke!
Mit freundlichen Gruessen,
Aleksandar Cikota