2009-06-08 8 views
3

내 문제는 다음과 같습니다. MATLAB GUI가 있고 명령 창이 아닌 GUI에 표시되도록 실행하면 분석 결과를 얻고 싶습니다. 목록 상자를 사용하여 자동으로 목록 상자에 대해 만들어진 슬라이더 막대 때문에 결과를 표시하려고했지만 작동하지 않았습니다. 어떻게하면 정적 텍스트 상자를 사용하여 데이터를 표시 할 수 있습니까?MATLAB GUI에 분석 결과 표시

답변

1

저는 보통 그림과 텍스트를 사용합니다. 예 :

figure(gcf) 
text(offsetX1, offsetX1, ['result 1: ' num2str(result1)]) 
text(offsetX2, offsetX2, ['result 2: ' num2str(result2)]) 

요즘 나는 더 나은 방법이 확신하지만, 잘 나를 위해 수동으로 레이아웃 세부 사항을 설계에도 불구하고 작동합니다.

8

먼저 명령 창에 출력이 표시되지 않도록해야합니다. semicolon으로 줄 끝을 지정하고 DISP 함수를 사용하여 데이터를 표시하지 않고 FPRINTF 함수를 사용하여 표준 출력 (즉 명령 창)으로 데이터를 보내지 않도록하여이 작업을 수행 할 수 있습니다.

둘째, 표시하려는 "결과"의 종류를 결정하십시오. 숫자 값의 벡터 또는 행렬 인 경우 Azim's answer to your other question에서 제안한 것처럼 정적 텍스트 상자 대신 UITABLE 개체를 사용하고 최신 버전의 MATLAB이 있다고 가정합니다. 숫자 값, 문자 또는 문자열의 경우에는 정적 텍스트 상자를 사용하는 것이 좋습니다. 예를 들어이 옵션을

hList = uicontrol('Style','text','Position',[100 100 200 200]); 
set(hList,'String',{'Line 1'; 'Line 2'}); % Displays 2 lines, one string each 
vec = rand(3,1); % Column array of 3 random values 
set(hList,'String',num2str(vec)); % Displays 3 lines, one number per line 

, 당신은 아마 string operations와 함께 많은 일 종료됩니다.

참고 : 정적 텍스트 상자에서는 표시 할 수있는 것보다 많은 텍스트를 넣으면 단순히 텍스트를 잘라냅니다. 전체 텍스트를보기 위해 자동으로 슬라이더를 만들지는 않습니다. 정적 텍스트 상자를 더 크게 만들고, 정적 텍스트 상자의 "FontSize" property을 더 작은 값으로 조정하거나 (더 복잡한 옵션) 텍스트 상자에 표시되는 내용을 조정하는 고유 한 슬라이더를 만듭니다.


편집 : 더 복잡 옵션은 ... 아무도 관심이 경우

, 나는 내가 내용을 제어하는 ​​슬라이더와 정적 텍스트 상자를 만들기위한 몇 가지 샘플 코드를 포함하는 줄 알았는데 텍스트 상자에 표시됩니다. 이것을 구현하는 데는 몇 가지 다른 방법이 있습니다. 가장 간단한 구현 (아래에 있음)부터 nested functionsfancy OOP stuff을 사용하는 더 복잡한 버전까지 다양합니다.

callback_scrolltext.m

function callback_scrolltext(source,event,hText) 
    textString = get(hText,'UserData'); 
    nLines = numel(textString); 
    lineIndex = nLines-round(get(source,'Value')); 
    set(hText,'String',textString(lineIndex:nLines)); 
end 

update_scrolltext.m

function update_scrolltext(newText,hText,hSlider) 
    newText = textwrap(hText,newText); 
    set(hText,'String',newText,'UserData',newText); 
    nRows = numel(newText); 
    if (nRows < 2), 
    sliderEnable = 'off'; 
    else 
    sliderEnable = 'on'; 
    end 
    nRows = max(nRows-1,1); 
    set(hSlider,'Enable',sliderEnable,'Max',nRows,... 
     'SliderStep',[1 3]./nRows,'Value',nRows); 
end 

둘째 :

첫째, m-파일로 저장이 개 다음과 같은 기능을 가지고해야합니다 , 다음 코드로 GUI 오브젝트를 작성하십시오.당신의 텍스트를 변경하려면, 모든 시간을 마지막으로

hParent = figure; 
hText = uicontrol('Style','text',... 
        'Parent',hParent,... 
        'Units','pixels',... 
        'Position',[100 100 100 40]); 
hSlider = uicontrol('Style','slider',... 
        'Parent',hParent,... 
        'Units','pixels',... 
        'Position',[200 100 10 40],... 
        'Enable','off',... 
        'Callback',{@callback_scrolltext,hText}); 

: 당신은 당신이 원하는대로 할 수있는 '위치'속성을 설정뿐만 아니라 hParent의 자리에 그림 또는 패널 개체에 대한 모든 핸들을 사용할 수 있습니다 입력란 update_scrolltext을 표시하려는 텍스트 (TEXTWRAP의 문자열 입력과 마찬가지로 셀 배열에 포함)와 텍스트 상자 및 슬라이더의 핸들을 호출합니다. 다음은 시도해 볼 수있는 몇 가지 예입니다.

update_scrolltext({'hello'},hText,hSlider); 
update_scrolltext({'hello'; 'there'; 'silly'; 'world'},hText,hSlider); 

맞게 수정할 코드를 수정하십시오! =)

+0

'update_scrolltext()'를 새로 호출 할 때마다 이전에 입력 한 텍스트가 사라지지 않도록하는 방법을 제안 할 수 있습니까? 즉, 위의 코드를 수정하여 이전 텍스트가있는 새 줄에 새 텍스트를 표시하려면 어떻게해야합니까? 감사. – Pupil

+1

@Pupil'update_scrolltext'의 시작 부분에 이것을 추가하면 덮어 쓰기 대신 추가해야합니다 :'oldText = get (hText, 'UserData'); newText = [oldText; newText]; ' – gnovice

+0

고마워요. – Pupil

2

listbox를 사용하여 명령 출력을 올바르게 표시합니다. 스크롤 막대를 사용하면 출력을 혼란없이 더 잘 볼 수 있습니다.

상태가리스트 박스 스타일로 uicontrol에 대한 핸들이라고 가정하면;

message = 'New output to be appended'; 
set(status,'String', [message; get(status,'String')]); 

이것이 작동하려면 uicontrol의 초기 문자열이 셀이 아니고 문자열이어야한다고 생각합니다. ,

set(status,'String', [message; {get(status,'String')}]); 
+0

모든 여러분, 고마워요. –

+0

한 가지 더, 코드가 실행되는 동안 GUI를 업데이트하는 경우 변경 내용이 즉시 표시되지 않을 수 있습니다. 이 경우 'drawnow'를 사용하여 강제로 GUI를 다시 그립니다. – ustun

0

난 그냥 matlab에 구이의에에서 시작 해요 : 당신은 두 줄에 '준비'로 uicontrol의 문자열을 만들어이 확신 할 수 있습니다, 또는 당신은이 같은 셀에 문자열을 강제 할 수 그래서 저는 전문가 나 경험자가 아니라 다른 포럼에서 edit-text 요소가 자동으로 스크롤 막대를 생성한다고 언급 한 사람이 아닙니까? 또한 선택 가능하고 복사 가능하다는 장점이 있습니다. 나는 내 코드를 알아낼 수 있는지 알아볼 것이다. 내가 아는 순간 나는 다시 올 것이다.

+1

사실입니다. 또한 스크롤바와 선택 가능한 텍스트를 원할 때 '편집'uicontrols를 사용합니다. – tashuhka