编辑:这似乎只发生在微软Windows7Pro和微软Windows7Home中。这在ubuntu10.04中没有发生。在
下面是我遇到的问题的一些示例代码:
import wx as wx
class MainFrame(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
#Panel that holds all the other panels
self.mainPanel = wx.ScrolledWindow(self, -1)
self.mainPanel.SetScrollbars(1, 1, 1, 1)
self.mainPanel.SetBackgroundColour("LIGHT GREY")
#Panels in mainPanel
self.lefttopPanel = wx.Panel(self.mainPanel, -1)
self.lefttopPanel.SetBackgroundColour("WHITE")
self.sizewidgets(self.panelwidgets(
text='Left Top Panel',
num=12,
parent=self.lefttopPanel),
parent=self.lefttopPanel)
self.leftmiddlePanel = wx.Panel(self.mainPanel, -1)
self.leftmiddlePanel.SetBackgroundColour("WHITE")
self.sizewidgets(self.panelwidgets(
text='Left Middle Panel',
num=6,
parent=self.leftmiddlePanel),
parent=self.leftmiddlePanel)
self.leftbottomPanel = wx.Panel(self.mainPanel, -1)
self.leftbottomPanel.SetBackgroundColour("WHITE")
self.sizewidgets(self.panelwidgets(
text='Left Bottom Panel',
num=8,
parent=self.leftbottomPanel),
parent=self.leftbottomPanel)
self.righttopPanel = wx.Panel(self.mainPanel, -1)
self.righttopPanel.SetBackgroundColour("WHITE")
self.sizewidgets(self.panelwidgets(
text='Right Top Panel',
num=8,
parent=self.righttopPanel),
parent=self.righttopPanel)
self.rightbottomPanel = wx.Panel(self.mainPanel, -1)
self.rightbottomPanel.SetBackgroundColour("WHITE")
self.sizewidgets(self.panelwidgets(
text='Right Bottom Panel',
num=8,
parent=self.rightbottomPanel),
parent=self.rightbottomPanel)
mpsizer = wx.GridBagSizer(vgap=4, hgap=4)
mpsizer.Add(self.lefttopPanel, pos=(0,0), span=(1,1), flag=wx.EXPAND)
mpsizer.Add(self.leftmiddlePanel, pos=(1,0), span=(1,1), flag=wx.EXPAND)
mpsizer.Add(self.leftbottomPanel, pos=(2,0), span=(1,2), flag=wx.EXPAND)
mpsizer.Add(self.righttopPanel, pos=(0,1), span=(2,2), flag=wx.EXPAND)
mpsizer.Add(self.rightbottomPanel, pos=(2,2), span=(1,1), flag=wx.EXPAND)
mpsizer.AddGrowableCol(1)
mpsizer.AddGrowableRow(1)
self.mainPanel.SetSizer(mpsizer)
#Adding a refresh to resize event
self.Bind(wx.EVT_SIZE, self.OnResize)
self.Show()
def OnResize(self, event):
self.Refresh()
event.Skip()
def sizewidgets(self, widgetlist , parent):
psizer = wx.GridSizer(cols=2, vgap=5,hgap=5)
for widget in widgetlist:
psizer.Add(widget)
parent.SetSizer(psizer)
def panelwidgets(self, text, num, parent):
widgets = []
for i in range(num):
widgets += [wx.StaticText(parent, label=text)]
return widgets
if __name__ == "__main__":
app = wx.App()
MainFrame(None, size=(800, 800), title="GridBagSizer Problem")
app.MainLoop()
如果不刷新EVT_SIZE,则会导致某些小部件绘制错误。下面是它的一个示例(http://i.stack.imgur.com/tYEF4.png)。在
如果对EVT_SIZE添加刷新,它将修复大多数大小问题,除非在MS Windows中将帧捕捉到屏幕的一半。下面是一个看起来像(http://i.stack.imgur.com/UKTPi.png)的示例。在
我不明白为什么它总是画不正确的右下面板。它看起来像是从面板的底部而不是顶部绘制的。如果你重新调整框架的大小,它会正确地重新绘制它,并给你预期的行为。在
看起来growtablecolumn导致了这个问题,但我似乎无法修复它并保持我想要的行为。我试过打电话self.bottomrightPanel.Layout()调整大小,但这似乎没有任何作用。我也试过打电话self.bottomrightPanel.Fit()on resize,它修复了当你将框架捕捉到屏幕的一半时出现的问题,但它会破坏主面板的外观(这会导致它看起来非常糟糕)。如果有人知道如何解决这个问题(不改变我在当前应用程序中已经做过的尺寸调整器类型),我将非常感激。在
我现在也有类似的问题。我把范围缩小到wx.滚动窗口. 如果你能把它改成wx.面板它可能会解决问题。我还在考虑修复滚动窗口的问题。在
相关问题 更多 >
编程相关推荐