Python 3.x 如何在wxPython中以编程方式展开PyCollapsablePane?

Python 3.x 如何在wxPython中以编程方式展开PyCollapsablePane?,python-3.x,wxpython,Python 3.x,Wxpython,我使用pycollapsablepane让用户隐藏或隐藏一些信息。在某些情况下,我需要在默认情况下(在创建时)展开这个pycollapsablepane 当我使用展开时,我的问题得到解决,但窗口缩小到其最小大小 如何在不缩小窗口的情况下使用此方法 我已经尝试使用对象或其父对象的布局方法,但不起作用。下面是一个显示我的问题的示例: import wx import wx.lib.agw.pycollapsiblepane as PCP class MyFrame(wx.Frame):

我使用pycollapsablepane让用户隐藏或隐藏一些信息。在某些情况下,我需要在默认情况下(在创建时)展开这个pycollapsablepane

当我使用展开时,我的问题得到解决,但窗口缩小到其最小大小

如何在不缩小窗口的情况下使用此方法

我已经尝试使用对象或其父对象的布局方法,但不起作用。下面是一个显示我的问题的示例:

import wx
import wx.lib.agw.pycollapsiblepane as PCP

class MyFrame(wx.Frame):

    def __init__(self, parent):

        wx.Frame.__init__(self, parent, -1, "PyCollapsiblePane Demo")

        panel = wx.Panel(self)

        title = wx.StaticText(panel, label="PyCollapsiblePane")
        title.SetFont(wx.Font(18, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD))
        title.SetForegroundColour("blue")

        self.cp = cp = PCP.PyCollapsiblePane(panel, label="Some Data",
                                             style=wx.CP_DEFAULT_STYLE | wx.CP_NO_TLW_RESIZE)
        self.cp.Collapse(collapse=False)
        #self.open_pane()
        self.MakePaneContent(cp.GetPane())

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(title, 0, wx.ALL, 25)
        sizer.Add(cp, 0, wx.RIGHT | wx.LEFT | wx.EXPAND, 25)

        panel.SetSizer(sizer)
        sizer.Layout()


    def open_pane(self):
        self.cp.Collapse(collapse=False)
        # this change was generated by the user - send the event
        ev = wx.CollapsiblePaneEvent(self.cp, self.cp.GetId(), self.cp.IsCollapsed())
        self.GetEventHandler().ProcessEvent(ev)

    def MakePaneContent(self, pane):
        ''' Just makes a few controls to put on `PyCollapsiblePane`. '''

        nameLbl = wx.StaticText(pane, -1, "Name:")
        name = wx.TextCtrl(pane, -1, "");

        addrLbl = wx.StaticText(pane, -1, "Address:")
        addr1 = wx.TextCtrl(pane, -1, "");
        addr2 = wx.TextCtrl(pane, -1, "");

        cstLbl = wx.StaticText(pane, -1, "City, State, Zip:")
        city  = wx.TextCtrl(pane, -1, "", size=(150,-1));
        state = wx.TextCtrl(pane, -1, "", size=(50,-1));
        zip   = wx.TextCtrl(pane, -1, "", size=(70,-1));

        addrSizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5)
        addrSizer.AddGrowableCol(1)
        addrSizer.Add(nameLbl, 0,
                      wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL)
        addrSizer.Add(name, 0, wx.EXPAND)
        addrSizer.Add(addrLbl, 0,
                      wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL)
        addrSizer.Add(addr1, 0, wx.EXPAND)
        addrSizer.Add((5,5))
        addrSizer.Add(addr2, 0, wx.EXPAND)

        addrSizer.Add(cstLbl, 0,
                      wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL)

        cstSizer = wx.BoxSizer(wx.HORIZONTAL)
        cstSizer.Add(city, 1)
        cstSizer.Add(state, 0, wx.LEFT | wx.RIGHT, 5)
        cstSizer.Add(zip)
        addrSizer.Add(cstSizer, 0, wx.EXPAND)

        border = wx.BoxSizer()
        border.Add(addrSizer, 1, wx.EXPAND | wx.ALL, 5)
        pane.SetSizer(border)


# our normal wxApp-derived class, as usual

app = wx.App(0)

frame = MyFrame(None)
app.SetTopWindow(frame)
frame.Show()

app.MainLoop()


好了,我终于找到了一个方法来避免这个问题。不要使用a,而要使用a。多亏了它,代码工作得很好,而且两者可以以相同的方式使用。唯一改变的是这些对象的图形表示方式

以下是我的代码的固定版本:

导入wx
将wx.lib.agw.pycollapsablepane作为PCP导入
类MyFrame(wx.Frame):
定义初始化(自身,父级):
wx.Frame.\uuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuux(self,parent,-1,“PyCollapsable
面板=wx.面板(自)
title=wx.StaticText(面板,label=“pycollapsablepane”)
title.SetFont(wx.Font(18,wx.fontformal_-SWISS,wx.FONTSTYLE_-NORMAL,wx.fontwweight_-BOLD))
标题:SetForeGroundColor(“蓝色”)
self.cp=cp=wx.collapsablepane(面板,label=“一些数据”,
style=wx.CP_默认_样式| wx.CP_否_TLW_调整大小)
self.MakePaneContent(cp.GetPane())
self.cp.Expand()
sizer=wx.BoxSizer(wx.VERTICAL)
sizer.Add(标题,0,wx.ALL,25)
sizer.Add(cp,0,wx.RIGHT | wx.LEFT | wx.EXPAND,25)
面板设置器(施胶器)
sizer.Layout()
def MakePaneContent(自身,窗格):
''只需在'PyCollapsablePane'上设置一些控件''
nameLbl=wx.StaticText(窗格,-1,“名称:”)
name=wx.TextCtrl(窗格,-1,“”);
addrLbl=wx.StaticText(窗格,-1,“地址:”)
addr1=wx.TextCtrl(窗格,-1,“”);
addr2=wx.TextCtrl(窗格,-1,“”);
cstLbl=wx.StaticText(窗格,-1,“城市、州、邮编:”)
city=wx.TextCtrl(窗格,-1,“,大小=(150,-1));
state=wx.TextCtrl(窗格,-1,“,大小=(50,-1));
zip=wx.TextCtrl(窗格,-1,”,大小=(70,-1));
addrSizer=wx.FlexGridSizer(cols=2,hgap=5,vgap=5)
addrSizer.addgrowtablecol(1)
addrSizer.Add(nameLbl,0,
wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL)
addrSizer.Add(名称,0,wx.EXPAND)
addrSizer.Add(addrLbl,0,
wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL)
addrSizer.Add(addr1,0,wx.EXPAND)
addrSizer.Add((5,5))
addrSizer.Add(addr2,0,wx.EXPAND)
addrSizer.Add(cstLbl,0,
wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL)
cstSizer=wx.BoxSizer(wx.水平)
cstSizer.Add(城市,1)
cstSizer.Add(状态,0,wx.LEFT | wx.RIGHT,5)
cstSizer.Add(zip)
addrSizer.Add(cstSizer,0,wx.EXPAND)
border=wx.BoxSizer()
border.Add(addrSizer,1,wx.EXPAND | wx.ALL,5)
窗格设置器(边框)
#像往常一样,我们的正常wxApp派生类
app=wx.app(0)
frame=MyFrame(无)
应用程序SetTopWindow(框架)
frame.Show()
app.MainLoop()

好的,我终于找到了避免问题的方法。不要使用a,而要使用a。多亏了它,代码工作得很好,而且两者可以以相同的方式使用。唯一改变的是这些对象的图形表示方式

以下是我的代码的固定版本:

导入wx
将wx.lib.agw.pycollapsablepane作为PCP导入
类MyFrame(wx.Frame):
定义初始化(自身,父级):
wx.Frame.\uuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
面板=wx.面板(自)
title=wx.StaticText(面板,label=“pycollapsablepane”)
title.SetFont(wx.Font(18,wx.fontformal_-SWISS,wx.FONTSTYLE_-NORMAL,wx.fontwweight_-BOLD))
标题:SetForeGroundColor(“蓝色”)
self.cp=cp=wx.collapsablepane(面板,label=“一些数据”,
style=wx.CP_默认_样式| wx.CP_否_TLW_调整大小)
self.MakePaneContent(cp.GetPane())
self.cp.Expand()
sizer=wx.BoxSizer(wx.VERTICAL)
sizer.Add(标题,0,wx.ALL,25)
sizer.Add(cp,0,wx.RIGHT | wx.LEFT | wx.EXPAND,25)
面板设置器(施胶器)
sizer.Layout()
def MakePaneContent(自身,窗格):
''只需在'PyCollapsablePane'上设置一些控件''
nameLbl=wx.StaticText(窗格,-1,“名称:”)
name=wx.TextCtrl(窗格,-1,“”);
addrLbl=wx.StaticText(窗格,-1,“地址:”)
addr1=wx.TextCtrl(窗格,-1,“”);
addr2=wx.TextCtrl(窗格,-1,“”);
cstLbl=wx.StaticText(窗格,-1,“城市、州、邮编:”)
city=wx.TextCtrl(窗格,-1,“,大小=(150,-1));
state=wx.TextCtrl(窗格,-1,“,大小=(50,-1));
zip=wx.TextCtrl(窗格,-1,”,大小=(70,-1));
addrSizer=wx.FlexGridSizer(cols=2,hgap=5,vgap=5)
addrSizer.addgrowtablecol(1)
addrSizer.Add(nameLbl,0,
wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL)
addrSizer.Add(名称,0,wx.EXPAND)
addrSizer.Add(addrLbl,0,
wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL)
addrSizer.Add(addr1,0,wx.EXPAND)
addrSizer.Add((5,5))
addrSizer.Add(addr2,0,wx.EXPAND)
addrSizer.Add(cstLbl,0,
wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL)
cstSizer=wx.BoxSizer(wx.水平)
cstSizer.Add(城市,1)
cstSizer.Add(状态,0,wx.LEFT | wx.RIGHT,5)
cstSizer.Add(zip)
addrSizer.Add(cstSizer,0,wx.EXPAND)
border=wx.BoxSizer()
border.Add(addrSizer,1,wx.EXPAND | wx.ALL,5)
窗格设置器(边框)
#像往常一样,我们的正常wxApp派生类
app=wx.app(0)
frame=MyFrame(无)
应用程序SetTopWindow(框架)
F