kullanarak wxBitmaps sorunlarını görüntüleme Yazdığım bir programla ilgili bazı sorunlar yaşıyorum ve bazı yardım veya girişleri takdir ediyorum. Bazı arka plan için, bir web kamerası istemci yapmak için Python 2.7 ve wxPython kullanıyorum. İstemci görüntüleri sunucudan kendi iş parçacığına alır ve onları bir Kuyruğa yerleştirir. GUI iş parçacığı daha sonra bu görüntüleri sıradan alır ve bunları wxBitmap
nesnesine dönüştürür. Bu her 5 saniyede olur ve sadece harika çalışır. wxBitmap
nesnesini bir dosya olarak kaydedebilmem için her şeyin düzgün çalıştığını biliyorum.wxPython
Yapmakta olduğum sorun, GUI'mde görünmesi için wxBitmap
nesnesinin gerçekten alınıyor olmasıdır. GUI'yi yapabildiğim tek şey, web kamerası görüntüsünün olması gereken gri bir dikdörtgen göstermektir.
İşte ekranını yenilemek istediğinizde denir benim onPaint()
geçerli:
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)
Basitçe söylemek gerekirse, ben niye onun çalışmıyor için bir kayıp değilim. araştırmalarımdan bir pencere makinesindeyim çünkü BeginDrawing()
ve EndDrawing()
işlevlerine ihtiyacım olduğunu buldum, bu yüzden onları ekledim. Hala çalışmıyor. Atılma hatası veya istisna yoktur. Ben wxFrame
nesneyi güncelliyorum
- : Bu sorunu çözmeye yardımcı olabilir
diğer sorular. Belki
wxPaintDC
çalışmak için başka bir kapsayıcıda çalışması gerekiyor? - ?
Aslında, belki de benim __init__
işlevim, sorunu elinde tutan şeydir. Bunu düzgün bir şekilde mi ayarlıyorum?
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()
Neyse, yardımlarınız için şimdiden teşekkürler.
DÜZENLEME: self.pnl = wx.Panel(self)
numaralı satırı silerek sorunu yanlışlıkla çözdüm.
Görünüşe göre düzgün bir şekilde görüntüleniyordu, ancak bitmap panelin altındaydı. Olabilir? Gerçekten emin değilim. Bu wxPython olayında yeniyim.
Panelin altında görünen görüntü bir olasılıktır. Açıkça bir "wx.Sizer" kullanım konumunu ayarlamadığınız sürece, nesneler varsayılan olarak (0,0) olarak ayarlanır. Bu yüzden sadece 1 öğem olsa bile bir boyut kullanıyorum. – acattle