Common Lisp LTK Scrolled-TreeView添加列及插入数据报错求助
解决LTK中Scrolled-TreeView初始化报错的问题
错误原因
你遇到的Invalid initialization argument: :columns错误,是因为LTK:SCROLLED-TREEVIEW类并不支持:columns初始化参数。:columns是普通LTK:TREEVIEW类的专属初始化参数,而Scrolled-TreeView只是给普通TreeView包装了滚动条的容器类,本身不负责配置表格列。
另外原代码中treeview-insert的调用也不完整,LTK的treeview-insert需要指定父节点(根节点用空字符串""表示)和插入位置(比如:end表示追加到末尾),否则无法正确插入数据。
修正后的代码方案
方案1:先创建配置好的TreeView,再用Scrolled-TreeView包裹
;; test.lisp (ql:quickload :ltk) (in-package :ltk) (with-ltk () (let* ((tree (make-instance 'treeview :columns '(0 1 2))) (scrolled-tree (make-instance 'scrolled-treeview :widget tree))) ; 设置列标题 (treeview-heading tree 0 "Name") (treeview-heading tree 1 "Math-mark") (treeview-heading tree 2 "Comp-mark") ; 插入学生成绩记录 (treeview-insert tree "" :end :values '("Simon Due" "78" "60")) (treeview-insert tree "" :end :values '("Kato Ronald" "80" "90")) ; 让滚动表格填充窗口并支持拉伸 (pack scrolled-tree :fill :both :expand t) ) )
方案2:直接操作Scrolled-TreeView内部的TreeView组件
;; test.lisp (ql:quickload :ltk) (in-package :ltk) (with-ltk () (let* ((scrolled-tree (make-instance 'scrolled-treeview))) (let ((tree (treeview scrolled-tree))) ; 为内部TreeView配置列 (configure tree :columns '(0 1 2)) ; 设置列标题 (treeview-heading tree 0 "Name") (treeview-heading tree 1 "Math-mark") (treeview-heading tree 2 "Comp-mark") ; 插入学生成绩记录 (treeview-insert tree "" :end :values '("Simon Due" "78" "60")) (treeview-insert tree "" :end :values '("Kato Ronald" "80" "90")) ) ; 让滚动表格填充窗口并支持拉伸 (pack scrolled-tree :fill :both :expand t) ) )
关键说明
Scrolled-TreeView的核心功能是提供滚动支持,表格的列配置、数据插入等操作都需要针对其内部的TreeView组件进行。treeview-insert的第一个参数是父节点ID,根节点用空字符串"";第二个参数指定插入位置,:end表示追加到现有记录的末尾。
内容的提问来源于stack exchange,提问作者Karugaba118
相关产品推荐
相关产品推荐

