以下代码旨在演示我在使用wxPython时遇到的问题。
当我用wx.Panel
替换wx.ScrolledWindow
然后运行程序时
打开的窗口大约尽可能小。框架一旦完成
手动调整大小的程序工作正常,但显然我更喜欢打开窗口
具有合理的大小 - 就像它一样,我使用panel
的子类而不是scrolledwindow
。我'已经
尝试了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()
答案 0 :(得分:2)
尝试以下代码,看看它是否符合您的要求:
HTH。
安德烈。
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()