在wxpython中显示图像,并每次使用线程和更新

时间:2019-02-06 08:38:04

标签: multithreading image wxpython

我想使用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()

0 个答案:

没有答案