面板大小不会在带菜单的框架中展开

面板大小不会在带菜单的框架中展开

问题描述:

我在wxpython中创建了一个带有菜单栏的框架,并将主大小设置为框架本身的子框架,但框架面板在调整大小后保持固定大小框架。当删除菜单栏并将主尺寸设置设置为面板本身时,尺寸调整完美无缺,但将菜单添加到框架设置时,主尺寸设置无法使用。面板大小不会在带菜单的框架中展开

tl; dr - 此代码的面板大小保持不变。我如何使其可调整大小?

import wx 

class Mainframe(wx.Frame): 
def __init__(self,parent,title): 
    wx.Frame.__init__(self,parent,title=title,size=(650,450)) 
    self.Main_Panel = wx.Panel(self,id=wx.ID_ANY) 

    ################################################################# 
    ### Template menubar menubar 
    ################################################################# 
    Menubar = wx.MenuBar() 
    Filemenu = wx.Menu() 
    Debugmenu = wx.Menu() 

    self.Menu_Open_File = Filemenu.Append(wx.ID_OPEN,"Open","Open an nrix file to edit") 
    self.Menu_SaveAs_File = Filemenu.Append(wx.ID_SAVEAS,"Save as","Normal saving will be incorporated later") 
    Filemenu.AppendSeparator() 
    self.Menu_About_Dialog = Filemenu.Append(wx.ID_ABOUT,"About","Information about the program and changelog") 
    self.Debug_State_Switch = Debugmenu.Append(wx.ID_ANY,"Debug on","Turn on debug mode",wx.ITEM_CHECK) 

    Menubar.Append(Filemenu,"File") 
    Menubar.Append(Debugmenu,"Debug") 
    self.SetMenuBar(Menubar) 
    ################################################################# 
    ### Frame objects 
    ################################################################# 
    Left_Static_text = wx.StaticText(self.Main_Panel,wx.ID_ANY,style=wx.ALIGN_LEFT) 
    Left_Static_text.SetFont(wx.Font(16,wx.ROMAN,wx.NORMAL,wx.FONTWEIGHT_NORMAL)) 
    Left_Static_text.SetLabel("Exploitable text") 

    Left_Text_Control = wx.TextCtrl(self.Main_Panel,wx.ID_ANY,value="Exploitable") 

    Buttons = [] 
    for i in range(4): 
     Buttons.append(wx.Button(self.Main_Panel,label=str(i + 1),size=(50,50))) 
    ################################################################# 
    ### Frame sizers 
    ################################################################# 
    Grid_Sizer = wx.GridSizer(2,2,15,15) 
    Ver_Wrapper = wx.BoxSizer(wx.VERTICAL) 
    Left_Sizer = wx.BoxSizer(wx.VERTICAL) 
    Whole_Sizer = wx.BoxSizer(wx.HORIZONTAL) 
    ################################################################# 
    ### Attaching sizers 
    ################################################################# 
    for i in range(4): 
     Grid_Sizer.Add(Buttons[i],0,wx.EXPAND) 

    Ver_Wrapper.Add((0,0),proportion=1,flag=wx.EXPAND) 
    Ver_Wrapper.Add(Grid_Sizer,proportion=0,flag=wx.CENTER) 
    Ver_Wrapper.Add((0,0),proportion=1,flag=wx.EXPAND) 

    Left_Sizer.Add((0,0),proportion=1,flag=wx.EXPAND) 
    Left_Sizer.Add(Left_Static_text,proportion=0,flag=wx.CENTER) 
    Left_Sizer.Add(Left_Text_Control,proportion=0,flag=wx.CENTER) 
    Left_Sizer.Add((0,0),proportion=1,flag=wx.EXPAND) 

    Whole_Sizer.Add(Left_Sizer,proportion=1,flag=wx.EXPAND) 
    Whole_Sizer.Add(Ver_Wrapper,proportion=3,flag=wx.EXPAND) 

    # self.Main_Panel.SetSizer(Whole_Sizer) <- THIS WORKS WITHOUT A MENU 
    self.SetSizer(Whole_Sizer) 

app = wx.App(False) 
frame = Mainframe(None,"Menu UI") 
frame.Show(True) 
app.MainLoop() 
+0

做self.Main_Panel.SetSizer(Whole_Sizer)'在Xubuntu 16.04中适用于wxPython 3.0.2.0和Python 2.7。不知道为什么这不适合你。我会说'self.SetSizer(Whole_Sizer)'只是让我的机器上的窗口完全空了。 –

+0

我在Windows 7和10中使用Python 2.7来试用它。特别设置sizer为self.Main_Panel会导致所有小部件合并到左上角。 –

+0

在Linux mint 18中尝试过,它也可以在那里使用。也许这是我认为这是Windows窗体的问题。任何想法如何去解决它? –

原来,这只是一个小故障。在Windows中将Whole_Sizer归于Main_Panel时,所有窗口小部件都位于左上角。一旦我开始通过拖动窗口角来解决窗口大小问题,整个事情就解决了。现在我只是觉得很愚蠢。

+0

你可以在显示帧之前调用sizer上的'Layout'并且可能会解决这个问题 –