尝试在更改网格单元格中的 CellEditor 时触发事件

Trying to trigger event when a CellEditor in a Grid cell is changed

我有一个 table,它在使用 wxFormBuilder 创建的 window 中显示作业详细信息。 table 有一个标记为 Finance 的财务列,在每一行(记录)中包含一个组合框(SetCellEditor)。

组合框保存数组中的值

finance_options = ['Not Started', 'Preparing Day Sheets', 'Day Sheets Sent', 'PO Received', 'Partially Invoiced', 'Fully Invoiced']

当我更改此下拉列表时,我想调用一个名为 onFinanceChanged 的​​方法。

我通常会使用 wxFormBuilder 中的选项将方法分配给 cellChanged 事件,但如果 table 中的任何单元格发生更改,就会触发。

    def populate_job_grid(self, jobs):
        finance_options = ['Not Started', 'Preparing Day Sheets', 'Day Sheets Sent', 'PO Received',
                           'Partially Invoiced', 'Fully Invoiced']
        for i in range(0, len(jobs)):
            self.jobNumberGrid.InsertRows(0)
        row = 0
        for job in jobs:
            year = arrow.get(job.created_at).date()
            job_year = str(year.year)[2:]
            self.jobNumberGrid.SetCellValue(row, 0, str(job.job_no))
            self.jobNumberGrid.SetCellValue(row, 1, job_year)
            self.jobNumberGrid.SetCellValue(row, 2, str(job.site))
            self.jobNumberGrid.SetCellValue(row, 3, str(job.client.name))
            self.jobNumberGrid.SetCellValue(row, 4, str(job.job_description))
            self.jobNumberGrid.SetCellValue(row, 5, str(job.user.name))
            created = arrow.get(job.created_at).date()
            created_at = datetime.datetime.strptime(str(created), "%Y-%m-%d").strftime("%d-%m-%Y")
            self.jobNumberGrid.SetCellValue(row, 6, created_at)
            self.jobNumberGrid.SetCellValue(row, 7, job.finance)
            finance = wx.grid.GridCellChoiceEditor(finance_options, allowOthers=True)
            self.jobNumberGrid.SetCellEditor(row, 7, finance).Bind(self.jobNumberGrid.EVT_GRID_CELL_CHANGED,
                                                                   self.onFinanceChange)

            row = row + 1

如您所见,我尝试将 EVT_GRID_CELL_CHANGED 绑定到单元格,但这会导致 "AttributeError: 'NoneType' object has no attribute 'Bind'" 错误。

有什么想法吗?

谢谢保罗。

SetCellEditor 没有 return 值,因此没有任何东西可以用来调用 Bind。相反,您应该使用 self.jobNumberGrid 来绑定事件处理程序。任何单元格值更改都会调用它,但您可以获取已更改单元格的行、列,然后忽略它,或者根据事件来自哪一列调用 self.onFinanceChange