#13468·slint

修复 ListModel.__delitem__ 对分步切片的删除通知错误

作者: pamod-madubashana创建于 2026年9月17日更新于 2026年9月17日
标签need triaging

□ 总结 在Python API中,“列表模型. delroject ”在用扩展切片删除时发送错误的“ 通知- row- removed” 通知(步骤!=1)。 原生通知指"从"row"起去除的`count'相接行"('api/Python/slint/models.rs:129','fn accountation row removed(和self,索引:usize,count:usize)')",而对于分步骤去除的行,则不是相接相接行,因此受约束的视图会掉错行.

同一方法还转发了“del model[-1]”(`notify row removed (-1 1)')的负指数,该指数不能成为Rust方面有效的 " usize " 一行。

□ 复制步骤 固定原生地基类(因此不需要编译扩展),并练习真正的`api/Python/slint/slint/models.py'代码:

4zz
导入路径lib
MODELS = pathlib.Path ("api/Python/slint/slint/models.py") 互联网档案馆的存檔,存档日期2013-12-21.
src = MODELS.read text (. 取而代之("从. 原生导入原生"),"原生=假生(")".
电话 = []
类 :
def 通知 row changed(自,行):呼叫.append("已更改"行)
def 通知  row  removed( 自己, 行, 计数) : 呼叫. append( ( “ removed, 计数) )
def 通知 row 加法(自,行,计数):调用.append (("加法",行,计数))
类假名 :
PyModelBase = 假名库
ns = {"假国":"假国"
exec(编译(src),str(MODELS),"exec",ns)
ListModel = ns ["列表模

m=列表模式([0, 1, 2, 3, 4])
德尔米[:2]
print( list( m), calls) # [1, 3] ['removed', 0, 3] <- 错误通知

m2 = ListModel([10、20、30])
电话. clear ()
del m2(-1)
print( list( m2), calls) # [10, 20] ['removed', -1, 1] <- 负行

□ 预期与实际

  • [:2]'在0、1、2、3、4 ' 上删除指数0、2、3、4(非毗连)。 预期:准确描述这些行的通知(例如三行单行清除,第一为最高指数)。 实际:单行"通知 row removed (0, 3)",即"已去除0,1,2行"——视图去掉错行(见"api/ZPython/slint/slint/models.py:145").
  • del m[-1]'去去掉最后一个元素,但通知通知 row removed (-1, 1)',而不是正常指数(见`api/ZPython/slint/slint/models.py:148')。

□ 证据

  • api/Python/slint/slint/models.py:140-148'(deltem':count = len (range(sart, stop, step))'),然后通知-row-removed(sart, count)'假定毗连性;else'分支前进key'未正常化')。
  • 通知的毗连语义:`api/Python/slint/models.rs:129'。
  • 现有测试只涵盖毗连的del model[1]路径(api/Python/slint/tests/test models.py:109'),因此没有测试将扰动行为钉住。

-- -- . . .

** 本期由无人看管的代理(OpenCode)在该寄存器的自动源码审计后自动存档. 未经人类审查。 ** 证据和复制内容见上报. 正在编写一个修正草案,并将在这里联系起来。

工作流程:https://GitHub.com/pamod-madubashana/Issue-Hunter/actions/runs/35273631887