我有一种情况,我必须在面板中创建一个包含内容的面板,然后在创建面板后,我需要调整它的大小。 面板的大小取决于子内容,当您创建子内容时,您需要指定父面板;像鸡和鸡蛋的问题。 所以,我需要创建面板及其内容,然后根据内容调整面板的大小......
所以,我做了一个模拟代码示例,其中面板以50 x 50开始,并且在以该尺寸构建它之后,我希望它变为400 x 400。 但是,当你在计算机上运行它时,你只看到50 x 50. SetSize((400,400))没有效果!
如何修复此问题并使SetSize在应用sizer后生效? 任何帮助都是适用的......
import wx
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, id = -1, title = 'Hello, World!', size = (500, 500))
self.__myPanel = wx.Panel(self, size = (50, 50), style = wx.SIMPLE_BORDER)
def test(self):
self.__myPanel.SetSize((400, 400))
vertBoxSizer = wx.BoxSizer(wx.VERTICAL)
vertBoxSizer.AddSpacer((0, 10))
vertBoxSizer.Add(self.__myPanel, 0, wx.ALL, 0)
self.SetSizer(vertBoxSizer)
self.Layout()
if __name__ == '__main__':
app = wx.App()
frame = MainFrame()
frame.test()
frame.Show(True)
app.MainLoop()
print 'Exiting...'
答案 0 :(得分:0)
没有鸡肉和鸡蛋,因为窗户和大小不是父母/孩子相关的。 Sizer是一个非常好的工具(它们不是窗户!),用于调整窗户尺寸。
如果您的面板是框架中唯一的子面板,则不需要sizer:面板的大小将适合其父框架的客户区域。
如果你想要设置sizer的窗口在sizer需要的时候改变它的大小(可能是由于yo确实在大小由该sizer管理的面板中使用了SetSize()),只需调用Fit( ),test {)函数中的self.Fit()
。
答案 1 :(得分:0)
MainFrame(wx.Frame)类:
def __init__(self):
wx.Frame.__init__(self, None, id = -1, title = 'Hello, World!', size = (500, 500))
self.__myPanel = wx.Panel(self, size = (50, 50), style = wx.SIMPLE_BORDER)
def test(self):
self.__myPanel.SetSize((400, 400))
vertBoxSizer = wx.BoxSizer(wx.VERTICAL)
vertBoxSizer.AddSpacer((0, 10))
vertBoxSizer.Add(self.__myPanel, 0, wx.ALL, 0)
self.SetSizer(vertBoxSizer)
self.Layout()
self.Fit()