我想使用wxpython在框架上显示图像。但是我可以在同一帧上显示多个图像。在我的系统中,图像更新非常重要,我需要每0.2秒显示一次。但是在系统中,输入图像时间不是固定的。使用序列流是可能的,但我需要减少每个图像的等待时间。我发现使用线程可能是解决方案之一。但是,在wxpython中使用线程bmp有一个小问题。
这是我的代码。 在映像文件中,在系统中,新映像将每0.2秒更新一次。但是在相同情况下,进入时间将改变。所以我想减少python中的更新时间,并且想在代码中的image_reading函数中使用线程
import time
import wx
import cStringIO
import threading
########################################################################
class MyPanel(wx.Panel):
""""""
#----------------------------------------------------------------------
def __init__(self, parent):
"""Constructor"""
wx.Panel.__init__(self, parent)
# pick an image file you have in the working folder
# you can load .jpg .png .bmp or .gif files
background_image = 'new2.png'
bmp_background = wx.Image(background_image, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
# image's upper left corner anchors at panel coordinates (0, 0)
self.bitmap1 = wx.StaticBitmap(self, -1, bmp_background, (0, 0))
# show some image details
str1 = "%s %dx%d" % (background_image, bmp_background.GetWidth(), bmp_background.GetHeight())
parent.SetTitle('consumer application')
self.font = wx.Font(25, wx.DEFAULT, wx.NORMAL, wx.NORMAL)
self.flashingText = wx.StaticText(self, label = 'time of pi1', pos = (380, 280))
self.flashingText2 = wx.StaticText(self, label = 'time of pi2', pos = (600, 280))
self.flashingText.SetForegroundColour('red')
self.flashingText2.SetForegroundColour('red')
self.timer = wx.Timer(self)
self.Bind(wx.EVT_TIMER, self.update, self.timer)
self.timer.Start(400)
def update(self, event):
def image_reading(x, y):
imageFile = 'image.png'
data = open(imageFile, "rb").read()
stream = cStringIO.StringIO(data)
bmp = wx.BitmapFromImage( wx.ImageFromStream( stream ))
wx.StaticBitmap(self, -1, bmp, (x, y))
image_reading(100, 100)
image_reading(100, 400)
class MyFrame(wx.Frame):
""""""
def __init__(self):
"""Constructor"""
wx.Frame.__init__(self, None, title="An image on a panel", size = (1600, 900))
panel = MyPanel(self)
self.Show()
if __name__ == "__main__":
app = wx.App(False)
frame = MyFrame()
app.MainLoop()