GT-Grid 的 feature 列表 (包含尚未实现,但将会实现的feature)

本文列举了一个名为GT-Grid的列表组件所需具备的各种特性,包括滚动条优化、自定义表头、数据导出、编辑功能、统计计算等,并邀请读者参与讨论和完善。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天整理了一下 列表组件应具备的 特性列表,这些也是GT-Grid努力要实现的特性.

其中有些可能并不是很有用处,也可能有些很有用处的特性没有被包含,
欢迎大家补充和讨论,谢谢了 :)
==============================
列表内部滚动条(固定表头,固定工具栏等)

自定义复杂表头

可方便的为工具栏添加自定义按钮(或链接).

页导航,页大小切换

可手动调节列宽

可动态控制列的显示和隐藏

可手动调节列的相对位置(通过鼠标拖拽)

按列排序 (支持当前页 和全部数据,支持复合排序)

按列筛选 (支持当前页 和全部数据,支持复合筛选)

按列编组 (两种方式:1 合并编组列,2 隐藏编组列,增加分隔行)

按列锁定 (锁定的列将在横坐标方向固定不动)

支持行选择 (单选 多选)

可手动调节行的相对位置(通过鼠标拖拽)

可调节列表的宽度和高度

数据导出, 打印 (支持当前页 和全部数据,导出支持xls,csv,pdf格式)

自定义单元格内容展现方式

自定义列行为 行行为 单元格行为

附加列(也称作伪列,指在页面展现时才生成的数据列)

附加行(每行数据可以指定附加的信息 放在该行下面的隐藏行内,可通过操作来使其展现或隐藏)

可编辑列表(CRUD操作,支持多种编辑模式,支持批量增加,支持按模板增加 ),并且能够得到保存成功或失败的反馈,对数据的编辑在保存前可以撤销.

统计(行 列 求和 求平均值 自定义公式,同时要支持附加列,支持编辑后的实时统计,支持编组后的按组统计,支持客户端统计,支持服务端统计)

支持同一页面显示多个grid,并且可以定制彼此之间的关联关系

支持键盘操作(为常用功能提供键盘按键支持)

换肤(改变列表的风格样式)

支持当前页面懒加载,类似rico、dorado那种,随着滚动条向下滚动,逐步生成表格(适用于单页大数据量)

支持页面数据缓存 (可在刚刚访问的页面和当前页面间快速切换)

预加载 ( 在浏览当前页面时,利用ajax请求,将下一页数据提前载入,减少翻页时的等待时间)
def get_target(self, l, targets, anchors, in_h, in_w): #-----------------------------------------------------# # 计算一共有多少张图片 #-----------------------------------------------------# bs = len(targets) #-----------------------------------------------------# # 用于选取哪些先验框不包含物体 # bs, 3, 20, 20 #-----------------------------------------------------# noobj_mask = torch.ones(bs, len(self.anchors_mask[l]), in_h, in_w, requires_grad = False) #-----------------------------------------------------# # 帮助找到每一个先验框最对应的真实框 #-----------------------------------------------------# box_best_ratio = torch.zeros(bs, len(self.anchors_mask[l]), in_h, in_w, requires_grad = False) #-----------------------------------------------------# # batch_size, 3, 20, 20, 5 + num_classes #-----------------------------------------------------# y_true = torch.zeros(bs, len(self.anchors_mask[l]), in_h, in_w, self.bbox_attrs, requires_grad = False) for b in range(bs): if len(targets[b])==0: continue batch_target = torch.zeros_like(targets[b]) #-------------------------------------------------------# # 计算出正样本在特征层上的中心点 # 获得真实框相对于特征层的大小 #-------------------------------------------------------# batch_target[:, [0,2]] = targets[b][:, [0,2]] * in_w batch_target[:, [1,3]] = targets[b][:, [1,3]] * in_h batch_target[:, 4] = targets[b][:, 4] batch_target = batch_target.cpu() #-----------------------------------------------------------------------------# # batch_target : num_true_box, 5 # batch_target[:, 2:4] : num_true_box, 2 # torch.unsqueeze(batch_target[:, 2:4], 1) : num_true_box, 1, 2 # anchors : 9, 2 # torch.unsqueeze(torch.FloatTensor(anchors), 0) : 1, 9, 2 # ratios_of_gt_anchors : num_true_box, 9, 2 # ratios_of_anchors_gt : num_true_box, 9, 2 # # ratios : num_true_box, 9, 4 # max_ratios : num_true_box, 9 # max_ratios每一个真实框和每一个先验框的最大宽高比! #------------------------------------------------------------------------------# ratios_of_gt_anchors = torch.unsqueeze(batch_target[:, 2:4], 1) / torch.unsqueeze(torch.FloatTensor(anchors), 0) ratios_of_anchors_gt = torch.unsqueeze(torch.FloatTensor(anchors), 0) / torch.unsqueeze(batch_target[:, 2:4], 1) ratios = torch.cat([ratios_of_gt_anchors, ratios_of_anchors_gt], dim = -1) max_ratios, _ = torch.max(ratios, dim = -1) for t, ratio in enumerate(max_ratios): #-------------------------------------------------------# # ratio : 9 #-------------------------------------------------------# over_threshold = ratio < self.threshold over_threshold[torch.argmin(ratio)] = True for k, mask in enumerate(self.anchors_mask[l]): if not over_threshold[mask]: continue #----------------------------------------# # 获得真实框属于哪个网格点 # x 1.25 =&gt; 1 # y 3.75 =&gt; 3 #----------------------------------------# i = torch.floor(batch_target[t, 0]).long() j = torch.floor(batch_target[t, 1]).long() offsets = self.get_near_points(batch_target[t, 0], batch_target[t, 1], i, j) for offset in offsets: local_i = i + offset[0] local_j = j + offset[1] if local_i &gt;= in_w or local_i < 0 or local_j &gt;= in_h or local_j < 0: continue if box_best_ratio[b, k, local_j, local_i] != 0: if box_best_ratio[b, k, local_j, local_i] &gt; ratio[mask]: y_true[b, k, local_j, local_i, :] = 0 else: continue #----------------------------------------# # 取出真实框的种类 #----------------------------------------# c = batch_target[t, 4].long() #----------------------------------------# # noobj_mask代表无目标的特征点 #----------------------------------------# noobj_mask[b, k, local_j, local_i] = 0 #----------------------------------------# # tx、ty代表中心调整参数的真实值 #----------------------------------------# y_true[b, k, local_j, local_i, 0] = batch_target[t, 0] y_true[b, k, local_j, local_i, 1] = batch_target[t, 1] y_true[b, k, local_j, local_i, 2] = batch_target[t, 2] y_true[b, k, local_j, local_i, 3] = batch_target[t, 3] y_true[b, k, local_j, local_i, 4] = 1 y_true[b, k, local_j, local_i, c + 5] = 1 #----------------------------------------# # 获得当前先验框最好的比例 #----------------------------------------# box_best_ratio[b, k, local_j, local_i] = ratio[mask] return y_true, noobj_mask代码解析
最新发布
07-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值