35.4 GUI 工具函数

这些函数不实现 GUI 元素,但在开发实现 GUI 元素的程序时很有用。函数 uiwaituiresumewaitfor 仅适用于 qtfltk 工具包。

 
data = guidata (h)
guidata (h, data)

查询或设置用户自定义的 GUI 数据。

GUI 数据存储在图形句柄 h 中。如果 h 不是图形句柄,则使用其父图形进行存储。

data 必须是单个对象,这意味着它最好是数据容器(如元胞数组或结构体),以便能够轻松添加其他数据项。

另请参阅: getappdata, setappdata, get, set, getpref, setpref.

 
hdata = guihandles (h)
hdata = guihandles

返回与句柄 h 关联的图形的一系列对象句柄的结构体。

如果未指定句柄,则使用当前图形(由 gcf 返回)。

hdata 中每个条目的字段名取自图形对象的 "tag" 属性。如果标签为空,则不返回句柄。如果有多个图形对象具有相同的标签,则 hdata 中的条目将是句柄向量。guihandles 包括所有可能的句柄,包括那些 "HandleVisibility""off" 的句柄。

另请参阅: guidata, findobj, findall, allchild.

 
tf = have_window_system ()

如果窗口系统(X11、Windows 或 Apple OS X)可用则返回 true,否则返回 false。

另请参阅: isguirunning.

 
tf = isguirunning ()

如果 Octave 在 GUI 模式下运行则返回 true,否则返回 false。

另请参阅: have_window_system.

 
pos = getpixelposition (h)
pos = getpixelposition (h, rel_to_fig)

以像素为单位返回用户界面组件的位置。

第一个参数 h 必须是 uibuttongroup、uicontrol、uipanel、uitable、axes 或 figure 类型的有效图形对象的句柄。对于其他对象类型,函数返回零。

默认情况下,返回的位置是相对于对象的父对象的。如果第二个参数 rel_to_fig 在逻辑上为真,则位置是相对于封闭图形对象计算的。

返回值 pos 是一个包含值 [lower_left_X, lower_left_Y, width, height] 的 4 元素向量。

另请参阅: get.

 
fonts = listfonts ()
fonts = listfonts (h)

列出系统字体。

如果提供了图形对象的句柄 h,则还会在列表中包含该对象的 "FontName" 属性中的字体。

编程注意事项:在非原生使用 FontConfig 的系统上(除 Linux 外的所有系统),字体缓存在安装 Octave 时构建。安装新字体后,您需要手动运行 system ("fc-cache -fv")

另请参阅: uisetfont, text, axes, uicontrol.

 
movegui
movegui (h)
movegui (pos)
movegui (h, pos)
movegui (h, event)
movegui (h, event, pos)

将由图形句柄 h 指定的图形移动到屏幕上由 pos 定义的位置。

h 是图形句柄或图形对象的句柄。如果是后者,则使用其父图形。如果未指定,则在执行回调时将 h 设置为相关图形的句柄(gcbf),否则将其设置为当前图形的句柄(gcf)。

pos 可以是两个值的数值向量或字符串。如果 pos 是数值,则其形式必须为 [h, v],指定图形相对于屏幕的水平偏移和垂直偏移。正值表示屏幕左侧(或垂直分量的底部)与图形左侧(或底部)之间的偏移。负值表示屏幕右侧(或顶部)与图形右侧(或顶部)之间的偏移。

pos 作为字符串的可能值为:

north

屏幕顶部中央。

south

屏幕底部中央。

east

屏幕右侧中央。

west

屏幕左侧中央。

northeast

屏幕右上角。

northwest

屏幕左上角。

southeast

屏幕右下角。

southwest

屏幕左下角。

center

屏幕中心。

onscreen (default)

图形将被最小程度地移动,使其完全在屏幕上可见,并在屏幕两侧额外保留 30 像素的边距。如果未提供任何值,这是默认值。

event 包含将被忽略的事件数据。此构造便于从回调中调用 movegui。

 
openvar (name)

在图形变量编辑器中打开变量 name

 
uiwait
uiwait (h)
uiwait (h, timeout)

挂起程序执行,直到句柄为 h 的图形被删除或 uiresume 被调用。

如果未指定图形句柄,此函数将使用当前图形。如果图形句柄无效或没有当前图形,则此函数立即返回。

如果指定了 timeout,它定义了等待图形对象被删除或 uiresume 被调用的超时值(以秒为单位)。超时值必须至少为 1。如果指定了较小的值,则会发出警告,并使用超时值 1。如果指定了非整数值,则将其截断为 0。如果未指定 timeout,则程序执行将无限期挂起。

另请参阅: uiresume, waitfor.

 
uiresume (h)

恢复被 uiwait 暂停的程序执行。

句柄 h 必须与 uiwait 中指定的句柄相同。如果句柄无效,或者没有为句柄 h 的图形挂起的 uiwait 调用,则此函数不执行任何操作。

另请参阅: uiwait.

 
waitfor (h)
waitfor (h, prop)
waitfor (h, prop, value)
waitfor (…, "timeout", timeout)

挂起当前程序的执行,直到在图形句柄 h 上满足条件为止。

当程序暂停时,图形事件仍会正常处理,允许回调修改图形对象的状态。此函数是可重入的,可以从回调中调用,即使另一个 waitfor 调用正在顶层挂起。

在第一种形式中,程序执行被暂停,直到图形对象 h 被销毁。如果图形句柄无效,或者 h 是根图形句柄且未提供属性 prop,则函数立即返回。

在第二种形式中,执行被挂起,直到图形对象被销毁或名为 prop 的属性被修改。如果图形句柄无效或属性不存在,则函数立即返回。

在第三种形式中,执行被挂起,直到图形对象被销毁或名为 prop 的属性被设置为 value。函数 isequal 用于比较属性值。如果图形句柄无效、属性不存在或属性已设置为 value,则函数立即返回。

可以使用 "timeout" 属性指定可选的超时值。此超时值是等待条件满足的秒数。timeout 必须至少为 1。如果指定了较小的值,则会发出警告,并使用值 1。如果超时值不是整数,则将其向 0 截断。

要在名为 "timeout" 的属性上定义条件,请改用字符串 '\timeout'

在任何情况下,输入 CTRL-C 都会立即停止程序执行。

另请参阅: waitforbuttonpress, isequal.