【问题标题】:wxPython: binding a dynamically created spinner to an eventwxPython:将动态创建的微调器绑定到事件
【发布时间】:2013-01-22 01:41:39
【问题描述】:

我使用下面的代码创建了几个带有 for 循环的微调器。

现在,我不知道如何绑定事件,以便知道正在修改哪个微调器,以便将微调器值放入正确的变量中。

如果我能确定哪个微调器正在调用处理程序,我可以将其映射到正确的变量。

有什么想法吗?这甚至可能吗?

提前致谢!


    import wx

class spinnerFrame(wx.Frame):
    def __init__(self, parent, id):
        wx.Frame.__init__(self, parent,id, "Spinner Frame", size = (300,200))

        #constants
        spnr_sz = (50,-1)
        names = ('name1','name2','name3','name4','name5','name6')


        sizer = wx.GridBagSizer(5, 5)
        # TEXT FONT EXAMPLE
        # m_text = wx.StaticText(panel, -1, "Hello World!")
        # m_text.SetFont(wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD))
        # m_text.SetSize(m_text.GetBestSize())

        #temp
        sizer = wx.GridBagSizer(5, 5)
        row = 0
        for n in names:
            row += 1
            my_label = wx.StaticText(self, -1, n)
            spinner = wx.SpinCtrl(self, -1, size = spnr_sz, min = 0, initial = 10 )
            self.Bind(wx.EVT_SPINCTRL, self.OnCompute, spinner)
            sizer.Add(my_label, (row,0))
            sizer.Add(spinner, (row,1))

        sizer.AddGrowableRow(7)
        sizer.AddGrowableCol(4)

        self.SetSizerAndFit(sizer)
        self.Centre()

    def OnCompute(self,event):
        # a = spinner.GetValue()
        # ????

if __name__=='__main__':
    app = wx.App(True) # was False
    frame = wx.Frame(None)
    frame = spinnerFrame (parent=None, id = -1)
    frame.Show()
    app.MainLoop()

【问题讨论】:

    标签: events wxpython


    【解决方案1】:

    是的,这是可能的。我知道的最简单的方法是将您的唯一名称与对 Bind 的每次调用相关联,方法是给微调器一个名称或使用部分函数(或 lambdas,但 lambdas 最终会变得混乱),然后在处理程序中检查名称. this 上一个 SO 问题中给出了如何使用该名称的示例。

    【讨论】:

    • 太棒了!这适用于我正在尝试做的事情。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2014-10-15
    • 2016-08-13
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多