wxPython如何在传入1时获取小部件的ID?

2024-10-04 11:27:21 发布

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

我今天做了一点wxPython的工作,我得到了这段代码(我去掉了不相关的部分):

        def CreateRowOne(self, pan):
            hbox1 = wx.BoxSizer(wx.HORIZONTAL)
            hbox1.Add(wx.Button(pan, -1, "250 Words"), 1, wx.EXPAND | wx.ALL)
            hbox1.Add(wx.Button(pan, -1, "500 Words"), 1, wx.EXPAND | wx.ALL)
            hbox1.Add(wx.Button(pan, -1, "750 Words"), 1, wx.EXPAND | wx.ALL)
            return hbox1

如何获取创建的按钮的ID,以便将它们绑定到处理程序?通常,我会这样做:

^{pr2}$

但我没有给任何按钮一个标识符。我要手动分配身份证号码吗?在


Tags: 代码selfadddefwxpythonbuttonall按钮
3条回答

Am I going to have to manually assign the ID numbers?

不,输入-1或使用wx.NewId()将给您自动生成的ID

你可以随时用button1.GetID()button1.Id取回id。在

更新

ID_BUTTON1 = wx.NewId()

hbox1.Add(wx.Button(pan, ID_BUTTON1, "250 Words"), 1, wx.EXPAND | wx.ALL)

self.Bind(wx.EVT_BUTTON, self.Blah, ID_BUTTON1)

我建议不要做”sizer。添加(wx.按钮(...))". 最好将小部件的创建和布局分开。有没有一个令人信服的理由来用你现有的方式编写代码?为什么不这样写:

button1=wx.Button(pan, wx.ID_ANY, ...)
button2=wx.Button(pan, wx.ID_ANY, ...)
...
hbox1.Add(button1)
hbox1.Add(button2)
...
self.Bind(wx.EVT_BUTTON, self.Blah, button1.GetID())
self.Bind(wx.EVT_BUTTON, self.Blah2, button2.GetID())

将按钮创建和添加到一行大小器中没有任何好处。在

就我个人而言,我认为分配id更有价值,但对于大量的widget来说,这可能是一项繁重的工作。我通常只对代码其他部分中提到的“重要的”小部件这么做。我的代码通常看起来像:

^{pr2}$

我认为随着时间的推移,代码更容易理解和维护。在

你可以通过控件.GetID()但是您不需要获取ID来绑定,您可以这样做

self.btn.Bind(wx.EVT_BUTTON, self._onBtnClick)

最好是(id应该是实现细节)和简短,例如在这个示例中

^{pr2}$

相关问题 更多 >