gpt4 book ai didi

python - wxPython:在现有 wx.Panel 上覆盖 wx.Panel 的好方法

转载 作者:太空狗 更新时间:2023-10-30 00:37:35 30 4
gpt4 key购买 nike

我有一个 wx.Frame,其中有一个主 wx.Panel,里面有几个小部件。我想要那里的一个按钮导致出现“帮助面板”。这个帮助面板可能是一个 wx.Panel,我希望它覆盖整个主 wx.Panel(不包括 wx.Frame 的菜单栏)。帮助按钮上应该有某种关闭按钮,可以使它再次消失。

实现这一目标的好方法是什么?我研究过 wx.Notebook,但还没有找到让它不显示标签的方法。

请注意,我不想在用户每次关闭和打开帮助面板时都销毁并重新创建它:我只想将其隐藏。

最佳答案

有几种方法

a) 您可以创建一个自定义子面板,并使其在所有子窗口小部件顶部的 0,0 处具有相同的大小和位置。不需要破坏它只是显示/隐藏它这也会随着父框架调整大小

b) 弹出一个 wx.PopupWindow 或派生类并将其放置在正确的位置并调整其大小

如 a) 中所建议的,这是一个示例,其中所有控件都使用 sizer 放在面板中,因为创建了单独的帮助 cntrl,可以从按钮显示/隐藏,但您可以创建一个自定义 cntrl,它将自己隐藏在点击关闭

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()

关于python - wxPython:在现有 wx.Panel 上覆盖 wx.Panel 的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1032138/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com