이 글은 MiniMacro 시리즈의 3번째 기록입니다. (총 5개)

오늘 한 일

  • 드래그·스크롤 단계를 추가함 — 녹화에서도 잡히게. 8px 넘게 끌면 클릭이 아니라 드래그로, 이어진 휠은 한 단계로 묶음
    • 이유: 반복 작업에 끌기와 스크롤이 섞이면 아예 만들 수 없는 시나리오가 있었다
  • 재생이 실패했을 때 몇 번 단계에서 왜 멈췄는지 표시하게 함. 키 이름은 실행 전에 확인
    • 이유: 잘못된 키 이름을 넣으면 조용히 끊기는데 화면에는 “재생 완료”로 나왔다
  • 재생 중 진행 상황을 상태줄·창 제목에 표시
  • 편집 편의 — 복제, 여러 개 동시 선택, 단계를 지우지 않고 잠시 끄기, F5로 어디서든 재생, 창 제목에 시나리오 파일명
  • 단계 창을 마우스·키보드·대기 세 탭으로 정리하고, 클릭·이동·드래그·스크롤이 좌표 입력을 함께 쓰게 함
    • 이유: 라디오 일곱 개가 한 줄에 늘어서 있었고, 동작을 바꾸면 찍어 둔 좌표가 사라졌다
  • 키 입력 단계를 실제 키를 눌러서 채우게 함 — 「키 누르기」를 누르고 원하는 키를 누르면 조합까지 그대로 들어감
    • 이유: 키 이름을 외워서 타이핑해야 하는 유일한 자리였다
  • 창을 어떻게 바꿀지 시안을 먼저 만들고, 두 방향 중 하나를 골라 코드로 옮김
    • 창을 780×560 두 칸 구조로 — 헤더(시나리오명·파일·녹화·재생) / 목록 / 오른쪽 패널(재생 설정·단축키) / 상태줄
    • 강조색은 메트로놈에 쓴 청록과 같은 값으로 맞춤
    • 목록을 번호·동작·내용 세 칸으로 나누고, 대기 줄과 꺼둔 줄은 흐리게, 실행 중인 줄은 강조색으로
    • 재생 버튼을 눌러 나눠 처음부터와 선택한 단계부터를 고르게 함. 고른 쪽은 버튼 글자에 표시
    • 재생·녹화 중 화면 위에 떠 있는 작은 막대를 만듦 — 진행 상황과 멈추는 법이 늘 보이게
    • 재생·녹화 중에는 편집과 설정을 잠금
  • 백로그와 결정 사항을 문서로 정리 — 안 하기로 한 것(상대좌표·특정 창 지정)도 이유와 함께 남김

막힌 부분

  • 녹화 막대에 종료 버튼을 달려다 뺐다
    • 원인: 녹화 중에는 화면의 모든 클릭이 기록되니 그 버튼을 누르는 것까지 시나리오에 들어간다
    • 해결: 녹화 막대에는 「F9로 종료」 안내만 두고 종료는 키로만 받는다. 재생 중에는 기록하지 않으니 중지 버튼을 그대로 뒀다
  • 조합키만으로 된 단축키(ctrl+alt+shift)는 「키 누르기」로 잡히지 않았다
    • 원인: 캡처가 조합키 아닌 키를 눌러야 끝나는 구조라 끝나는 시점을 알 수 없다
    • 해결: 한계로 남기고 그런 건 직접 적게 뒀다. 문서에 이유와 함께 기록
  • Ctrl 조합을 누르면 엉뚱한 글자로 기록됐다
    • 원인: Ctrl을 누른 채 C를 누르면 후킹에는 ‘c’가 아니라 제어문자(\x03)가 들어온다. 알파벳 26자에 1~26이 순서대로 대응한다
    • 해결: 제어문자 범위면 원래 알파벳으로 되돌린 뒤 조합을 만든다. 녹화와 「키 누르기」 양쪽에 같은 처리를 넣었다
  • Shift가 이미 글자에 반영된 조합은 Shift를 빼야 맞았다
    • 원인: shift+tab은 조합으로 잡는 게 맞지만, shift+1은 후킹에 이미 !로 들어온다. 여기서 shift를 남기면 shift+!가 되어 엉뚱한 게 입력된다
    • 해결: 글자가 알파벳이 아니고 조합키가 shift뿐이면 shift를 떼고 그 글자만 남긴다
  • 상태줄이 화면에 안 나왔다
    • 원인: 본문을 남는 공간 전부 차지하게 먼저 붙여서 뒤에 오는 것에 줄 자리가 없었다
    • 해결: 늘어나는 본문을 마지막에 붙였다
  • 떠 있는 막대에서 제목 표시줄을 없앴더니 끌어서 옮기는 것도 같이 안 됐다
    • 원인: 끌어 옮기기는 창틀이 얹어 주던 기능이라 창틀을 걷으면 같이 걷힌다
    • 해결: 막대가 클릭할 자리를 가리면 곤란해 이동은 있어야 하는 기능이라, 끌어 옮기는 동작을 직접 만들어 붙였다
  • 새 화면을 검증하려고 짠 테스트가 「main thread is not in main loop」로 죽었다
    • 원인: 창을 짧게 갱신하는 방식으로 돌렸는데, 다른 스레드에서 화면 갱신을 예약하려면 창의 이벤트 루프가 실제로 돌고 있어야 한다
    • 해결: 실제 실행과 같은 방식으로 바꿔 재생·중지·오류·선택부터·녹화 잠금 다섯 흐름을 확인했다

테마를 갈아탄 순간 버튼이 전부 부풀어 줄이 잘렸다

색을 직접 정하려면 윈도우 기본 테마에서 clam으로 갈아타야 하는데, 바꾸자마자 두 글자짜리 버튼이 112px이 되고 편집 줄의 끝 버튼 두 개가 창 밖으로 밀려났다. 여백을 아무리 줄여도 그대로였다.

스타일 값을 직접 물어보니 원인이 나왔다. clam이 버튼에 최소 폭을 미리 걸어 둔 것이었다.

ttk.Style().lookup("TButton", "width")   # -11  (음수 = 최소 11글자)
  • 해결: 0으로 풀어 글자에 맞는 폭이 나오게 했다. 같은 자리에서 테두리도 안 보였는데, 색만 지정하고 그리는 모양이 「없음」이라 아예 안 그려지던 것이었다 — 그것도 함께 고쳤다. 덕분에 예전부터 있던 「기본 폭에서 편집 줄이 잘리는」 문제도 같이 사라졌다

미니 막대의 진행선이 그려지지 않았다

3px짜리 얇은 선을 만들려는데, 두께를 줄이면 위젯 테두리가 높이를 먹어 선이 2px로 잘렸고, 테두리를 없애니 이번엔 채워지는 부분이 통째로 안 나왔다. 두께만 줄여서 될 일이 아니었다.

  • 해결: 위젯을 쓰지 않고 캔버스에 사각형 둘로 직접 그렸다. 보여주기만 하는 요소라 상호작용이 필요 없어 이쪽이 짧고 확실했다
  • 남은 것: 배치가 끝나기 전에는 위젯 폭이 1이라 처음 한 번은 0으로 그려졌다. 크기가 정해질 때 다시 그리도록 묶어 해결

다음에 할 일

  • 새 화면을 실기로 확인 — 특히 재생 중 창이 안 내려가게 바뀌어서, 매크로가 클릭할 자리를 창이 가리면 그 창을 누르게 된다. 거슬리면 예전처럼 내리도록 되돌리기
  • exe로 묶어 배포 — 받는 사람이 파이썬 없이 쓰게. 내려받기 주소를 붙이고, 백신·스마트스크린 경고 안내도 함께
  • 편집 줄을 아이콘 버튼으로 (지금은 짧은 글자)
  • 실제 반복 작업에 써 보고 부족한 점 확인

Series: MiniMacro


Suggested Posts