【问题标题】:wxpython controlling a widget with the idwxpython 用 id 控制一个小部件
【发布时间】:2010-12-03 13:54:14
【问题描述】:

嘿 :) 好的,我正在寻找一种在 wxpython 中创建大量面板并在列表中附加对它们的保留的方法,但我不确定如何最好地做到这一点。例如 对于列表中的 i: wx.Panel(self, -1, pos, size) #创建面板

以某种方式存储它,例如

anotherlist.append(a) #其中a是面板的保持 当我说保持时,我的意思是说变量名是 x,所以 x = wx.面板。我会调用 x 保持 cos x 可用于小部件的任何操作,例如 x.SetPosition 等。我在想也许使用创建面板并保存面板 id 的类的东西(wx.Panel)。 . 问题是我不知道如何访问小部件的 id。说面板ID是-206。我该怎么做 widgetid(-206).SetBackgroundColour("RED")

【问题讨论】:

    标签: wxpython


    【解决方案1】:

    有些人通过在文件开头创建 id 来解决这些问题:

    panelOneId = wx.NewId()
    panelTwoId = wx.NewId()
    

    然后执行类似 myPanel = wx.FindWindowById(panelOneId) 的操作。当然,如果您所做的只是设置面板属性,那么您可能应该创建一个这样的辅助方法:

    #----------------------------------------------------------------------
    def createPanel(self, sizer, id, bg):
        """"""
        panel = wx.Panel(self, id=id)
        panel.SetBackgroundColour(bg)
        sizer.Add(panel)
    

    如果您为面板指定了唯一的名称参数,您也可以使用 wx.FindWindowByName。

    【讨论】:

    • 非常感谢 mike wx.FindWindowById 正是我想要的! :)
    【解决方案2】:

    一个简单的解决方案是使用字典将 id 映射到面板

    panels = {}
    for i in range(100):
        id = wx.NewId()
        panels[id] = wx.Panel(parent, id, ...)
    

    然后您可以访问 id 列表 (.keys())、面板列表 (.values()) 以及从 id 到面板的映射。

    【讨论】:

    • 看起来就像 mike 说的那样,wx.FindWindowById() 基本上是一样的,你不必创建字典,因为 wx.FindWindowById(20) 会返回 wx.Panel(self , id=20) object...谢谢你的回答肯定是有用的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 2015-06-05
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多