Я не могу получить события кнопок (Save, Close) в следующем классе ButtonsPanel для запуска их обработчиков событий в классе AddModFormContractors.
Следующая команда:
pnlButtons = ButtonsPanel(parent=self.frm_pnl)
передает PANEL в качестве родителя для ButtonsPanel, и это приводит к сбою привязки во время выполнения, если я связываюсь с "parent.onClose". Попытка передать только «себя» вообще ничего не делает на кадре. Запуск его, как показано в коде ниже, вызывает исключение, что в onClose отсутствует второй аргумент (событие).
Как мне заставить это работать, пожалуйста?
class ButtonsPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
btnSizer = wx.BoxSizer(wx.HORIZONTAL)
okBtn = wx.Button(self, label="Save")
okBtn.Bind(wx.EVT_BUTTON, AddModFormContractors.onSaveRecord)
btnSizer.Add(okBtn, 0, wx.ALL, 5)
cancelBtn = wx.Button(self, label="Close")
cancelBtn.Bind(wx.EVT_BUTTON, AddModFormContractors.onClose)
btnSizer.Add(cancelBtn, 0, wx.ALL, 5)
self.SetSizer(btnSizer)
self.Layout()
class AddModFormContractors(wx.Dialog):
def __init__(self, targetObject, row=None, titlePrefix="Add", titleLabel="Record", addRecord=True):
wx.Dialog.__init__(self, None, title="{} {}".format(titlePrefix, titleLabel), size=(730, -1))
self.targetObject = targetObject
self.addRecord = addRecord
self.selectedRow = row
... DOING RECORD STUFF HERE ...
#Construct the form
self.frm_pnl = wx.Panel(self)
self.frm_pnl.BackgroundColour = (235, 230, 220) # BEIGE
font = wx.Font(12, wx.SWISS, wx.NORMAL, wx.BOLD)
lbl = wx.StaticText(self.frm_pnl, label="{} {}".format(titlePrefix, titleLabel))
lbl.SetFont(font)
pnlCompany = CompanyPanel(parent=self.frm_pnl, record=recordToUpdate)
pnlRecord = RecordPanel(parent=self.frm_pnl, record=recordToUpdate)
pnlButtons = ButtonsPanel(parent=self.frm_pnl)
self.frmPnl_vertSizer = wx.BoxSizer(wx.VERTICAL)
... BUILDING THE SIZER HERE ...
self.frmPnl_vertSizer.Layout()
self.frm_pnl.SetSizer(self.frmPnl_vertSizer)
wx.CallAfter(self.SetFrameSize)
def onClose(self, event):
print("Closing")
self.Destroy()
def onSaveRecord(self, event=None):
if self.Validate():
if self.addRecord:
dictRecordValues = getValuesFromForm(self, self.olv_dict)
forms_controller.insertRecord(self.targetObject, dictRecordValues)
else:
dictRecordValues = getValuesFromForm(self, self.olv_dict, False)
forms_controller.updateRecordById(self.targetObject, self.recordId, dictRecordValues)
# self.titleTxt.SetFocus()
self.Destroy()