2011-01-15 21 views
6

Tôi đang sử dụng bộ khung lưới để đặt hai bảng trong một khung.Đặt các phần tử (bảng) trong một wx.GridBagSizer

control_panel = wx.Panel(self, id=ID_CONTROL_PANEL) 
main_panel = wx.Panel(self, id=ID_MAIN_PANEL) 

frame_sizer = wx.GridBagSizer(1, 1) 
frame_sizer.Add(control_panel, (0, 0), (2, 5), flag=wx.EXPAND) 
frame_sizer.Add(main_panel, (2, 0), (5, 5), flag=wx.EXPAND) 
frame_sizer.AddGrowableRow(0) 
frame_sizer.AddGrowableCol(0) 
self.SetSizer(frame_sizer) 

Tôi muốn control_panel nằm phía trên main_panel (như bạn có thể thấy ở trên). Tuy nhiên điều này là kết quả tôi nhận được:

alt text

Tôi không biết lý do tại sao các bảng điều khiển là rất lớn hơn nhiều so với bảng điều khiển phía dưới, khi tôi đã chỉ định điều ngược lại. (2, 5) cho phía trên và (5, 5) cho đáy. Nó cũng có một hành vi lạ khi tôi thay đổi kích thước nó nhỏ hơn, về cơ bản nó mang lại cho tôi những gì tôi muốn (xem hình bên dưới), nhưng tôi không biết làm thế nào để duy trì tỷ lệ khi tôi làm cho nó lớn hơn một lần nữa.

alt text

Tuy nhiên khi bạn bắt đầu thay đổi kích thước lớn hơn (dù chỉ một lượng nhỏ), bạn có thể nhìn thấy (bên dưới) các hình dạng và tỷ lệ thay đổi đáng kể theo hướng khác (với đáy ngày càng trở nên nhỏ hơn nhiều và đầu lớn hơn nhiều).

alt text

Vẫn cố gắng học Sizers này và có thể không thực sự tìm thấy vấn đề này với bất kỳ ví dụ tôi đã nhìn thấy. Cũng thử thử nghiệm với tất cả các thông số và thực hiện một số thử nghiệm và tôi không thể tìm ra những gì đang xảy ra ở đây. Bất kì sự trợ giúp nào đều được đánh giá cao.

EDIT: Hình ảnh bên dưới được thêm vào nhận xét hỗ trợ bên dưới. alt text

Trả lời

2

Cá nhân, tôi sẽ sử dụng một BoxSizer theo hướng VERTICAL. Dưới đây là ví dụ đơn giản:

import wx 

class MyForm(wx.Frame): 

    def __init__(self): 
     wx.Frame.__init__(self, None, wx.ID_ANY, "Tutorial") 

     # Add a panel so it looks the correct on all platforms 
     panel = wx.Panel(self, wx.ID_ANY) 

     control_panel = wx.Panel(panel) 
     control_panel.SetBackgroundColour("Yellow") 
     main_panel = wx.Panel(panel) 
     main_panel.SetBackgroundColour("Blue") 

     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(control_panel, 3, wx.EXPAND) 
     sizer.Add(main_panel, 1, wx.EXPAND) 
     panel.SetSizer(sizer) 

# Run the program 
if __name__ == "__main__": 
    app = wx.PySimpleApp() 
    frame = MyForm().Show() 
    app.MainLoop() 

Tôi đã thay đổi màu nền của mỗi bảng điều khiển để dễ hiểu hơn. Lưu ý rằng tôi đã đưa ra bảng điều khiển một tỷ lệ 3 và bảng điều khiển chính một tỷ lệ 1. Bạn có thể muốn có một cái nhìn tại các Công cụ kiểm tra Widget cũng như để giúp bạn hình dung nó:

http://wiki.wxpython.org/Widget%20Inspection%20Tool

+0

Tôi vẫn có thể sử dụng SetMaxSize với điều này?Tôi muốn các bảng điều khiển trên cùng để ở lại kích thước tương tự (trong y, nhưng mở rộng thông qua x) nhưng bảng điều khiển phía dưới để mở rộng (trong x và y). – johnharris85

+0

Tôi không chắc ... bạn có thể có được nó bằng cách sử dụng bộ lồng nhau cho bảng trên cùng, nhưng tôi không biết. –

1

Trong số bảy hàng và năm cột trong lưới, bạn chỉ xác định hàng đầu tiên và cột đầu tiên có thể phát triển.

Bảng điều khiển chiếm hàng đầu tiên để nó mở rộng để chiếm không gian có sẵn.

Cờ wx.EXPAND chỉ có tác dụng nếu ô nằm trong hàng hoặc cột có thể phát triển.

+0

Cảm ơn, Tôi đã thêm khả năng phát triển cho tất cả các hàng và cột và có vẻ tốt hơn nhiều, tuy nhiên tôi thực sự muốn bảng điều khiển trên cùng mở rộng đến một kích thước nhất định rồi dừng lại. Nhưng cửa sổ phía dưới có thể tiếp tục tăng kích thước. Điều này có thể không? – johnharris85

+0

Thử sử dụng SetMaxSize để giới hạn chiều cao của bảng điều khiển. Bạn cũng có thể làm cho chiều cao của bảng điều khiển cố định (với SetSize) và không làm cho các hàng nó chiếm khả năng phát triển. Hoặc bạn có thể chơi với tỷ lệ bằng cách thay đổi số lượng hàng có thể phát triển mà mỗi một trong hai bảng này trải rộng. –

+0

Tôi đã thêm control_panel.SetMaxSize (wx.Size (150, 300)) nhưng dường như không làm gì cả, tôi vẫn có thể mở rộng nó ở bất cứ đâu. Ngoài ra (và điều này xảy ra sau khi làm cho tất cả các hàng/cols có thể phát triển) có một số không gian lạ xuất hiện ở các cạnh của khung khi nó được thay đổi kích thước thành hình dạng nhất định (tôi đã thêm một hình ảnh bổ sung này ở trên). – johnharris85