如何使用wxPython中的wxFormBuilder在wxGridBagSizer中重叠wxStaticBitmap图像

2024-05-23 21:40:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要创建一个或门使用4个图像(3线和门符号)。这需要在wxGridBagSizer中重叠放置在单元格中的图像。我怎么才能做到呢?在

Attempt using wxFormBuilder

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

而且成功了。我可以得到以下输出:

Attempt using raw code

请帮助我使用wxFormBuilder实现这一点,因为我需要在我的项目中快速创建这样的元素。有没有其他的办法来完成这个任务?在

wxFormBuilder生成的代码如下:

^{pr2}$

Tags: pos图像selfaddpngstyletypewx
1条回答
网友
1楼 · 发布于 2024-05-23 21:40:25

wxWidgets不支持重叠的同级小部件(在本例中是您的wx.StaticBitmaps),并且尝试这样做时发生的行为是未定义的。此外,尺寸调整器的设计并不是为了能够重叠物品,这违背了IMO的基本目的

但是,您可以轻松绘制位图,而无需为每个位图使用小部件,并根据需要让它们重叠。为此,可以在基于wx.Windowwx.Panel的类中处理EVT_PAINT方法,并在该绘制处理程序中绘制位图,然后将该窗口的实例放入框架中。在演示和各种教程中,有许多绘画处理程序中的绘图示例。在

相关问题 更多 >