tk_getOpenFile / tk_getSaveFile — 파일 열기·저장 대화상자 띄우기
tk_getOpenFile / tk_getSaveFile — 파일 열기·저장 대화상자 띄우기
응용에서 파일을 열거나 저장할 때 운영체제 스타일의 대화상자를 띄우고 싶을 때가 있어요. tk_getOpenFile과 tk_getSaveFile은 사용자가 열거나 저장할 파일을 고르는 대화상자를 띄워 주는 절차입니다.
본문
개요
tk_getOpenFile ?option value ...?
tk_getSaveFile ?option value ...?
동작 방식
tk_getOpenFile과 tk_getSaveFile 절차는 사용자가 열거나 저장할 파일을 고르는 대화상자를 띄웁니다. tk_getOpenFile 명령은 보통 File 메뉴의 Open 명령과 연결돼요. 목적은 사용자가 이미 존재하는 파일만 고르게 하는 것이에요. 사용자가 존재하지 않는 파일을 입력하면 대화상자가 오류 프롬프트를 보여주고 다른 선택을 요구합니다. 응용이 새 파일을 만들 수 있게 하려면 별도의 New 메뉴 명령으로 처리해야 해요.
tk_getSaveFile 명령은 보통 File 메뉴의 Save as 명령과 연결됩니다. 사용자가 이미 존재하는 파일을 입력하면 대화상자가 기존 파일을 덮어쓸지 확인을 요청해요.
이 두 명령의 명령줄 인자로 다음 option-value 쌍을 사용할 수 있어요.
-command string — 사용자가 항목을 선택한 뒤 대화상자를 닫을 때 호출할 Tcl 명령의 프리픽스를 지정합니다. 사용자가 대화상자를 취소하면 이 콜백은 호출되지 않아요. 실제 명령은 string 뒤에 공백과 사용자가 대화상자에서 선택한 값이 붙은 형태예요. macOS에서만 사용할 수 있습니다.
-confirmoverwrite boolean — 선택한 파일이 이미 존재해서 저장이 덮어쓰기가 될 때 Save 대화상자가 어떻게 반응할지 정합니다. 참이면 사용자에게 확인 대화상자를 띄우고, 거짓이면 확인 없이 덮어씁니다. 기본값은 참이에요.
-defaultextension extension — 사용자가 확장자 없는 파일명을 입력할 때 파일명에 붙일 문자열을 지정합니다. 기본값은 빈 문자열로, 어떤 경우에도 확장자가 붙지 않아요. 이 옵션은 확장자를 요구하지 않는 macOS에서는 무시되고, UNIX 구현은 지정되지 않았을 때 -filetypes 옵션에서 합리적인 값을 추측합니다.
-filetypes filePatternList — 특정 플랫폼의 파일 대화상자에 File types 리스트박스가 있으면, 이 옵션이 그 리스트박스의 filetype들을 지정해요. 사용자가 리스트박스에서 파일 유형을 고르면 그 유형의 파일만 나열됩니다. 이 옵션을 지정하지 않거나 빈 리스트로 설정하거나, 플랫폼이 File types 리스트박스를 지원하지 않으면 유형과 무관하게 모든 파일이 나열돼요. filePatternList의 내용은 아래 "파일 패턴 지정" 섹션을 참조해요.
-initialdir directory — 대화상자가 떠오를 때 directory 안의 파일을 표시하도록 지정합니다. 지정하지 않으면 비Windows 시스템과 Windows의 Vista 이전 버전은 초기 디렉터리가 현재 작업 디렉터리예요. Vista 이상에서는 마지막으로 사용자가 선택한 디렉터리가 기본값이 됩니다. 상대 경로를 지정하면 반환 값이 그 상대 경로를 절대 경로로 변환해요.
-initialfile filename — 대화상자가 떠오를 때 표시할 파일명을 지정합니다.
-message string — 대화상자의 클라이언트 영역에 포함할 메시지를 지정합니다. macOS에서만 사용할 수 있어요.
-multiple boolean — Open 대화상자에서 사용자가 여러 파일을 고르게 합니다.
-parent window — window를 파일 대화상자의 논리적 부모로 만듭니다. 파일 대화상자는 부모 창 위에 표시돼요. macOS에서는 이것이 파일 대화상자를 부모 창에 붙은 시트(sheet)로 바꿉니다.
-title titleString — 대화상자 제목으로 표시할 문자열을 지정합니다. 지정하지 않으면 기본 제목이 표시돼요.
-typevariable variableName — 전역 변수 variableName이 대화상자가 열릴 때 filterList에서 어떤 필터를 미리 선택할지 정하는 데 쓰이고, 대화상자가 닫힐 때 마지막으로 선택된 필터로 갱신됩니다. 처음에 변수는 한 번 읽혀 적절한 필터를 고르는 데 사용돼요. 변수가 없거나 값이 어떤 필터 유형 이름과도 일치하지 않거나 빈 값({})이면 대화상자는 리스트의 첫 번째 필터를 선택하는 기본 동작으로 돌아갑니다. 대화상자를 취소하면 변수는 수정되지 않아요.
사용자가 파일을 선택하면 tk_getOpenFile과 tk_getSaveFile 둘 다 그 파일의 전체 경로명을 돌려줍니다. 사용자가 작업을 취소하면 두 명령 모두 빈 문자열을 돌려줘요.
파일 패턴 지정
-filetypes 옵션이 주는 filePatternList 값은 파일 패턴들의 리스트입니다. 각 파일 패턴은 다음 형태의 리스트예요.
typeName {extension ?extension ...?} ?{macType ?macType ...?}?
typeName은 이 파일 패턴이 설명하는 파일 유형의 이름으로, File types 리스트박스에 나타나는 텍스트 문자열입니다. extension은 이 파일 패턴의 파일 확장자예요. macType은 4글자 Macintosh 파일 유형입니다. macType 리스트는 선택 사항이라 Macintosh 플랫폼에서 실행할 필요가 없는 응용은 생략할 수 있어요.
여러 파일 패턴이 같은 typeName을 가질 수 있는데, 이 경우 같은 파일 유형을 가리키며 같은 리스트박스 항목을 공유합니다. 사용자가 리스트박스에서 항목을 선택하면 그 항목에 해당하는 파일 패턴 중 하나 이상과 일치하는 모든 파일이 나열돼요. 보통 각 파일 패턴은 구별되는 파일 유형에 해당합니다. 한 파일 유형에 여러 파일 패턴을 쓰는 것은 Macintosh 플랫폼에서만 필요해요.
Macintosh 플랫폼에서 파일이 파일 패턴과 일치하려면 이름이 extension 중 하나 이상과 일치하고, 동시에 파일 패턴의 macType 중 하나 이상에 속해야 해요. 예를 들어 샘플 코드의 C Source Files 패턴은 .c 확장자를 가지면서 TEXT macType에 속하는 파일과 일치합니다. OR 규칙을 쓰려면 확장자만 있는 패턴 하나와 macType만 있는 패턴 하나, 이렇게 두 파일 패턴을 쓰면 돼요. 샘플 코드의 GIF Files 유형은 .gif 확장자가 있거나 GIFF macType에 속하는 파일과 일치합니다.
Unix와 Windows 플랫폼에서 파일이 파일 패턴과 일치하려면 이름이 파일 패턴의 extension 중 하나 이상과 일치하면 됩니다. macType은 무시돼요.
확장자 지정
Unix와 Macintosh 플랫폼에서 확장자는 glob 스타일 패턴 매칭으로 일치시킵니다. Windows 플랫폼에서는 기반 운영체제가 확장자를 매칭해요. 가능한 확장자 유형은 다음과 같습니다.
- 특별 확장자
"*"— 어떤 파일이든 일치. - 특별 확장자
""— 확장자가 없는(즉 파일명에 마침표가 없는) 어떤 파일이든 일치. - 와일드카드 문자(*와 ?)를 포함하지 않는 임의의 문자열.
플랫폼별 표기 규칙이 달라 이식성을 보장하려면 특별 확장자 "*"를 제외하고 확장자에는 와일드카드 문자를 쓸 수 없어요. 마침표 없는 확장자(예: "~")는 허용되지만 모든 플랫폼에서 동작하지 않을 수 있습니다.
예제
set types {
{{Text Files} {.txt} }
{{TCL Scripts} {.tcl} }
{{C Source Files} {.c} TEXT}
{{GIF Files} {.gif} }
{{GIF Files} {} GIFF}
{{All Files} * }
}
set filename [tk_getOpenFile -filetypes $types]
if {$filename ne ""} {
# Open the file ...
}
더 알아보기
- tk_chooseDirectory — 디렉터리 선택 대화상자