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()
Nguồn
2009-06-23 12:36:25
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? –
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 –
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. –