wxPython-传入-1时如何获取小部件的ID?
我今天做了一点wxPython的工作,我得到了这段代码(我去掉了不相关的部分): 如何获取已创建按钮的ID,以便将它们绑定到处理程序?通常,我会这样做:wxPython-传入-1时如何获取小部件的ID?,python,wxpython,Python,Wxpython,我今天做了一点wxPython的工作,我得到了这段代码(我去掉了不相关的部分): 如何获取已创建按钮的ID,以便将它们绑定到处理程序?通常,我会这样做: button1 = wx.Button(...) button2 = wx.Button(...) ... self.Bind(wx.EVT_BUTTON, self.Blah, button1.GetID()) self
button1 = wx.Button(...)
button2 = wx.Button(...)
...
self.Bind(wx.EVT_BUTTON, self.Blah, button1.GetID())
self.Bind(wx.EVT_BUTTON, self.Blah2, button2.GetID())
但是我没有给任何按钮一个标识符。我必须手动分配身份证号码吗
我必须手动分配身份证号码吗
否,放置-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)
我必须手动分配身份证号码吗
否,放置-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.Add(wx.Button(…)”)。最好将小部件的创建和布局分开。是否有一个令人信服的理由来编写您的代码?为什么不这样写呢:
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())
将按钮创建合并到一行中并将其添加到一个sizer中并没有任何好处
就我个人而言,我认为分配ID更有价值,但对于大量小部件来说,这可能是一项繁重的工作。我通常只对“重要的”小部件——我在代码的其他部分中提到的小部件——这样做。我的代码通常如下所示:
ID_BUTTON1 = wx.NewID()
IO_BUTTON2 = wx.NewID()
class ...:
...
button1 = wx.Button(self, ID_BUTTON1, ...)
...
self.Bind(wx.EVT_BUTTON, ID_BUTTON1, ...)
...
我认为随着时间的推移,这会使代码更容易理解和维护。我建议不要使用“sizer.Add(wx.Button(…)”。最好将小部件的创建和布局分开。是否有一个令人信服的理由来编写您的代码?为什么不这样写呢:
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())
将按钮创建合并到一行中并将其添加到一个sizer中并没有任何好处
就我个人而言,我认为分配ID更有价值,但对于大量小部件来说,这可能是一项繁重的工作。我通常只对“重要的”小部件——我在代码的其他部分中提到的小部件——这样做。我的代码通常如下所示:
ID_BUTTON1 = wx.NewID()
IO_BUTTON2 = wx.NewID()
class ...:
...
button1 = wx.Button(self, ID_BUTTON1, ...)
...
self.Bind(wx.EVT_BUTTON, ID_BUTTON1, ...)
...
我认为随着时间的推移,这会使代码更容易理解和维护。您可以通过control.GetID()获取id,但您不需要获取id来绑定,您可以这样做
self.btn.Bind(wx.EVT_BUTTON, self._onBtnClick)
最好是(id应该是实现细节)和简短,例如在本示例中
import wx
app = wx.PySimpleApp()
frame = wx.Frame(None)
btn = wx.Button(frame, -1, "anurag")
btn.Bind(wx.EVT_BUTTON, lambda e:wx.MessageBox("Wow it works"))
frame.Show()
app.SetTopWindow(frame)
app.MainLoop()
您可以通过control.GetID()获取id,但不需要获取id进行绑定,您可以这样做
self.btn.Bind(wx.EVT_BUTTON, self._onBtnClick)
最好是(id应该是实现细节)和简短,例如在本示例中
import wx
app = wx.PySimpleApp()
frame = wx.Frame(None)
btn = wx.Button(frame, -1, "anurag")
btn.Bind(wx.EVT_BUTTON, lambda e:wx.MessageBox("Wow it works"))
frame.Show()
app.SetTopWindow(frame)
app.MainLoop()
但我没有创建按钮1或按钮2,我是这样做的:“hbox1.Add(wx.Button(pan,-1),1,wx.EXPAND | wx.ALL)”好的,更新后,你也可以这样做。所以基本上,对于每个小部件,我需要在某处引用ID号,无论我是否手动分配了它?你不需要绑定ID,看我的回答,但我没有创建按钮1或按钮2,我这样做了:“hbox1.Add(wx.Button(pan,-1),1,wx.EXPAND | wx.ALL)”好的,更新了,你也可以这样做。所以基本上,对于每个小部件,我都需要在某个地方引用一个ID号,无论我是否手动分配了它?你不需要绑定ID,看我的回答当我第一次开始学习wxPython时,我遵循的教程就是这样,它们将小部件的创建和布局结合在一起。我一直认为wxPython在没有标识符或手动定义的ID的情况下有某种检索ID的方法,而且,用“更长”的方法检索ID似乎与我所学到的背道而驰,即用更少的代码完成更多的工作。不要让创建更少代码的愿望导致编写错误的代码量。虽然我们都应该努力写更少的代码,但我们应该写尽可能少的代码行,但不能少。请记住,您的最终目标是编写a)有效,b)可维护的代码。在我看来,将代码塞进更少的行对这两个目标都不起作用。当我第一次开始学习wxPython时,我遵循的教程就是这样,它们将小部件的创建和布局组合在一行中。我一直认为wxPython在没有标识符或手动定义的ID的情况下有某种检索ID的方法,而且,用“更长”的方法检索ID似乎与我所学到的背道而驰,即用更少的代码完成更多的工作。不要让创建更少代码的愿望导致编写错误的代码量。虽然我们都应该努力写更少的代码,但我们应该写尽可能少的代码行,但不能少。请记住,您的最终目标是编写a)有效,b)可维护的代码。将代码塞进更少的行对这两个目标都不起作用。