wxpython:如何访问放置在wx尺寸仪反对?

2024-06-17 14:46:46 发布

您现在位置:Python中文网/ 问答频道 /正文

在重构会话中,我将大量gui代码放入一些小函数中,这些函数直接将数据插入到wx尺寸仪对象。在

例如,这个小函数:

def buildStatusDisplay(self, status_disp, flag):
    grid = wx.FlexGridSizer(cols=1, hgap=5, vgap=0)
    font = wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.LIGHT, False, 'Segoe UI')
    for option in status_disp:
        left = wx.StaticText(self, -1, option)
        left.SetFont(font)
        grid.Add(left, 0, flag=flag)
    return grid

因此它使用throwaway left创建所有StaticText对象,然后返回FlexGrid。但是,我需要StaticText对象中的一些标签来根据用户输入进行更新,但是,我不确定如何访问它们。在

我已经循环了从函数返回的sizer,但是我没有看到任何关于让我获得对组成sizer的对象的引用的方法。在

^{pr2}$

GetChildren()只返回SizerItems,似乎也不包含对底层对象的任何引用。在

有人知道如何进入尺寸机内部的东西吗?我想我可以稍微分解一下函数,或者返回一个对象列表和sizer,或者简单地转储函数并将标识符保存到main中需要修改的对象。。但是。。。我的gui代码已经够意大利面了。如果我能避免的话,我愿意。在


Tags: 对象函数代码self尺寸statusguileft
2条回答

我几个月前就回答了这样的问题:wxPython: How to get sizer from wx.StaticText?

基本上,你只需要这样做:

children = self.sizer.GetChildren()

for child in children:
    widget = child.GetWindow()
    print widget
    if isinstance(widget, wx.TextCtrl):
        widget.Clear()

在这种情况下,你可以看到我只是在检查wx.TextCtrl,但您可以检查任何您喜欢的小部件。我还写了一篇关于我的blog主题的文章。在

wx.SizerItem上,有一个GetWindow,它正好给了你。使用IsWindow检查是否有可用的“窗口”。所有底层对象都从wx.Window继承,所以这就是您想要的。在

下面是一个示例,obj是一个wx.Frame对象:

>>> obj
<main.views.Main; proxy of <Swig Object of type 'wxFrame *' at 0x7fbaa1c70820> >
>>> obj.Sizer
<wx._core.BoxSizer; proxy of <Swig Object of type 'wxBoxSizer *' at 0x7fba9c9d48d0> >
>>> obj.Sizer.Children
wxSizerItemList: [<wx._core.SizerItem; proxy of <Swig Object of type 'wxSizerItem *' at 0x7fbaa1c21630> >, <wx._core.SizerItem; proxy of <Swig Object of type 'wxSizerItem *' at 0x7fbaa1c7faf0> >]
>>> obj.Sizer.Children[0]
<wx._core.SizerItem; proxy of <Swig Object of type 'wxSizerItem *' at 0x7fbaa1c21630> >
>>> obj.Sizer.Children[0].Window
<wx._windows.Panel; proxy of <Swig Object of type 'wxPanel *' at 0x7fba9c9d4d10> >

相关问题 更多 >