2013-10-05 55 views
1

當我只綁定一個TxtCtrl時,它的右側會一直展開到窗口邊緣。但是在創建了一個垂直的BoxSizer並添加了水平的BoxSizer之後,TxtCtrol的寬度僅爲100像素左右。爲什麼是這樣?爲什麼我的水平尺寸器在將其添加到垂直尺寸之後會改變寬度?

import wx 

class MainPanel(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent, style=wx.SIMPLE_BORDER) 

     top_box = wx.BoxSizer(wx.VERTICAL) 

     box1 = wx.BoxSizer(wx.HORIZONTAL) 
     box2 = wx.BoxSizer(wx.HORIZONTAL) 
     textureName = wx.TextCtrl(self, 1) 
     texturePath = wx.TextCtrl(self, 1) 

     box1.Add(wx.StaticText(self, 1, "Name: "), 0, wx.LEFT|wx.RIGHT|wx.TOP, 5) 
     box1.Add(textureName, 1, wx.ALIGN_LEFT|wx.RIGHT|wx.TOP, 5) 

     box2.Add(wx.StaticText(self, 1, "Path:  "), 0, wx.LEFT|wx.RIGHT|wx.TOP, 5) 
     box2.Add(texturePath, 1, wx.ALIGN_LEFT|wx.RIGHT|wx.TOP, 5) 

     top_box.Add(box1) 
     top_box.Add(box2) 

     self.SetSizer(top_box) 

class MainFrame(wx.Frame): 
    def __init__(self, parent, id): 
     title = "Exporter" 
     wx.Frame.__init__(self, parent, wx.ID_ANY, title, 
      size=(500, 420), 
      style = wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE) 
     self.panel = MainPanel(self) 

     self.Show() 

if __name__ == "__main__": 
    app = wx.PySimpleApp() 
    frame = MainFrame(None, -1) 
    frame.Centre() 
    app.MainLoop() 
    pass 

回答

1

您需要在樣式中使用wx.EXPAND

top_box.Add(box1, 0, wx.EXPAND) 
top_box.Add(box2) 

enter image description here

here:「當一個項目與所述wxEXPAND標誌Add'ed,該項目將被調整,以填補其獲分配區在相反的方向。」

+0

啊,是的,我試過wx.EXPAND,但忘記與比例值結合使用,所以它只是把另一個字段放在窗口的底部。謝謝! – optagon

+0

EXPAND實際上並不需要與比例值結合使用,因爲它們各自在相反的方向上工作;我只是爲了方便而把'0'。 '添加(box1,flag = wx.EXPAND)'也可以。也許你只是'添加(box1,wx.EXPAND)',就像'Add',比例設置爲'wx.EXPAND',或者'Add(box1,8192)'。另外,如果您認爲這回答您的問題,請在某個時候接受它,但如果您希望獲得更好的答案,則可以等待更好的答案。 – tom10

相關問題