wxPython:滚动条干扰格式化

wxPython:滚动条干扰格式化,wxpython,scrollbar,scrolledwindow,Wxpython,Scrollbar,Scrolledwindow,下面的代码旨在演示我在wxPython中遇到的一个问题。 当我用wx.scrolled窗口替换wx.Panel然后运行程序时 打开的窗户尽可能小。一旦框架被安装好 手动调整大小的程序可以正常工作,但显然我更喜欢打开窗口 尺寸合理-我使用面板的子类,而不是滚动窗口。我已经 尝试了所有明显的东西,如SetBestSize,SetInitialSize,但都没有用 import wx class MyApp(wx.App): def OnInit(self): self.f

下面的代码旨在演示我在wxPython中遇到的一个问题。 当我用
wx.scrolled窗口
替换
wx.Panel
然后运行程序时 打开的窗户尽可能小。一旦框架被安装好 手动调整大小的程序可以正常工作,但显然我更喜欢打开窗口 尺寸合理-我使用
面板
的子类,而不是
滚动窗口
。我已经 尝试了所有明显的东西,如
SetBestSize
SetInitialSize
,但都没有用

import wx


class MyApp(wx.App):
    def OnInit(self):
        self.frame = Example(None, title="Top frame")
        self.frame.SetInitialSize()
        self.SetTopWindow(self.frame)
        self.frame.Show()

        return True


class Example(wx.Frame):

    def __init__(self, parent, title, ): 
        super(Example, self).__init__(parent, title=title,size=(300, 350))

        self.panelOne = MyPanel(self)

        self.frameSizer = wx.BoxSizer(wx.VERTICAL)
        self.frameSizer.Add(self.panelOne, 1, wx.EXPAND)

        self.SetSizer(self.frameSizer)
        self.frameSizer.Fit(self)

        self.Centre() 
        self.Show()


class MyPanel(wx.ScrolledWindow):

    def __init__(self, parent):
        super(MyPanel, self).__init__(parent)


        self.mainSizer = wx.BoxSizer(wx.VERTICAL)

        self.SetScrollbars(1,1,400,200)
        self.entryGrid = wx.FlexGridSizer(cols = 8, rows = 10)

        for i in range(80):
            x = wx.StaticText(self, id=-1, label=str(i), size=(-1,-1), pos=(-1,-1), style=0, name="")
            self.entryGrid.Add(x, 1, wx.ALL, 20)
        ### widgets here


        self.mainSizer.Add(self.entryGrid)
        # set optimum layout for mainsizer...
        self.SetSizer(self.mainSizer)
        # ...then fit main sizer to the panel.
        self.mainSizer.Fit(self)


if __name__ == '__main__':

    app = MyApp(False)
    app.MainLoop()

尝试以下代码,看看它是否符合您的要求:

安德里亚

import wx


class MyApp(wx.App):

    def OnInit(self):

        self.frame = Example(None, title="Top frame")
        self.frame.SetInitialSize()
        self.SetTopWindow(self.frame)
        self.frame.Show()

        return True


class Example(wx.Frame):

    def __init__(self, parent, title, size=(300, 350)): 

        super(Example, self).__init__(parent, title=title)

        self.panelOne = MyPanel(self, size)

        self.frameSizer = wx.BoxSizer(wx.VERTICAL)
        self.frameSizer.Add(self.panelOne, 1, wx.EXPAND)

        self.SetSizer(self.frameSizer)
        self.frameSizer.Layout()

        self.Centre() 
        self.Show()


class MyPanel(wx.ScrolledWindow):

    def __init__(self, parent, size):

        super(MyPanel, self).__init__(parent)

        self.mainSizer = wx.BoxSizer(wx.VERTICAL)

        self.SetScrollbars(1, 1, 400, 200)

        self.entryGrid = wx.FlexGridSizer(cols=8, rows=10)

        for i in range(80):
            x = wx.StaticText(self, label=str(i))
            self.entryGrid.Add(x, 1, wx.ALL, 20)

        self.mainSizer.Add(self.entryGrid)
        # set optimum layout for mainsizer...
        self.SetSizer(self.mainSizer)

        self.SetSizeHints(*size)


if __name__ == '__main__':

    app = MyApp(False)
    app.MainLoop()