Tcl Tk 在 Scilab 中显示图像

Tcl Tk to show images in Scilab

我想使用 Tcl/Tk 中制作的 GUI 在 Scilab 中显示图像和视频。

Scilab 支持 Tcl/Tk :- https://help.scilab.org/docs/6.0.0/en_US/section_a10b99d9dda4c3d65d29c2a48e58fd88.html

我制作了一个 tcl 脚本,当从终端 运行 时显示图像。

image create photo img -file <filepath>
pack [label .mylabel]
.mylabel configure -image img

然而,当我在 scilab 中写入以下 .sci 文件时,它执行成功但没有显示图像 window。

function sampletry()
    TCL_EvalFile(<path_to_tcl_file>);
endfunction

我知道代码执行成功了,因为当我在 scilab 中再次执行相同的函数时,我收到一条错误消息,指出标签 .mylabel 已经存在于父 window.

有什么方法可以使用这种方法或 Scilab 中的任何其他方法在 Scilab 中显示 images/videos 吗?我正在使用 OpenCV 读取图像,然后 return 通过列表中的 Scilab Api 将其返回给 Scilab。

问题是你没有从你的 Scilab 代码中为事件循环提供服务,如果没有它,来自 OS 的一连串消息实际上将 window 放在屏幕上永远不会通过和处理。假设您希望代码停止并等待查看完成,您只需将 Tcl/Tk 代码更改为:

image create photo img -file <filepath>
if {![winfo exists .mylabel]} {
    pack [label .mylabel]
}
.mylabel configure -image img
wm deiconify .
# Wait for the user to ask for the window to be closed
wm protocol . WM_DELETE_WINDOW {set done 1}
vwait done
# Process the close immediately
wm withdraw .
update

done 变量没有什么特别之处。我们只是在等待它在回调中被设置。我添加了一些额外的代码以允许您调用它两次(即有条件地创建小部件,确保显示 . 然后在最后隐藏它)。

如果您不想让所有内容都在同一个进程中,最简单的技术是 运行 您的 原始 脚本作为一个单独的程序,有效地做:

wish <path_to_tcl_file>

我不知道从 Scilab 做到这一点的最简单方法是什么。