Reputation:
I creating a utility program in Python using wxPython, but I'm unable to bind a method to the button.
The interesting thing is, I've binded another button(self.add_employee_to_list
) exactly the same way, but that one works.
class MyDialog(wx.Frame):
def __init__(self, parent, title):
self.no_resize = wx.DEFAULT_FRAME_STYLE & ~ (wx.RESIZE_BORDER | wx.MAXIMIZE_BOX)
wx.Frame.__init__(self, parent, title=title, size=(500, 450),style = self.no_resize)
self.panel = wx.Panel(self, size=(250, 270))
self.add_employee_to_list = wx.Button(self.panel, label="Add Employee", pos=(250,50), size=(115,25))
self.add_employee_to_list.Bind(wx.EVT_BUTTON, self.add_employee_to_box)
#Button that produces error on binding
self.remove_employee_from_list = wx.Button(self.panel, label="Remove Employee",pos= (250,80), size=(115,25))
self.remove_employee_from_list.Bind(wx.EVT_BUTTON, self.remove_employee_from_list)
def remove_employee_from_list(self, event):
pass
app = wx.App(False)
frame = MyDialog(None, "Crystal Rose")
app.MainLoop()
I get the following error:
Traceback (most recent call last): File "C:/Users/SR/PycharmProjects/CrystalRose/CrystalRoseGUI.py", line 59, in <module>
frame = MyDialog(None, "Crystal Rose") File "C:/Users/SR/PycharmProjects/CrystalRose/CrystalRoseGUI.py", line 22, in __init__
self.remove_employee_from_list.Bind(wx.EVT_BUTTON, self.remove_employee_from_list) File "C:\Program Files (x86)\Python36-32\lib\site-packages\wx\core.py", line 1339, in
_EvtHandler_Bind
assert callable(handler) or handler is None AssertionError
Upvotes: 0
Views: 901
Reputation: 911
You're declaring remove_employee_from_list
as a method and also setting it as a button in __init__
. The button and the method that fires aren't the same thing and need different names. Try this:
import wx
class MyDialog(wx.Frame):
def __init__(self, parent, title):
self.no_resize = wx.DEFAULT_FRAME_STYLE & ~ (wx.RESIZE_BORDER | wx.MAXIMIZE_BOX)
wx.Frame.__init__(self, parent, title=title, size=(500, 450),style = self.no_resize)
self.panel = wx.Panel(self, size=(250, 270))
self.add_employee_to_list = wx.Button(self.panel, label="Add Employee", pos=(250,50), size=(115,25))
self.add_employee_to_list.Bind(wx.EVT_BUTTON, self.add_employee_to_box)
#Button that produces error on binding
self.remove_employee_from_list = wx.Button(self.panel, label="Remove Employee",pos= (250,80), size=(115,25))
self.remove_employee_from_list.Bind(wx.EVT_BUTTON, self.remove_employee_from_box)
def remove_employee_from_box(self, event):
pass
def add_employee_to_box(self, event):
pass
app = wx.App(False)
frame = MyDialog(None, "Crystal Rose")
frame.Show()
app.MainLoop()
Upvotes: 1