2009-08-14 69 views
10

Tôi có nhiều nút trong các bộ phân loại khác nhau và chúng mở rộng theo cách mà tôi muốn chúng. Tuy nhiên, khi tôi thêm phụ huynh vào một wx.BoxSizer mới được sử dụng để thêm một đường viền xung quanh tất cả các phần tử trong khung, bộ sizer đã được thêm các hàm một cách chính xác theo chiều dọc, nhưng không phải theo chiều ngang.wxPython: Các mục trong BoxSizer không mở rộng theo chiều ngang, chỉ theo chiều dọc

Các mã sau đây chứng tỏ vấn đề:

#! /usr/bin/env python 

import wx 
import webbrowser 

class App(wx.App): 


    def OnInit(self): 
     frame = MainFrame() 
     frame.Show() 
     self.SetTopWindow(frame) 
     return True 


class MainFrame(wx.Frame): 

    title = 'Title' 


    def __init__(self): 
     wx.Frame.__init__(self, None, -1, self.title) 

     panel = wx.Panel(self) 

     #icon = wx.Icon('icon.png', wx.BITMAP_TYPE_PNG) 
     #self.SetIcon(icon) 

     sizer = wx.FlexGridSizer(rows=2, cols=1, vgap=10, hgap=10) 

     button1 = wx.Button(panel, -1, 'BUTTON') 
     sizer.Add(button1, 0, wx.EXPAND) 

     buttonSizer = wx.FlexGridSizer(rows=1, cols=4, vgap=10, hgap=5) 

     buttonDelete = wx.Button(panel, -1, 'Delete') 
     buttonSizer.Add(buttonDelete, 0, 0) 

     buttonEdit = wx.Button(panel, -1, 'Edit') 
     buttonSizer.Add(buttonEdit, 0, 0) 

     buttonNew = wx.Button(panel, -1, 'New') 
     buttonSizer.Add(buttonNew, 0, 0) 

     buttonSizer.AddGrowableCol(0, 0) 

     sizer.Add(buttonSizer, 0, wx.EXPAND|wx.HORIZONTAL) 

     sizer.AddGrowableCol(0, 0) 
     sizer.AddGrowableRow(0, 0) 

     mainSizer = wx.BoxSizer(wx.EXPAND) 
     mainSizer.Add(sizer, 0, wx.EXPAND|wx.ALL, 10) 

     #panel.SetSizerAndFit(sizer) 
     #sizer.SetSizeHints(self) 
     panel.SetSizerAndFit(mainSizer) 
     mainSizer.SetSizeHints(self) 


if __name__ == '__main__': 
    app = App(False) 
    app.MainLoop() 

Bình luận ra dòng và và dòng uncommenting và loại bỏ thêm các BoxSizer và cho thấy làm thế nào tôi hy vọng tất cả mọi thứ để chức năng (không có khoảng trống của khóa học).

Tôi hoàn toàn bị mắc kẹt với vấn đề này và vẫn không có đầu mối như thế nào để sửa chữa nó.

Trả lời

24

Trước hết, bạn đang chuyển một số cờ không chính xác. BoxSizer mất wx.HORIZONTAL hoặc wx.VERTICAL, không phải wx.EXPAND. sizer.dd không lấy wx.HORIZONTAL.

Nếu bạn có VERTICAL BoxSizer, wx.EXPAND sẽ làm cho điều khiển điền theo chiều ngang, trong khi tỷ lệ 1 hoặc nhiều hơn (đối số thứ hai để Thêm) sẽ làm cho điều khiển điền theo chiều dọc. Nó đối lập với HORIZONTAL BoxSizers.

sizer = wx.BoxSizer(wx.VERTICAL) 
sizer.Add(widget1, 0, wx.EXPAND) 
sizer.Add(widget2, 1) 

widget1 sẽ mở rộng theo chiều ngang. widget2 sẽ mở rộng theo chiều dọc.

Nếu bạn đặt một sizer trong sizer khác, bạn cần phải chắc chắn để có tỷ lệ của nó và EXPAND cờ thiết lập để bên trong của nó sẽ phát triển như thế nào bạn muốn họ.

Tôi sẽ để phần còn lại cho bạn.

Các vấn đề liên quan