반응형

🎯 이 글에서 배우는 것: GUI 창 생성, 컨트롤 추가, 이벤트 처리
🪟 GUI란?
GUI = Graphical User Interface = 그래픽 사용자 인터페이스
버튼, 텍스트 상자, 체크박스가 있는 윈도우 창을 만드는 것입니다!
🎨 첫 번째 GUI 창
가장 간단한 창
#Requires AutoHotkey v2.0
MyGui := Gui()
MyGui.Show()
빈 창이 나타납니다! 너무 밋밋하죠?
제목과 크기 추가
MyGui := Gui(, "나의 첫 GUI")
MyGui.Show("w400 h300") ; 너비 400, 높이 300
📝 텍스트 추가
MyGui := Gui(, "텍스트 예제")
MyGui.Add("Text", , "안녕하세요!")
MyGui.Add("Text", , "AutoHotkey v2 GUI입니다")
MyGui.Show()
텍스트 스타일링
MyGui := Gui()
MyGui.SetFont("s12") ; 글꼴 크기 12
MyGui.Add("Text", , "일반 텍스트")
MyGui.SetFont("s16 Bold") ; 크기 16, 굵게
MyGui.Add("Text", , "굵은 텍스트")
MyGui.SetFont("s14 Italic cBlue") ; 기울임, 파란색
MyGui.Add("Text", , "파란색 기울임")
MyGui.Show()
🔘 버튼 추가
MyGui := Gui(, "버튼 예제")
MyGui.Add("Text", , "버튼을 클릭하세요:")
MyBtn := MyGui.Add("Button", , "클릭!")
MyBtn.OnEvent("Click", ButtonClicked)
MyGui.Show()
ButtonClicked(*) {
MsgBox("버튼이 클릭되었습니다!")
}
여러 버튼
MyGui := Gui(, "버튼들")
Btn1 := MyGui.Add("Button", , "버튼 1")
Btn1.OnEvent("Click", (*) => MsgBox("버튼 1 클릭!"))
Btn2 := MyGui.Add("Button", , "버튼 2")
Btn2.OnEvent("Click", (*) => MsgBox("버튼 2 클릭!"))
Btn3 := MyGui.Add("Button", , "버튼 3")
Btn3.OnEvent("Click", (*) => MsgBox("버튼 3 클릭!"))
MyGui.Show()
📝 텍스트 입력 (Edit)
MyGui := Gui(, "입력 예제")
MyGui.Add("Text", , "이름을 입력하세요:")
NameEdit := MyGui.Add("Edit", "w200") ; 너비 200
SubmitBtn := MyGui.Add("Button", , "확인")
SubmitBtn.OnEvent("Click", Submit)
MyGui.Show()
Submit(*) {
name := NameEdit.Value
MsgBox("안녕하세요, " name "님!")
}
여러 줄 입력
MyGui := Gui(, "메모장")
MyGui.Add("Text", , "메모:")
MemoEdit := MyGui.Add("Edit", "w300 h200 Multi") ; Multi = 여러 줄
MyGui.Show()
☑️ 체크박스와 라디오 버튼
체크박스
MyGui := Gui(, "설정")
Chk1 := MyGui.Add("Checkbox", , "알림 받기")
Chk2 := MyGui.Add("Checkbox", "Checked", "자동 시작") ; 기본 체크
SaveBtn := MyGui.Add("Button", , "저장")
SaveBtn.OnEvent("Click", SaveSettings)
MyGui.Show()
SaveSettings(*) {
notify := Chk1.Value ? "예" : "아니오"
autoStart := Chk2.Value ? "예" : "아니오"
MsgBox("알림: " notify "`n자동 시작: " autoStart)
}
라디오 버튼
MyGui := Gui(, "선택")
MyGui.Add("Text", , "좋아하는 색상:")
Radio1 := MyGui.Add("Radio", "Group", "빨강") ; Group = 그룹 시작
Radio2 := MyGui.Add("Radio", , "파랑")
Radio3 := MyGui.Add("Radio", , "초록")
SubmitBtn := MyGui.Add("Button", , "선택")
SubmitBtn.OnEvent("Click", ShowChoice)
MyGui.Show()
ShowChoice(*) {
if Radio1.Value
MsgBox("빨강 선택!")
else if Radio2.Value
MsgBox("파랑 선택!")
else if Radio3.Value
MsgBox("초록 선택!")
else
MsgBox("선택 없음")
}
📋 드롭다운 리스트
MyGui := Gui(, "드롭다운 예제")
MyGui.Add("Text", , "국가 선택:")
CountryList := MyGui.Add("DropDownList", , ["한국", "미국", "일본", "중국"])
SubmitBtn := MyGui.Add("Button", , "확인")
SubmitBtn.OnEvent("Click", ShowCountry)
MyGui.Show()
ShowCountry(*) {
MsgBox("선택한 국가: " CountryList.Text)
}
기본값 설정
CountryList := MyGui.Add("DropDownList", "Choose2", ["한국", "미국", "일본"])
; Choose2 = 2번째 항목(미국) 기본 선택
📐 레이아웃 조정
위치 지정
MyGui := Gui()
MyGui.Add("Text", "x10 y10", "왼쪽 위")
MyGui.Add("Text", "x200 y10", "오른쪽 위")
MyGui.Add("Text", "x10 y100", "왼쪽 아래")
MyGui.Add("Text", "x200 y100", "오른쪽 아래")
MyGui.Show("w350 h150")
상대 위치
MyGui := Gui()
MyGui.Add("Text", , "첫 번째")
MyGui.Add("Text", "xs", "같은 x 위치") ; xs = x same
MyGui.Add("Text", "ys", "같은 y 위치") ; ys = y same
MyGui.Add("Button", "xm", "왼쪽 정렬") ; xm = x margin
MyGui.Show()
크기 지정
MyGui := Gui()
MyGui.Add("Button", "w100", "너비 100")
MyGui.Add("Button", "w200 h50", "200x50")
MyGui.Add("Edit", "w300 h100") ; 텍스트 박스 300x100
MyGui.Show()
🎨 창 옵션
; 항상 위에 표시
MyGui := Gui("+AlwaysOnTop", "항상 위에")
; 크기 조절 가능
MyGui := Gui("+Resize", "크기 조절 가능")
; 최소화/최대화 버튼 없음
MyGui := Gui("-MinimizeBox -MaximizeBox", "단순 창")
; 제목 표시줄 없음
MyGui := Gui("-Caption", "제목 없음")
🚪 창 닫기 처리
MyGui := Gui(, "닫기 예제")
MyGui.Add("Text", , "창을 닫아보세요")
MyGui.OnEvent("Close", GuiClose)
MyGui.Show()
GuiClose(*) {
result := MsgBox("정말 닫으시겠습니까?", "확인", "YesNo")
if (result = "Yes")
ExitApp
}
📦 Submit - 모든 값 한번에 가져오기
MyGui := Gui(, "폼 예제")
MyGui.Add("Text", , "이름:")
MyGui.Add("Edit", "vName w200") ; v = 변수명 지정
MyGui.Add("Text", , "이메일:")
MyGui.Add("Edit", "vEmail w200")
MyGui.Add("Checkbox", "vNewsletter", "뉴스레터 수신")
SubmitBtn := MyGui.Add("Button", , "제출")
SubmitBtn.OnEvent("Click", FormSubmit)
MyGui.Show()
FormSubmit(*) {
saved := MyGui.Submit() ; 모든 값 수집
MsgBox("이름: " saved.Name
. "`n이메일: " saved.Email
. "`n뉴스레터: " (saved.Newsletter ? "예" : "아니오"))
}
🔧 실용적인 GUI 예제
예제 1: 간단한 계산기
MyGui := Gui(, "간단 계산기")
MyGui.Add("Text", , "숫자 1:")
Num1 := MyGui.Add("Edit", "w100 Number")
MyGui.Add("Text", , "숫자 2:")
Num2 := MyGui.Add("Edit", "w100 Number")
CalcBtn := MyGui.Add("Button", "w100", "더하기")
CalcBtn.OnEvent("Click", Calculate)
ResultText := MyGui.Add("Text", "w200", "결과: ")
MyGui.Show()
Calculate(*) {
result := Integer(Num1.Value) + Integer(Num2.Value)
ResultText.Value := "결과: " result
}
예제 2: 핫키 설정 GUI
MyGui := Gui(, "핫키 설정")
MyGui.Add("Text", , "텍스트를 입력하세요:")
TextInput := MyGui.Add("Edit", "vHotkeyText w300")
MyGui.Add("Text", , "핫키: Ctrl+Shift+T")
SaveBtn := MyGui.Add("Button", , "저장")
SaveBtn.OnEvent("Click", SaveHotkey)
MyGui.Show()
; 핫키 정의
^+t::SendHotkeyText()
SaveHotkey(*) {
MsgBox("저장되었습니다!`nCtrl+Shift+T를 눌러 텍스트를 입력하세요.")
}
SendHotkeyText() {
Send(TextInput.Value)
}
🎮 실습 과제
- 이름과 나이를 입력받고 "안녕하세요, OO님! OO세시군요!" 표시
- 3개의 라디오 버튼(아침/점심/저녁)과 확인 버튼으로 선택 표시
- To-Do 리스트: Edit에 할 일 입력, 버튼으로 추가, Text로 목록 표시
정답 보기 👀
#Requires AutoHotkey v2.0
; 1. 이름과 나이
MyGui := Gui(, "자기소개")
MyGui.Add("Text", , "이름:")
NameEdit := MyGui.Add("Edit", "w150")
MyGui.Add("Text", , "나이:")
AgeEdit := MyGui.Add("Edit", "w150 Number")
SubmitBtn := MyGui.Add("Button", , "확인")
SubmitBtn.OnEvent("Click", (*) => MsgBox("안녕하세요, " NameEdit.Value "님! " AgeEdit.Value "세시군요!"))
MyGui.Show()
📚 다음 시간 예고
다음 글에서는 파일 다루기를 배웁니다:
- 파일 읽기/쓰기
- 폴더 탐색
- 파일 관리
파일 자동화의 세계로! 📁
🔑 오늘 배운 핵심 정리
| 컨트롤 | 용도 | 예제 |
|---|---|---|
Text |
텍스트 표시 | MyGui.Add("Text", , "안녕") |
Button |
버튼 | MyGui.Add("Button", , "클릭") |
Edit |
텍스트 입력 | MyGui.Add("Edit", "w200") |
Checkbox |
체크박스 | MyGui.Add("Checkbox", , "동의") |
Radio |
라디오 버튼 | MyGui.Add("Radio", , "옵션1") |
DropDownList |
드롭다운 | MyGui.Add("DropDownList", , [...]) |
이전 글: [#10 키 리매핑]
다음 글: [#12 파일 다루기]
반응형
'🔬 과학·테크 > 🔥 AutoHotkey v2 입문 가이드' 카테고리의 다른 글
| AutoHotkey v2 입문 가이드 #13: 문자열 처리 - 텍스트 다루기의 기술 (0) | 2025.12.16 |
|---|---|
| AutoHotkey v2 입문 가이드 #12: 파일 다루기 - 읽고, 쓰고, 관리하기 (0) | 2025.12.15 |
| AutoHotkey v2 입문 가이드 #10: 키 리매핑 - 키보드 재창조하기 (0) | 2025.12.13 |
| AutoHotkey v2 입문 가이드 #9: 함수 기초 - 코드 재사용의 마법 (0) | 2025.12.12 |
| AutoHotkey v2 입문 가이드 #8: 제어문 - if/else, Loop, While, For (0) | 2025.12.11 |