2009-06-23 29 views
5

Tôi có một wx.Frame, trong đó có một wx.Panel chính với một số tiện ích bên trong nó. Tôi muốn có một nút trong đó để làm cho "bảng trợ giúp" xuất hiện. Bảng trợ giúp này có lẽ sẽ là một wx.Panel, và tôi muốn nó che phủ toàn bộ wx.Panel chính (không bao gồm thanh menu của wx.Frame). Nên có một số loại nút đóng trên nút trợ giúp sẽ làm cho nút này biến mất một lần nữa.wxPython: Cách tốt để che phủ một wx.Panel trên một wx.Panel hiện có

Cách tốt để đạt được điều này là gì? Tôi đã nhìn vào wx.Notebook nhưng không tìm thấy một cách để làm cho nó không hiển thị các tab.

Lưu ý rằng tôi không muốn hủy và tạo lại bảng trợ giúp mỗi khi người dùng đóng và mở nó: Tôi chỉ muốn nó bị ẩn.

Trả lời

11

Có một số cách

a) bạn có thể tạo bảng con tùy chỉnh và đặt cùng kích thước và vị trí ở 0,0 trên cùng của tất cả tiện ích con. không cần phá hủy nó chỉ Hiện/Ẩn nó này cũng thay đổi kích thước với khung mẹ

b) bật lên một wx.PopupWindow hoặc có nguồn gốc lớp và địa điểm và quy mô nó ở đúng vị trí

như vậy là đề nghị trong một) ở đây là một ví dụ, nơi mà tất cả các điều khiển được đặt trong bảng điều khiển sử dụng sizer, như riêng biệt giúp Cntrl được tạo ra có thể được hiển thị/ẩn từ nút, nhưng bạn có thể tạo ra một Cntrl tùy chỉnh mà giấu cứ vào nhấp chuột vào gần

import wx 

class MyFrame(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None) 

     self.panel = wx.Panel(self) 

     # create controls 
     self.cntrlPanel = wx.Panel(self.panel) 
     stc1 = wx.StaticText(self.cntrlPanel, label="wow it works") 
     stc2 = wx.StaticText(self.cntrlPanel, label="yes it works") 
     btn = wx.Button(self.cntrlPanel, label="help?") 
     btn.Bind(wx.EVT_BUTTON, self._onShowHelp) 

     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(stc1) 
     sizer.Add(stc2) 
     sizer.Add(btn) 
     self.cntrlPanel.SetSizer(sizer) 


     # create help panel 
     self.helpPanel = wx.Panel(self.panel) 
     self.stcHelp = wx.StaticText(self.helpPanel, label="help help help\n"*8) 
     btn = wx.Button(self.helpPanel, label="close[x]") 
     btn.Bind(wx.EVT_BUTTON, self._onShowCntrls) 
     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(self.stcHelp) 
     sizer.Add(btn) 
     self.helpPanel.SetSizer(sizer) 
     self.helpPanel.Hide() 
     self.helpPanel.Raise() 
     self.helpPanel.SetBackgroundColour((240,250,240)) 
     self.Bind(wx.EVT_SIZE, self._onSize) 

     self._onShowCntrls(None) 

    def _onShowHelp(self, event): 
     self.helpPanel.SetPosition((0,0)) 
     self.helpPanel.Show() 
     self.cntrlPanel.Hide() 

    def _onShowCntrls(self, event): 
     self.cntrlPanel.SetPosition((0,0)) 
     self.helpPanel.Hide() 
     self.cntrlPanel.Show() 

    def _onSize(self, event): 
     event.Skip() 
     self.helpPanel.SetSize(self.GetClientSizeTuple()) 
     self.cntrlPanel.SetSize(self.GetClientSizeTuple()) 

app = wx.PySimpleApp() 
frame = MyFrame() 
frame.Show() 
app.SetTopWindow(frame) 
app.MainLoop() 
+0

tôi nghĩ có lẽ tôi đã sử dụng từ "lớp phủ" không chính xác ... Tôi muốn một wx.Panel mà sẽ bao gồm các wx.Panel chính, hoàn toàn ẩn nó. Tôi đã thử làm những gì bạn đã làm ngoại trừ với một wx.Panel, nhưng làm thế nào để tôi làm cho nó luôn luôn điều chỉnh chính nó theo kích thước của wx.Frame? –

+0

ban đầu thiết lập bảng điều khiển = kích thước của khung khách hàng/hoặc bảng điều khiển bên trong ghi đè OnSize (EVT_SIZE) và thay đổi kích thước trợ giúp theo kích thước của Frame –

+0

ok tôi đã cập nhật ví dụ như vậy bây giờ, có hai tấm một cho cntrl và một để được giúp đỡ, cả hai bên trong có thể sắp xếp cntrls bằng cách sử dụng sizers, và cả hai đều có nút để chuyển sang bảng điều khiển khác, cũng có thể thay đổi kích thước với khung cha mẹ, nó có nghĩa là nó có tất cả những gì bạn cần. Nhưng như tôi đã nói có một số cách để làm điều này. –

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