변수에 따라 다양한 수의 텍스트 상자 만들기JMPer님께,
새 창에서 텍스트 상자를 여러 개 만들려고 하는데 텍스트 상자 개수가 변수입니다.
그런 다음 슬라이더 상자가 있고 막대를 움직일 때 방금 만든 텍스트 상자에 대한 텍스트를 설정해야 합니다.
for 루프가 해결책이 되어야 할 것 같지만 완료할 수 없습니다.
colname = {"Name", "Height", "Weight"}; //it's a list of column names from previous code, number of items is not fixed
min = 0;
max = 10;
Value = 0;
eval(evalexpr(
nw = New Window( "parameter setting",
Panel Box( "parameter setting",
tb1 = text box(char(colname[1]) || ": " || char(:expr(nameexpr(ascolumn(colname[1])))[1])),
tb2 = text box(char(colname[2]) || ": " || char(:expr(nameexpr(ascolumn(colname[2])))[1])),
tb3 = text box(char(colname[3]) || ": " || char(:expr(nameexpr(ascolumn(colname[3])))[1])),
//.
//.
//.
//.
//.
//.etc
//lines for tb should determined by N itmes(colname)
Valuetb = Text Box( "Value: " || Char( Value )),
sb = Slider Box(
min, max, Value,
Valuetb << set text( "Value: " || Char( Value ));
:Parameter A << set each value(Value);
tb1 << set text(char(colname[1]) || ": " || char(:expr(nameexpr(ascolumn(colname[1])))[1]));
tb2 << set text(char(colname[2]) || ": " || char(:expr(nameexpr(ascolumn(colname[2])))[1]));
tb3 << set text(char(colname[3]) || ": " || char(:expr(nameexpr(ascolumn(colname[3])))[1]))
) // when I move the slider box, values of all columns in colname will be changed, so I do set text for all columns in colname
)
)
))
자동화 및 스크립팅Re: 변수에 따라 텍스트 상자 수를 다르게 만듭니다.고마워요. 알았어요.
또한 원래의 long long 함수를 대체하기 위해 eval insert를 사용한다는 것도 배웠습니다.
항상 친절한 나눔에 감사드립니다
Re: 변수에 따라 텍스트 상자 수를 다르게 만듭니다.이는 스크립트에 추가적인(매우 쉬운) 분리 계층을 제공하며 거대한 새 창보다 이러한 작은 코드 블록을 수정하는 것이 더 쉽습니다(아직 큰 새 창은 없지만 금방 매우 길어질 수 있습니다). 때때로 참조를 "잃음"으로 인해 일부 문제가 발생할 수 있지만 여전히 그만한 가치가 있다고 생각합니다.
Re: 변수에 따라 텍스트 상자 수를 다르게 만듭니다.Jarmo에게 감사드립니다. 이것이 바로 나에게 필요한 것입니다.
슬라이더 상자 외부로 슬라이더 상자 스크립트를 이동하는 것을 선호하는 이유가 무엇인지 물어봐도 될까요?
Re: 변수에 따라 텍스트 상자 수를 다르게 만듭니다.목록에 대한 참조를 저장하고 새 창 외부의 텍스트 상자에 대한 "수집기"를 구축하며 슬라이더 상자 외부의 슬라이더 상자에 대한 스크립트를 별도의 함수/표현식으로 이동합니다.
이것이 당신에게 필요한 것입니까?
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
colnames = {"name", "height", "weight"}; //it's a list of column names from previous code, number of items is not fixed
min = 0;
max = 10;
Value = 0;
lub = Lineup Box(N Col(1));
tbs = {};
For Each({colname}, colnames,
text_to_add = Eval Insert("^colname^: ^dt[1, colname]^");
lub << Append(tb = Text Box(text_to_add));
Insert into(tbs, tb);
);
If(N Items(tbs) != N Items(colnames),
Throw("!Fatal error");
);
update_tbs = Expr(
For Each({colname, idx}, colnames,
text_to_set = Eval Insert("^colname^: ^dt[1, colname]^");
tbs[idx] << Set Text(text_to_set);
);
);
nw = New Window( "parameter setting",
Panel Box( "parameter setting",
lub,
Valuetb = Text Box( "Value: " || Char( Value )),
sb = Slider Box(
min, max, Value,
Valuetb << set text( "Value: " || Char( Value ));
:age << set each value(Value);
update_tbs;
)
);
);Re: 변수에 따라 텍스트 상자 수를 다르게 만듭니다.Jim에게 감사합니다. 하지만 이것은 제가 필요한 것이 아닙니다. (colname[1]) [1]을 값으로 바꿀 필요가 없습니다.
내가 필요한 것은 colname 목록에 더 많은 항목이 있는 경우(예: 5) 스크립트가 다음을 수행할 수 있다는 것입니다.
tb1 =
tb2 =
tb3=
tb4 =
tb5=
항목이 10개이면 tb1 ~ tb10을 수행합니다.
Re: 변수에 따라 텍스트 상자 수를 다르게 만듭니다.이것이 당신이 원하는 것인지 잘 모르겠습니다. 스크립트를 수정하면 슬라이더를 움직일 때 표시 창의 텍스트 상자 값이 변경됩니다.
names default to here(1);
dt = open("$SAMPLE_DATA/big class.jmp");
colname = {"Name", "Height", "Weight"}; //it's a list of column names from previous code, number of items is not fixed
min = 1;
max = 10;
Value = 1;
Eval(
Eval Expr(
nw = New Window( "parameter setting",
Panel Box( "parameter setting",
tb1 = Text Box(
Char( colname[1] ) || ": " || Char( :expr( Name Expr( As Column( colname[1] ) ) )[1] )
),
tb2 = Text Box(
Char( colname[2] ) || ": " || Char( :expr( Name Expr( As Column( colname[2] ) ) )[1] )
),
tb3 = Text Box(
Char( colname[3] ) || ": " || Char( :expr( Name Expr( As Column( colname[3] ) ) )[1] )
),
//.
//.
//.
//.
//.
//.etc
//lines for tb should determined by N itmes(colname)
Valuetb = Text Box( "Value: " || Char( Value ) ),
sb = Slider Box(
min,
max,
Value,
Valuetb << set text( "Value: " || Char( Value ) );
//:Parameter A << set each value( Value );
tb1 << set text(
Char( colname[1] ) || ": " ||char(column( colname[1] )[value] ));
tb2 << set text(
Char( colname[2] ) || ": " ||char(column( colname[2] )[value] ));
tb3 << set text(
Char( colname[3] ) || ": " ||char(column( colname[3] )[value] ));
) // when I move the slider box, values of all columns in colname will be changed, so I do set text for all columns in colname
)
)
)
);