1

以下のコードを使用して、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()
4

1 に答える 1

0

はい、可能です。私が知っている最も簡単な方法は、スピナーに名前を付けるか、部分的な関数 (またはラムダ、ただしラムダは面倒になる可能性があります) を使用して、Bind の各呼び出しに一意の名前を関連付けてから、ハンドラーで名前を確認することです。 . 名前の使用方法の例は、この前の SO の質問に記載されています。

于 2013-01-22T03:42:07.093 に答える