2017-04-23 3 views
0

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

Doing'self.Main_Panel.SetSizer (Whole_Sizer)'는 wxPython 3.0.2.0 및 Python 2.7이 포함 된 Xubuntu 16.04에서 저에게 효과적입니다. 이것이 왜 당신을 위해 작동하지 않는지 잘 모르겠습니다. 'self.SetSizer (Whole_Sizer)'는 내 컴퓨터에서 창을 완전히 비우는 것입니다. –

+0

나는 Windows 7과 10에서 파이썬 2.7로 두 번 시도했다. 특히 self.Main_Panel에 대한 sizer를 설정하면 모든 위젯이 왼쪽 상단 모퉁이로 합쳐집니다. –

+0

Linux mint 18에서 시도했지만 잘 작동합니다. 아마도 이것은 이것이 Windows 양식의 문제점이라고 생각합니다. 어떻게 할 생각이야? –

답변

0

이것은 작은 결함 일뿐입니다. Windows에서 Whole_SizerMain_Panel으로 지정되면 모든 위젯이 왼쪽 위 모퉁이에 위치합니다. 일단 모든 것을 둘러싼 윈도우 모서리를 드래그하여 창 크기를 엉망으로 만들기 시작하면 스스로 해결됩니다. 이제 나는 바보 같이 느껴진다.

+0

프레임을 표시하기 전에 sizer에서'Layout'을 호출하면 문제가 해결 될 것입니다 –