ComboBox의 선택이 변경되면 Associate Array로 DisplayBox의 내용을 업데이트합니까?[버전: JMP Pro 16.2.0]
안녕하세요,
다음과 같은 스크립트에 대한 인터페이스 창을 만들려고 합니다.
- 현재 데이터 테이블을 Python으로 보내고 매개변수에 대한 사용자 입력 값을 가져옵니다.
- Python에서 몇 가지 작업을 수행합니다.
- Python DataFrame의 일부 열을 현재 데이터 테이블에 추가합니다.
인터페이스에 대해 염두에 둔 레이아웃을 첨부 파일로 추가했습니다.
사용자에게 입력하라는 메시지를 표시하는 매개변수의 내용을 업데이트하는 방법을 아직 찾지 못했습니다. 에 따라 위의 ComboBox에서 사용자가 선택한 옵션.
코드를 더 쉽게 유지 관리하고 코드 중복을 방지하기 위해(ComboBox에 많은 옵션을 포함할 계획이기 때문에 중요함) 매개 변수와 해당 기본값을 스크립트 상단의 연관 배열에 저장하고 싶습니다. 각 옵션에 대한 매개변수의 수는 다를 수 있습니다.
이 추가 기능의 코드를 살펴보았습니다( https://community.jmp.com/t5/JMP-Add-Ins/Data-visualization-with-t-SNE-and-UMAP/ta-p/177969 ) 하지만 불행하게도 표시할 필드와 관련 숫자 편집 상자 값은 하드코딩되어 있습니다.
당신의 도움을 주셔서 감사합니다.
친애하는,
프랑수아
#엠마누엘_로뮤
#제임스_바크
AA =
Associative Array(
{
{"Choice_A",
[
"param_1" => 2,
"param 2" => 15,
"param_4" => .
]
},
{"Choice_B",
[
"param 1" => 2,
"param 3" => 10,
"param 4" => .
]
},
{"Choice_C",
[
"param 1" => 3,
"param 4" => .,
"param 6" => 23,
"param 7" => 123
]
}
}
);

데이터 접근Re: ComboBox 선택이 변경되면 연관 배열로 DisplayBox의 내용을 업데이트합니까?이 모든 것이 다른 게시물에서 아직 답변되었는지 추적하지 않았지만 두 가지 생각이 있습니다.
- 매개변수를 순서대로 유지하려면 다음과 같이 연관 배열 내에서 배열을 사용할 수 있습니다.
AA = Associative Array( {
{"Choice_A", [
//Array of here to maintain order<BR /> ["name" => "param_1", "default" => 2],
["name" => "param_2", "default" => 15],
["name" => "param_3", "default" => .],
]}
} )
- 텍스트 상자와 숫자 편집 상자 너비를 지정하여 모든 항목을 일직선으로 만들거나 테이블을 대신 사용할 수 있습니다. 숫자 열 편집 상자 .
Re: ComboBox 선택이 변경되면 연관 배열로 DisplayBox의 내용을 업데이트합니까?연관 영역에는 순서가 없습니다. 당신은 하나를 부과할 수 없습니다. JMP는 << Get Keys와 같은 메시지로 내용을 검토할 때 편의상 결과를 정렬합니다.
Names Default to Here( 1 );
// load an associative array in order of C, B, A
aa = Associative Array();
aa["Choice_C"] = ["param 1" => 3, "param 4" => ., "param 6" => 23, "param 7" => 123];
aa["Choice_B"] = ["param 1" => 2, "param 3" => 10, "param 4" => .];
aa["Choice_A"] = ["param_1" => 2, "param 2" => 15, "param_4" => .];
// examine associative array as a whole (JMP orders output, not content, alphanumerically)
Show(
aa << Get Keys,
aa << Get Values,
aa
);
// examine associative array one entry at a time
i = aa << First;
While( Not( Is Empty( i ) ),
Show( aa[i] );
i = aa << Next( i );
);
Re: ComboBox 선택이 변경되면 연관 배열로 DisplayBox의 내용을 업데이트합니까?아래와 같이 대화 상자를 모달로 만들 수 있습니다.
호출 기능을 만들려면 창을 표시하는 데 사용되는 코드와 분리될 수 있는 코드의 다른 부분에서 AA를 초기화하여 창이 열릴 때마다 AA가 다시 초기화되는 것을 방지해야 합니다.
확인 버튼을 누를 때마다 새 값을 적절한 AA에 저장하는 것 외에도 전역(또는 바람직하게는 범위가 지정된) 변수에 설정을 저장하고 이러한 변수의 값을 사용하여 다음에 "리콜"을 누를 때 대화 상자가 나타납니다.
Names Default To Here( 1 );
AAopt1 = Associative Array( Words( "p1,p2,p3", "," ), {1, 2, 3} );
AAopt2 = Associative Array( Words( "p1,p4", "," ), {1, 10} );
AAopt3 = Associative Array( Words( "p2,p5,p6,p7", "," ), {2, 6, 12, 20} );
MainAA = Associative Array( Words( "option1,option2,option3", "," ), Eval List( {AAopt1, AAopt2, AAopt3} ) );
nw = New Window( "xx", <<MODAL></MODAL>Re: ComboBox 선택이 변경되면 연관 배열로 DisplayBox의 내용을 업데이트합니까?안녕 브래디,
신속한 답변에 감사드립니다.
나는 당신의 스크립트를 면밀히 살펴보고 실험하고 일부 업데이트했습니다.
괜찮으시다면 여전히 몇 가지 질문/설명이 있습니다.
- 기본 AA를 여러 AA로 분할, 각 옵션당 하나씩은 괜찮습니다.
- 창이 모달이 되도록 스크립트를 조정할 수 있습니까?
창 인터페이스를 고정하고 사용자가 "확인"을 클릭하면 즉시 닫는 것을 선호합니다. - 작동하는 "호출" 버튼 상자를 이 인터페이스에 쉽게 추가할 수 있습니까?
- 마지막으로 내가 하려는 일을 설명하기 위해 업데이트된 스크립트에 몇 가지 설명을 추가했습니다.
도움을 주셔서 다시 한 번 감사드립니다.
건배,
프랑수아
Re: ComboBox 선택이 변경되면 연관 배열로 DisplayBox의 내용을 업데이트합니까?안녕 @ih ,
신속한 답변에 감사드립니다.
창 변수가 있는 스크립트를 자세히 살펴보았습니다.
나는 그것을 가지고 놀았고 그것에 약간의 업데이트를 만들었습니다.
괜찮으시다면 여전히 몇 가지 질문/설명이 있습니다.
- 한 가지 문제는 입력할 매개변수의 순서가 연관 배열에 넣은 순서를 따르지 않는다는 것입니다.
나는 그것들을 AA 정의에 있는 것과 같은 순서로 갖고 싶습니다. 가능합니까? - 커플(텍스트 상자, 숫자 편집 상자)의 레이아웃을 개선하여 두 개의 분리된 열에 정렬할 수 있습니까?
또한 지금까지 성공하지 못한 채 V 목록 상자(window:vlbParam)를 테이블 상자로 교체하려고 했습니다. - 작동하는 "호출" 버튼 상자를 이 인터페이스에 쉽게 추가할 수 있습니까?
- 마지막으로 내가 하려는 일을 설명하기 위해 업데이트된 스크립트에 몇 가지 설명을 추가했습니다.
다시 한 번 감사드립니다!
문안 인사,
프랑수아
Re: ComboBox 선택이 변경되면 연관 배열로 DisplayBox의 내용을 업데이트합니까?안녕,
이를 수행하는 비교적 효율적인 방법 중 하나는 다음과 같습니다.
1) 각 옵션에 대해 하나의 AA인 AA에서 매개변수/값 세트를 정의합니다.
2) 이러한 AA를 "기본" AA에 배치합니다.
3) 콤보박스를 사용하여 "메인" AA 내에서 선택합니다.
4) 모든 선택 항목에 대해 관련 옵션 AA의 항목에 해당하는 행이 있는 단일 테이블 상자(현재 항목이 있는 경우 삭제 후)를 표시합니다.
5) "이동" 버튼을 누르면 항목이 무엇이든 관련 "옵션" AA를 쉽게 업데이트하고 진행할 수 있습니다. 여기에서 mainAA는 로그에 기록되므로 누를 때마다 내용을 볼 수 있습니다.
건배,
브래디
Names Default To Here( 1 );
AAopt1 = Associative Array( Words( "p1,p2,p3", "," ), {1, 2, 3} );
AAopt2 = Associative Array( Words( "p1,p4", "," ), {1, 10} );
AAopt3 = Associative Array( Words( "p2,p5,p6,p7", "," ), {2, 6, 12, 20} );
MainAA = Associative Array( Words( "option1,option2,option3", "," ), Eval List( {AAopt1, AAopt2, AAopt3} ) );
nw = New Window( "xx",
V List Box(
cb = Combo Box(
mainAA << get keys,
Try( TB << delete );
tableVLB << append(
tb = Table Box(
TbSCB = String Col Box( "parameter", mainAA[cb << get selected] << Get Keys ),
TbNCEB = Number Col Edit Box( "value", mainAA[cb << get selected] << Get Values )
)
);
),
tableVLB = V List Box(),
bb = Button Box( "Go",
mainAA[cb << get selected] = Associative Array( TbSCB << get, TbNCEB << get );
Show( mainAA );
)
)
);
eval(cb << get function);

Re: ComboBox 선택이 변경되면 연관 배열로 DisplayBox의 내용을 업데이트합니까?안녕 @fch_jmp ,
귀하의 질문을 올바르게 이해하면 이것이 귀하가 찾고있는 것을 수행한다고 생각합니다.
Names default to here(1);
AA = Associative Array( {
{"Choice_A", ["param_1" => 2, "param 2" => 15, "param_4" => .]},
{"Choice_B", ["param 1" => 2, "param 3" => 10, "param 4" => .]},
{"Choice_C", ["param 1" => 3, "param 4" => ., "param 6" => 23, "param 7" => 123]}
} );
//return a label and
parambox = function({name,val},
h list box(
text box(name),
nebParam[name] = number edit box(val)
)
);
updateparams = function({},
while( !is empty( vlbParams << child ), (vlbParams << child) << delete );
nebParam = Associative Array();
for each({{param, value}, i}, AA[cb << GetSelected()],
vlbParams << append(
parambox(param, value)
);
)
);
win = new window("cb test",
cb = Combo Box(
AA << Get Keys,
updateparams();
),
vlbParams = v list box(),
button box("Write to the log",
for each({{param, value}}, nebParam, print(param || ": " || char(value << get)));
)
);
cb << set(1);
updateparams();
이 방법을 사용하면 여러 창이 서로 충돌할 수 있으므로 실제로 창 변수를 사용합니다. 이것을 한 번 실행하고 매개변수 배열을 변경한 다음 다시 실행하고 두 창이 어떻게 독립적으로 작동하는지 확인하십시오.
더보기...