입출력 대화상자
입출력 대화상자 (I/O Dialogs)
폴더나 파일을 고르는 데 쓸 수 있는 간단한 대화상자 메뉴가 준비돼 있어요. 이들은 문자열 변수를 돌려줘서, 파일 이름이 필요한 어떤 명령에도 그대로 쓸 수 있죠. 또 도움말·경고·오류 메시지를 보여주고 사용자 입력을 받는 대화상자도 있어요. Octave 매뉴얼 35.1절을 정리해 볼게요.
출처: I/O Dialogs
본문
디렉토리·파일 선택
dirname = uigetdir (), dirname = uigetdir (init_path), dirname = uigetdir (init_path, dialog_name) — 디렉토리를 선택하는 GUI 대화상자를 열어요. init_path를 주지 않으면 현재 작업 디렉토리가 사용되죠. dialog_name으로 대화상자 제목을 바꿀 수 있어요. 반환되는 dirname은 선택한 디렉토리 이름을 담은 문자 문자열입니다. 다만 Cancel 버튼을 누르면 값 0을 가진 double 타입으로 반환해요. See also: uigetfile, uiputfile.
[fname, fpath, fltidx] = uigetfile (), […] = uigetfile (flt), […] = uigetfile (flt, dialog_name), […] = uigetfile (flt, dialog_name, default_file), […] = uigetfile (…, "MultiSelect", mode) — 파일을 선택하는 GUI 대화상자를 열고 파일 이름 fname, 그 파일의 경로 fpath, 필터 인덱스 fltidx를 돌려줘요. flt는 다음 형식 중 하나의 (목록 형태) 파일 필터 문자열입니다.
"/path/to/filename.ext" — 파일 이름을 주면 파일 확장자가 추출되어 필터로 쓰여요. 게다가 그 경로가 대화상자의 현재 경로로, 파일 이름이 기본 파일로 선택됩니다. 예: uigetfile ("myfcn.m")
확장자 하나 "*.ext" — 예: uigetfile ("*.ext")
2열 셀 배열 — 첫 열에 파일 확장자, 둘째 열에 간단한 설명을 담아요. 예: uigetfile ({"*.ext", "My Description";"*.xyz", "XYZ-Format"}). 필터 문자열은 세미콜론으로 구분한 필터 확장자 목록일 수도 있어요. 예: uigetfile ({"*.gif;*.png;*.jpg", "Supported Picture Formats"})
디렉토리 이름이나 경로 이름 — 폴더 이름이나 경로 이름이 끝에 파일 구분자를 포함하면 그 폴더의 내용이 표시됩니다. 끝에 파일 구분자가 없으면 상위 디렉토리가 나열되죠. 가장 오른쪽 파일 구분자 오른쪽의 부분 문자열은 (있으면) 파일이나 디렉토리 이름으로 해석되고, 그 파일이나 디렉토리가 존재하면 강조 표시돼요. 경로 이름이나 디렉토리 이름이 전부 또는 부분적으로 존재하지 않으면 현재 작업 디렉토리가 표시됩니다. 이 경우 활성화된 필터는 없어요.
dialog_name으로 대화상자 제목을 바꿀 수 있어요. default_file을 주면 GUI 대화상자에서 미리 선택되고, 거기에 경로까지 주면 그 경로가 현재 경로로도 쓰입니다. "MultiSelect" 키를 "on"으로 설정하면 파일을 둘 이상 선택할 수 있어요. 이 경우 fname은 파일들을 담은 셀 배열이 돼요.
반환값 fname과 fpath는 각각 선택한 이름과 경로를 담은 문자열이에요. 다만 Cancel 버튼을 누르면 값 0을 가진 double 타입으로 반환됩니다. fltidx는 선택된 필터 확장자 목록 flt에서의 인덱스예요. See also: uiputfile, uigetdir.
[fname, fpath, fltidx] = uiputfile (), [fname, fpath, fltidx] = uiputfile (flt), [fname, fpath, fltidx] = uiputfile (flt, dialog_name), [fname, fpath, fltidx] = uiputfile (flt, dialog_name, default_file) — 파일을 선택하는 GUI 대화상자를 열어요. flt는 다음 형식 중 하나의 (목록 형태) 파일 필터 문자열입니다.
"/path/to/filename.ext" — 파일 이름을 주면 확장자가 추출되어 필터로 쓰여요. 또 그 경로가 대화상자의 현재 경로로, 파일 이름이 기본 파일로 선택됩니다. 예: uiputfile ("myfcn.m")
"*.ext" — 확장자 하나. 예: uiputfile ("*.ext")
{"*.ext", "My Description"} — 첫 열에 확장자, 둘째 열에 간단한 설명을 담은 2열 셀 배열. 예: uiputfile ({"*.ext","My Description";"*.xyz", "XYZ-Format"}). 필터 문자열은 세미콜론으로 구분한 필터 확장자 목록일 수도 있어요. 예: uiputfile ({"*.gif;*.png;*.jpg", "Supported Picture Formats"})
dialog_name으로 제목을 바꿀 수 있어요. default_file을 주면 대화상자에서 미리 선택되고, 경로까지 주면 그 경로가 현재 경로로 쓰입니다. fname과 fpath는 각각 선택한 이름과 경로를 돌려주고, fltidx는 선택된 필터 확장자 목록 flt에서의 인덱스예요. See also: uigetfile, uigetdir.
도움말·경고·오류·입력 대화상자
이외에도 도움말, 경고, 오류 메시지를 보여주고 사용자에게 텍스트 입력을 받는 대화상자가 따로 있어요.
errordlg (), errordlg (msg), errordlg (msg, title), errordlg (msg, title, opt), h = errordlg (…) — 오류 메시지 msg와 제목 title을 가진 오류 대화상자를 표시해요. 기본 오류 메시지는 "This is the default error string.", 기본 제목은 "Error Dialog"입니다. 오류 메시지는 줄바꿈 문자("\n")로 구분한 여러 줄일 수도 있고, 줄마다 요소 하나인 cellstr 배열일 수도 있어요. 세 번째 선택 인자 opt는 대화상자 동작을 제어하는데, 자세한 내용은 msgbox를 참고하세요. 반환값 h는 대화상자를 만드는 데 쓰인 figure 객체의 핸들이에요.
errordlg ("Some fancy error occurred.");
errordlg ("Some fancy error\nwith two lines.");
errordlg ({"Some fancy error", "with two lines."});
errordlg ("Some fancy error occurred.", "Fancy caption");
See also: helpdlg, warndlg, msgbox, inputdlg, listdlg, questdlg.
helpdlg (), helpdlg (msg), helpdlg (msg, title), h = helpdlg (…) — 도움말 메시지 msg와 제목 title을 가진 도움말 대화상자를 표시해요. 기본 도움말 메시지는 "This is the default help string.", 기본 제목은 "Help Dialog"입니다. 메시지는 "\n"으로 구분한 여러 줄이거나 cellstr 배열일 수도 있어요. 반환값 h는 대화상자를 만드는 데 쓰인 figure 객체의 핸들입니다.
helpdlg ("Some helpful text for the user.");
helpdlg ("Some helpful text\nwith two lines.");
helpdlg ({"Some helpful text", "with two lines."});
helpdlg ("Some helpful text for the user.", "Fancy caption");
See also: errordlg, warndlg, msgbox, inputdlg, listdlg, questdlg.
cstr = inputdlg (prompt), cstr = inputdlg (prompt, title), cstr = inputdlg (prompt, title, rowscols), cstr = inputdlg (prompt, title, rowscols, defaults), cstr = inputdlg (prompt, title, rowscols, defaults, options) — 여러 텍스트 필드로 구성된 대화상자에서 사용자 입력을 돌려줘요. 입력 인자들은 다음과 같습니다.
prompt — 각 텍스트 필드에 표시할 문자열을 담은 셀 배열. 필수 입력이에요.
title — 대화상자 제목으로 쓸 문자열. 기본은 "Input Dialog".
rowscols — 텍스트 필드의 크기를 지정하며 네 가지 형태를 취할 수 있어요. 각 텍스트 필드에 쓸 행 수를 정의하는 스칼라 값, prompt 개수와 같은 요소 수를 가진 행·열 벡터(각 요소가 대응 텍스트 필드의 행 수), 모든 텍스트 필드의 행·열 수를 정의하는 1×2 행 벡터, 각 텍스트 필드의 행·열 수를 개별적으로 정의하는 M×2 행렬(각 행이 텍스트 필드 하나, 첫 열은 입력 행 수, 둘째 열은 텍스트 필드 폭).
defaults — 각 텍스트 필드에 넣을 기본값 목록. prompt와 같은 크기의 문자열 셀 배열이어야 해요.
options — 지원되지 않으며 MATLAB 호환성용으로만 존재합니다.
출력은 사용자가 입력한 텍스트를 요소별로 담은 문자열 셀 배열이에요. Cancel 버튼으로 대화상자를 닫으면 빈 셀 배열이 반환됩니다.
prompt = {"Width", "Height", "Depth"};
defaults = {"1.10", "2.20", "3.30"};
rowscols = [1,10; 2,20; 3,30];
dims = inputdlg (prompt, "Enter Box Dimensions", ...
rowscols, defaults);
See also: errordlg, helpdlg, listdlg, msgbox, questdlg, warndlg.
[sel, ok] = listdlg (key, value, …) — 목록 대화상자에서 선택 인덱스 벡터(sel)와 사용자가 대화상자를 어떻게 닫았는지를 나타내는 플래그(ok)를 돌려줘요. sel의 인덱스는 1부터 시작합니다. ok는 사용자가 OK 버튼으로 닫으면 1, 그 외에는 0이고 이때 sel은 비어 있어요. 입력 인자는 key, value 쌍 형태로 지정하며, "ListString" 쌍은 반드시 지정해야 해요. 유효한 키와 값 쌍은 다음과 같습니다.
"ListString" — 대화상자에 나열할 항목을 지정하는 문자열 셀 배열.
"SelectionMode" — "Single"(한 번에 하나만 선택 가능) 또는 "Multiple"(기본) 중 하나.
"ListSize" — 픽셀 단위 목록 필드 크기를 지정하는 두 요소 벡터 [width, height]. 기본은 [160, 300].
"InitialValue" — 목록 대화상자가 처음 표시될 때 미리 선택할 요소의 1-기반 인덱스를 담은 벡터. 기본은 1(첫 항목).
"Name" — 대화상자 제목으로 쓸 문자열. 기본은 "".
"PromptString" — 항목 목록 위에 표시할 문자열 셀 배열. 기본은 {}.
"OKString" — OK 버튼에 표시할 문자열. 기본은 "OK".
"CancelString" — Cancel 버튼에 표시할 문자열. 기본은 "Cancel".
my_options = {"An item", "another", "yet another"};
[sel, ok] = listdlg ("ListString", my_options,
"SelectionMode", "Multiple");
if (ok == 1)
disp ("You selected:");
for i = 1:numel (sel)
disp (sprintf ("\t%s", my_options{sel(i)}));
endfor
else
disp ("You cancelled.");
endif
See also: menu, errordlg, helpdlg, inputdlg, msgbox, questdlg, warndlg.
h = msgbox (msg), h = msgbox (msg, title), h = msgbox (msg, title, icon), h = msgbox (msg, title, "custom", cdata), h = msgbox (msg, title, "custom", cdata, colormap), h = msgbox (…, opt) — 메시지 대화상자를 사용해 msg를 표시해요. 메시지는 "\n"으로 구분한 여러 줄이거나 cellstr 배열일 수 있어요. 선택 입력 title(문자열)로 대화상자 제목을 꾸밀 수 있습니다. 선택 인자 icon은 대화상자 아이콘을 고르는데, "none"(기본), "error", "help", "warn", "custom" 중 하나예요. "custom" 뒤에는 이미지 배열 cdata가 따라와야 하며, 인덱스 이미지면 연관 colormap도 필요합니다.
마지막 선택 인자 opt는 대화상자 동작을 제어해요. opt가 문자열이면 다음 중 하나예요.
"non-modal" (기본) — 대화상자가 일반적입니다.
"modal" — 같은 제목의 대화상자가 이미 있으면 가장 최근 것을 재사용하고 나머지는 닫아요. 대화상자는 "modal"로 표시되어, 닫을 때까지 사용자가 다른 GUI 요소와 상호작용하지 못하게 막습니다.
"replace" — 같은 제목의 대화상자가 이미 있으면 가장 최근 것을 재사용하고 나머지를 닫아요. 결과 대화상자는 "non-modal"로 설정됩니다.
opt가 구조체라면 "WindowStyle"과 "Interpreter" 필드를 포함해야 해요.
"WindowStyle" — 값은 "non-modal", "modal", "replace" 중 하나. 위 내용 참고.
"Interpreter" — 메시지를 표시하는 텍스트 객체의 "interpreter" 속성을 제어해요. 값은 "tex"(기본), "none", "latex" 중 하나.
반환값 h는 대화상자를 만드는 데 쓰인 figure 객체의 핸들이에요.
msgbox ("Some message for the user.");
msgbox ("Some message\nwith two lines.");
msgbox ({"Some message", "with two lines."});
msgbox ("Some message for the user.", "Fancy caption");
## A message dialog box with error icon
msgbox ("Some message for the user.", "Fancy caption", "error");
See also: errordlg, helpdlg, inputdlg, listdlg, questdlg, warndlg.
btn = questdlg (msg), btn = questdlg (msg, title), btn = questdlg (msg, title, default), btn = questdlg (msg, title, btn1, btn2, default), btn = questdlg (msg, title, btn1, btn2, btn3, default) — 질문 대화상자를 사용해 msg를 표시하고, 활성화된 버튼의 제목을 돌려줘요. 메시지는 "\n"으로 구분한 여러 줄이거나 cellstr 배열일 수 있어요. 선택 title(문자열)로 대화상자 제목을 정할 수 있고, 기본은 "Question Dialog"입니다. 대화상자는 두세 개의 버튼을 가질 수 있으며 모두 대화상자를 닫아요. 문자열 default는 ENTER 키로 활성화되는 기본 버튼을 식별하며, btn1, btn2, btn3 중 하나와 일치해야 해요.
msg와 title만 지정하면 기본 제목이 "Yes", "No", "Cancel"인 세 버튼이 만들어져요. 버튼 제목 두 개(btn1, btn2)만 지정하면 대화상자에는 이 두 버튼만 생깁니다.
btn = questdlg ("Close Octave?", "Some fancy title", ...
"Yes", "No", "No");
if (strcmp (btn, "Yes"))
exit ();
endif
See also: errordlg, helpdlg, inputdlg, listdlg, msgbox, warndlg.
warndlg (), warndlg (msg), warndlg (msg, title), warndlg (msg, title, opt), h = warndlg (…) — 경고 메시지 msg와 제목 title을 가진 경고 대화상자를 표시해요. 기본 경고 메시지는 "This is the default warning string.", 기본 제목은 "Warning Dialog"입니다. 메시지는 "\n"으로 구분한 여러 줄이거나 cellstr 배열일 수 있어요. 세 번째 선택 인자 opt는 대화상자 동작을 제어하며 자세한 내용은 msgbox를 참고하세요. 반환값 h는 대화상자를 만드는 데 쓰인 figure 객체의 핸들이에요.
warndlg ("Some warning text for the user.");
warndlg ("Some warning text\nwith two lines.");
warndlg ({"Some warning text", "with two lines."});
warndlg ("Some warning text for the user.", "Fancy caption");
See also: errordlg, helpdlg, msgbox, inputdlg, listdlg, questdlg.
uisetfont (), uisetfont (h), uisetfont (fontstruct), uisetfont (…, title), fontstruct = uisetfont (…) — 글꼴 선택 대화상자를 열어요. 첫 번째 인자가 text, axes, uicontrol 객체의 핸들이면 OK 버튼을 누를 때 그 객체의 글꼴 속성이 바뀝니다. 첫 번째 인자는 FontName, FontWeight, FontAngle, FontUnits, FontSize 필드를 가진 구조체일 수도 있는데, 처음 선택된 글꼴을 나타내요. 마지막 인자 title로 대화상자 창 제목을 지정할 수 있어요. 출력 인자 fontstruct를 요청하면 선택한 글꼴 구조체가 반환되고, 그렇지 않으면 글꼴 정보가 화면에 표시됩니다.
Programming Note: FontConfig를 기본으로 사용하지 않는 시스템(Linux를 제외한 전부)에서는 글꼴 캐시가 Octave 설치 시에 만들어져요. 새 글꼴을 설치한 뒤에는 system ("fc-cache -fv")를 수동으로 실행해야 합니다. See also: listfonts, text, axes, uicontrol.
새 대화상자 만들기
새로운 대화상자 유형을 만들 때는 dialog 함수가 있어요.
h = dialog (), h = dialog (" property ", value, …) — 다른 uicontrol을 추가할 수 있는 빈 모달(modal) 대화상자 창을 만들어요. 대화상자 상자는 대화상자에 권장되는 속성을 가진 figure 객체입니다. figure와 달라지는 기본 속성은 다음과 같아요.
buttondownfcn — if isempty (allchild(gcbf)), close (gcbf), endif
colormap — []
color — defaultuicontrolbackgroundcolor
dockcontrols — off
handlevisibility — callback
integerhandle — off
inverthardcopy — off
menubar — none
numbertitle — off
paperpositionmode — auto
resize — off
windowstyle — modal
대화상자 객체에는 여러 속성-값 쌍을 지정할 수 있지만 반드시 쌍으로 나타나야 해요. 전체 속성 목록은 Figure Properties에 문서화되어 있습니다. 반환값 h는 만들어진 figure의 그래픽 핸들이에요.
## create an empty dialog window titled "Dialog Example"
h = dialog ("name", "Dialog Example");
## create a button (default style)
b = uicontrol (h, "string", "OK",
"position", [10 10 150 40],
"callback", "delete (gcf)");
## wait for dialog to resume or close
uiwait (h);
See also: errordlg, msgbox, questdlg, warndlg, figure, uiwait.
더 알아보기
- octave-input-and-output — 입출력 전반
- octave-opening-and-closing-files — 파일 열기와 닫기
- octave-plotting — 그래픽과 figure