背景:使用wxpython搭建单号管理系统,使用grid控件实现单号信息的显示,单号管理系统又称为提单系统,为提单系统增加单号撤销功能。

单号撤销功能的功能说明如下:

功能限制:只能撤销你本人创建的单号,并且该单号处于刚创建还没下发给下一步执行人的状态,即单号的流程状态显示“编辑中”,才可以撤销该单号。

功能操作:选中单号显示表格的某一行,同时按下电脑键盘的“Ctrl”键并且单击鼠标右键,即可实现从提单系统中删除该单号数据的功能。

操作效果:操作完成后等待几秒钟,会弹出如下确认信息提示框,提示用户单号已删除,提醒用户点击“刷新”按钮,同步提单系统最新的数据。

wxpython表格用法_提示框

选择grid的wx.grid.EVT_GRID_LABEL_RIGHT_CLICK当用户在行或列的标签区域敲击鼠标右键时触发该事件。

# 当用户在行或列的标签区域敲击鼠标右键时触发该事件
        self.Bind(wx.grid.EVT_GRID_LABEL_RIGHT_CLICK, self.cancel_id_operation_1, self.m_grid1)

wxpython表格用法_提示框_02

wx.grid.GridEvent方法选择ControlDown():当事件被触发时,如果control键被按下了,则返回True。按下电脑键盘的“Ctrl”键即为control键被按下事件触发。

def cancel_id_operation_1(self, event):
        # 只能控制删除一行的数据
        row = event.GetRow()
        if event.ControlDown():
            # 当事件被触发时,如果control键被按下了,则返回True。
            # 判断是否满足删除条件,项目状态或者流程状态是编辑中的ID才能删除
            # 判断身份
            # 获取当前的执行权限
            user = read_ini("Frame")["user"]
            create_person_idx = bill_view_list.index("创建人")
            create_person = self.m_grid1.GetCellValue(row, create_person_idx)
            if user == create_person:
                project_idx = bill_view_list.index("项目状态")
                flow_idx = bill_view_list.index("流程状态")
                if (self.m_grid1.GetCellValue(row, project_idx) == "编辑中") or \
                        (self.m_grid1.GetCellValue(row, flow_idx) == "编辑中"):
                    id_idx = bill_view_list.index("单号")
                    id = self.m_grid1.GetCellValue(row, id_idx)
                    self.cancel_id(id)
                else:
                    toastone = wx.MessageDialog(None, "项目状态或者流程状态处于'编辑中'的单号信息才能删除", "错误信息提示",
                                                wx.YES_DEFAULT | wx.ICON_QUESTION)
                    if toastone.ShowModal() == wx.ID_YES:  # 如果点击了提示框的确定按钮
                        toastone.Destroy()  # 则关闭提示框
            else:
                toastone = wx.MessageDialog(None, "禁止删除非本人创建的单号!!!", "错误信息提示",
                                            wx.YES_DEFAULT | wx.ICON_QUESTION)
                if toastone.ShowModal() == wx.ID_YES:  # 如果点击了提示框的确定按钮
                    toastone.Destroy()  # 则关闭提示框