2017-08-24 65 views
1

Scilab的版本是5.5.1。我見過一個問題人物手柄中的用戶數據屬性:Scilab:figure.user_data的元素大小不能更改

我定義中的用戶數據爲結構(見MWE在底部)

但是當我嘗試存儲變量來figure.user_data字段中,如果矢量大小已更改,則會引發錯誤(使用任何類型的矢量)

做到這一點user_data完美工作,因此解決方案可能是擦除figure.user_data值,然後定義新的用我的值結構化,然後用這個新值定義user_data。

但是,這並沒有解決最初的問題。

下面,與figure.user_data矢量大小問題的MWE,錯誤引發

// 
clc 
clear 
xdel(winsid()) 

strct = struct('int',0,'str','str','vstr',['a';'b']) 
old_strct = strct 

// changing vectors size in a struct works 
strct.int = [0,1,2] // ok 
strct.str = ['a';'b'] // ok 
strct.vstr =['b','c'] // ok 
strct.vstr =['a','b','c'] // ok 

f=figure('visible','off') 
f.user_data = old_strct // ok 
// but changing it inside the user_data property doesn't 
f.user_data.int = strct.int // see error below 
f.user_data.str = strct.str // error 
f.user_data.vstr = ['b';'c'] // ok as size is the same 
f.user_data.vstr =['a','b','c'] // error 

// we can still erase all the struct with a new one, though 
f.user_data = strct //ok but not efficient to delete all the field to change one 

    !--error 15 
Sub-matrix not well defined. 
at line  45 of function generic_i_h called by : 
at line  2 of function %s_i_h called by : 
f.user_data.int = strct.int // error 
at line  21 of exec file called by :  
exec('/net/jabba/home0/pp607946/brouillon.sce', -1) 

回答

0

這似乎是在Scilab的5.5.1的錯誤。我試圖在Windows 7上使用Scilab 6.0.0來重現它,它工作得很好。

當我使用舊版本(5.3.3)時,我發現有時設置圖形的屬性可能會非常棘手。然而,總是有效的是使用set()函數,而不是你正在使用的點運算符。不過,您需要一次性設置user_data的所有字段,正如您自己提到的那樣。要設置單個字段,請使用臨時變量或重新使用舊變量。

//all new fields 
set(f,'user_data',strct); 

//one field at a time 
old_strct.int = strct.int; set(f,'user_data',old_strct); 
old_strct.str = strct.str; set(f,'user_data',old_strct); 
old_strct.vstr = strct.vstr; set(f,'user_data',old_strct); 
+0

你說得對,他們修正了這個版本大於5.5.1的bug。在說到set的時候,手冊給出了: 「_這個例程可以用來修改圖形實體或GUI對象的指定屬性的值,在這種情況下,它相當於在句柄上使用點運算符。例如, set(h,「background」,5)相當於h.background = 5._「。這就是爲什麼我更喜歡這個點,它縮小了代碼。 – PTRK

+0

我知道它看起來更好,但它並不總是適合我。一旦我嘗試使用點運算符創建一個學校項目的圖形用戶界面,它有時會工作,而其他人則不會。我不得不在所有地方都使用set()來使所有的東西都正常工作。 – luispauloml

相關問題