gpt4 book ai didi

python - 在 wxPython 中调整面板大小时出现图形问题

转载 作者:太空宇宙 更新时间:2023-11-03 18:26:38 26 4
gpt4 key购买 nike

我正在 Windows 8 操作系统上使用 python v2.7 和 wxPython v3.0。(抱歉标题令人困惑。我不知道标题应该是什么。我会尽力详细解释我的问题。)

在我的应用程序中,我有一个带有背景图像的滚动面板。该面板在代码片段中被命名为 mainPanel。此 mainPanel 包含名为 myPanelAmyPanelB 的其他面板,它们具有透明背景。这些面板 myPanelAmyPanelB 包含包含一些按钮的尺寸调整器。 PS:这只是我现实世界应用程序的一个示例。在我的现实世界应用程序中,我有许多不同的面板和按钮。在这种情况下,补丁会更大、更烦人。 :(

问题:当我水平调整窗口大小时,有时(在我的现实世界应用程序中,与此示例应用程序相比,这种情况非常频繁。) 我看到空白补丁在我的应用程序窗口中,如下面的示例图片所示。我怎样才能避免这种情况? 如果有人可以对此进行测试并报告他们的计算机上是否有相同的问题,那就太好了(只是为了确定这不是 Windows 操作系统问题。我也在 Windows 7 上进行了测试,它也有同样的问题。)

更新:只需调整窗口大小并垂直滚动,您就会经常看到补丁。

示例图像:补丁由箭头指向。 example1 example2 example3

代码:这是我用于测试的代码示例。背景图像可以从这里下载。 greensquares.jpg

import wx
import wx.lib.scrolledpanel

class gui(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, None, id, title, style=wx.DEFAULT_FRAME_STYLE)
mainPanel = wx.lib.scrolledpanel.ScrolledPanel(self, -1)
mainPanel.SetupScrolling()
myImage = wx.Image('greensquares.jpg', wx.BITMAP_TYPE_ANY).ConvertToBitmap()
myBitmap = wx.StaticBitmap(mainPanel, -1, myImage, (0, 0))
myPanelA = wx.Panel(myBitmap, -1, style=wx.TRANSPARENT_WINDOW, pos=(100,0), size=(150,150))
wx.StaticText(myPanelA, -1, ' MyPanelA ')
myButton1A = wx.Button(myPanelA, -1, size=(20,20))
myButton2A = wx.Button(myPanelA, -1, size=(20,20))
mySizerA = wx.BoxSizer(wx.HORIZONTAL)
mySizerA.Add(myButton1A, 0, wx.ALL, 20)
mySizerA.Add(myButton2A, 0, wx.ALL, 20)
myPanelA.SetSizer(mySizerA)
myPanelA.Layout()

myPanelB = wx.Panel(myBitmap, -1, style=wx.TRANSPARENT_WINDOW, pos=(100,130), size=(250,200))
wx.StaticText(myPanelB, -1, ' MyPanelB ')
myButton1B = wx.Button(myPanelB, -1, size=(20,20))
myButton2B = wx.Button(myPanelB, -1, size=(20,20))
myButton3B = wx.Button(myPanelB, -1, size=(20,20))
myButton4B = wx.Button(myPanelB, -1, size=(20,20))
mySizerB1 = wx.BoxSizer(wx.HORIZONTAL)
mySizerB1.Add(myButton1B, 0, wx.ALL, 20)
mySizerB1.Add(myButton2B, 0, wx.ALL, 20)
mySizerB1.Add(myButton3B, 0, wx.ALL, 20)
mySizerB1.Add(myButton4B, 0, wx.ALL, 20)
myButton5B = wx.Button(myPanelB, -1, size=(20,20))
myButton6B = wx.Button(myPanelB, -1, size=(20,20))
myButton7B = wx.Button(myPanelB, -1, size=(20,20))
myButton8B = wx.Button(myPanelB, -1, size=(20,20))
mySizerB2 = wx.BoxSizer(wx.HORIZONTAL)
mySizerB2.Add(myButton5B, 0, wx.ALL, 20)
mySizerB2.Add(myButton6B, 0, wx.ALL, 20)
mySizerB2.Add(myButton7B, 0, wx.ALL, 20)
mySizerB2.Add(myButton8B, 0, wx.ALL, 20)
mySizerC = wx.BoxSizer(wx.VERTICAL)
mySizerC.Add(mySizerB1)
mySizerC.Add(mySizerB2)
myPanelB.SetSizer(mySizerC)
myPanelB.Layout()

if __name__ == '__main__':
app = wx.App()
frame = gui(parent=None, id=-1, title="My-App")
frame.Show()
app.MainLoop()

感谢您的宝贵时间。

最佳答案

我向您的面板添加了更新方法,这似乎解决了我这边的问题。

import wx
import wx.lib.scrolledpanel

class gui(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, None, id, title, style=wx.DEFAULT_FRAME_STYLE)
mainPanel = wx.lib.scrolledpanel.ScrolledPanel(self, -1)
mainPanel.SetupScrolling()
myImage = wx.Image('greensquares.jpg', wx.BITMAP_TYPE_ANY).ConvertToBitmap()
myBitmap = wx.StaticBitmap(mainPanel, -1, myImage, (0, 0))
self.myPanelA = wx.Panel(myBitmap, -1, style=wx.TRANSPARENT_WINDOW, pos=(100,0), size=(150,150))
wx.StaticText(self.myPanelA, -1, ' self.myPanelA ')
myButton1A = wx.Button(self.myPanelA, -1, size=(20,20))
myButton2A = wx.Button(self.myPanelA, -1, size=(20,20))
mySizerA = wx.BoxSizer(wx.HORIZONTAL)
mySizerA.Add(myButton1A, 0, wx.ALL, 20)
mySizerA.Add(myButton2A, 0, wx.ALL, 20)
self.myPanelA.SetSizer(mySizerA)
self.myPanelA.Layout()

self.myPanelB = wx.Panel(myBitmap, -1, style=wx.TRANSPARENT_WINDOW, pos=(100,130), size=(250,200))
wx.StaticText(self.myPanelB, -1, ' self.myPanelB ')
myButton1B = wx.Button(self.myPanelB, -1, size=(20,20))
myButton2B = wx.Button(self.myPanelB, -1, size=(20,20))
myButton3B = wx.Button(self.myPanelB, -1, size=(20,20))
myButton4B = wx.Button(self.myPanelB, -1, size=(20,20))
mySizerB1 = wx.BoxSizer(wx.HORIZONTAL)
mySizerB1.Add(myButton1B, 0, wx.ALL, 20)
mySizerB1.Add(myButton2B, 0, wx.ALL, 20)
mySizerB1.Add(myButton3B, 0, wx.ALL, 20)
mySizerB1.Add(myButton4B, 0, wx.ALL, 20)
myButton5B = wx.Button(self.myPanelB, -1, size=(20,20))
myButton6B = wx.Button(self.myPanelB, -1, size=(20,20))
myButton7B = wx.Button(self.myPanelB, -1, size=(20,20))
myButton8B = wx.Button(self.myPanelB, -1, size=(20,20))
mySizerB2 = wx.BoxSizer(wx.HORIZONTAL)
mySizerB2.Add(myButton5B, 0, wx.ALL, 20)
mySizerB2.Add(myButton6B, 0, wx.ALL, 20)
mySizerB2.Add(myButton7B, 0, wx.ALL, 20)
mySizerB2.Add(myButton8B, 0, wx.ALL, 20)
mySizerC = wx.BoxSizer(wx.VERTICAL)
mySizerC.Add(mySizerB1)
mySizerC.Add(mySizerB2)
self.myPanelB.SetSizer(mySizerC)
self.myPanelB.Layout()

self.Bind(wx.EVT_SIZE, self.OnResize)

def OnResize(self, e):
self.myPanelA.Update()
self.myPanelB.Update()
e.Skip()

if __name__ == '__main__':
app = wx.App()
frame = gui(parent=None, id=-1, title="My-App")
frame.Show()
app.MainLoop()

关于python - 在 wxPython 中调整面板大小时出现图形问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23068019/

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