🔬 과학·테크/🔥 AutoHotkey v2 입문 가이드

AutoHotkey v2 입문 가이드 #11: GUI 기초 - 나만의 창 만들기

_eNKI 2025. 12. 14. 19:48
반응형

🎯 이 글에서 배우는 것: 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)
}

🎮 실습 과제

  1. 이름과 나이를 입력받고 "안녕하세요, OO님! OO세시군요!" 표시
  2. 3개의 라디오 버튼(아침/점심/저녁)과 확인 버튼으로 선택 표시
  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 파일 다루기]

반응형