我需要创建一个或门使用4个图像(3线和门符号)。这需要在wxGridBagSizer中重叠放置在单元格中的图像。我怎么才能做到呢?在
我尝试使用wxFormBuilder设置负vgap和hgap来重叠图像,但是wxFormBuilder不接受负值。在
然后我尝试编写原始代码来实现同样的效果:
self.widgetSizer = wx.GridBagSizer(hgap=-6,vgap=-20)
self.orGateImage = wx.StaticBitmap(self, -1, self.orGateImageBitmap, style=wx.BITMAP_TYPE_PNG)
self.LineImageOffA = wx.StaticBitmap(self, -1, self.LineImageOffBitmap, style=wx.BITMAP_TYPE_PNG)
self.LineImageOffB = wx.StaticBitmap(self, -1, self.LineImageOffBitmap, style=wx.BITMAP_TYPE_PNG)
self.LineImageOffX = wx.StaticBitmap(self, -1, self.LineImageOffBitmap, style=wx.BITMAP_TYPE_PNG)
self.LetterAImage = wx.StaticBitmap(self, -1, self.LetterAImageBitmap, style=wx.BITMAP_TYPE_PNG)
self.LetterBImage = wx.StaticBitmap(self, -1, self.LetterBImageBitmap, style=wx.BITMAP_TYPE_PNG)
self.LetterXImage = wx.StaticBitmap(self, -1, self.LetterXImageBitmap, style=wx.BITMAP_TYPE_PNG)
self.widgetSizer.Add(self.LineImageOffA, pos=(0,1), border=10)
self.widgetSizer.Add(self.LineImageOffB, pos=(2,1), border=2)
self.widgetSizer.Add(self.LineImageOffX, pos=(1,3), flag=wx.ALIGN_CENTER,border=2)
self.widgetSizer.Add(self.orGateImage, pos=(1,2), border=10)
self.widgetSizer.Add(self.LetterAImage, pos=(0,0), border=10)
self.widgetSizer.Add(self.LetterBImage, pos=(2,0), border=10)
self.widgetSizer.Add(self.LetterXImage, pos=(1,4), flag=wx.ALIGN_CENTER, border=10)
self.frame.fSizer.Layout()
而且成功了。我可以得到以下输出:
请帮助我使用wxFormBuilder实现这一点,因为我需要在我的项目中快速创建这样的元素。有没有其他的办法来完成这个任务?在
wxFormBuilder生成的代码如下:
^{pr2}$
wxWidgets不支持重叠的同级小部件(在本例中是您的
wx.StaticBitmaps
),并且尝试这样做时发生的行为是未定义的。此外,尺寸调整器的设计并不是为了能够重叠物品,这违背了IMO的基本目的但是,您可以轻松绘制位图,而无需为每个位图使用小部件,并根据需要让它们重叠。为此,可以在基于
wx.Window
或wx.Panel
的类中处理EVT_PAINT
方法,并在该绘制处理程序中绘制位图,然后将该窗口的实例放入框架中。在演示和各种教程中,有许多绘画处理程序中的绘图示例。在相关问题 更多 >
编程相关推荐