gpt4 book ai didi

python - 使用 wxPython 显示 wxBitmaps 的问题

转载 作者:太空狗 更新时间:2023-10-30 01:29:55 27 4
gpt4 key购买 nike

我在编写一个程序时遇到了一些问题,希望得到一些帮助或输入。对于某些背景,我使用 Python 2.7 和 wxPython 来制作流式网络摄像头客户端。客户端在自己的线程中从服务器获取图像,并将它们放入队列中。然后 GUI 线程从队列中获取这些图像并将它们转换为 wxBitmap 对象。这种情况每 0.5 秒发生一次并且效果很好。我能够将 wxBitmap 对象保存为一个文件,所以我知道一切正常。

我遇到的问题实际上是让 wxBitmap 对象显示在我的 GUI 上。我似乎能够让 GUI 做的唯一一件事就是在网络摄像头图像应该显示的位置显示一个灰色矩形。

这是我想要刷新屏幕时调用的 onPaint():

    def onPaint(self,e):
## this is the function that actually draws and redraws the window
## to be displayed. I think it is something similar to blit()
## in other graphical display frameworks
print "in onPaint"

## create the device context object (graphics painter)
dc = wx.PaintDC(self)
dc.BeginDrawing()

## draw the bitmap to the screen
dc.DrawBitmap(self.imageBit,0,0,True)
dc.EndDrawing()

## test code.
## the following works and updates, which means that
## everything is being converted properly and updated.
## not sure why the dc won't paint it to the window.
self.imageBit.SaveFile("bit.bmp", wx.BITMAP_TYPE_BMP)

简而言之,我不知道为什么它不起作用。根据我的研究,我发现因为我在 Windows 机器上,所以我需要 BeginDrawing()EndDrawing() 函数,所以我添加了它们。还是不行。没有错误或异常被抛出。

可能有助于解决此问题的其他问题:

  • 我正在更新一个wxFrame 对象。也许 wxPaintDC 需要在另一种类型的容器中运行才能工作?
  • >?

实际上,也许我的 __init__ 函数是问题所在。我设置正确吗?

class viewWindow(wx.Frame):
imgSizer = (480,360)
def __init__(self, *args, **kw):
## this is called when an instance of this class is created
super(viewWindow,self).__init__(*args,**kw)

## here is where the actual stuff inside the frame is set up.

self.pnl = wx.Panel(self)

## create a button that opens up a Connection Window
#test = wx.Button(self.pnl, label='Connection Settings')
## test.Bind(wx.EVT_BUTTON, self.openConnectionWindow)

## create the wxImage for the web cam pic
self.image = wx.EmptyImage(self.imgSizer[0],self.imgSizer[1])

## create the wxBitmap so that the wxImage can be displayed
self.imageBit = wx.BitmapFromImage(self.image)

## create a timer that will update the window based of frame rate
self.timex = wx.Timer(self, wx.ID_OK)
self.timex.Start(500)
self.Bind(wx.EVT_TIMER, self.redraw, self.timex)

## need to do the following in order to display images in wxPython:
self.Bind(wx.EVT_PAINT, self.onPaint)

self.SetSize(self.imgSizer)
self.SetTitle('View Window')
self.Show()

无论如何,在此先感谢您的帮助。

编辑:我通过删除行 self.pnl = wx.Panel(self) 意外地解决了这个问题。

显然它渲染正确,但位图位于面板下方。或许?我不太确定。我是整个 wxPython 的新手。

最佳答案

这似乎也是 wxPython 演示正在做的事情:dc.DrawBitmap。它适用于 Windows!至少,这就是他们在 AlphaDrawing 演示中所做的。在 DrawImage 演示中,他们使用 dc.Blit()。你可以试试看。

但是,我想知道你是否不能像我用我的 photo viewer 那样做.我不使用 DC 来绘制,而是只使用我更新的 wx.StaticBitmap。

关于python - 使用 wxPython 显示 wxBitmaps 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12135211/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com