reflex.dev
-
투두리스트에서 특정 업무를 수정해보자. #Update # 끝!
reflex.dev가 업데이트됨에 따라, 더 간편하고 쉬운 방법으로 구축할 수 있게 되었습니다.최신버전의 튜토리얼은 아래 위키독스 링크를 방문해 주시기 바랍니다.https://wikidocs.net/book/16592 [파이썬] html이 뭔지도 모르지만 홈페이지는 만들어보고 싶어!Reflex(구 Pynecone)은 파이썬으로만 웹 애플리케이션을 개발할 수 있는 오픈소스 풀스택 웹 프레임워크입니다. 이 프레임워크는 파이썬 개발자가 웹개발에 대한 경험이 전혀…wikidocs.net 지난 시간까지 CRUD 중 CRD를 완료했다.이번 포스팅에서는 Update를 구현해볼 차례이다.우리가 비록 리플렉스 문법은 다소 생소할지언정,파이썬의 간단한 문법인, 리스트 메서드나 enumerate만 가지고도투두리스트의 기본로..
2023.10.12
-
투두리스트에서 완료한 업무를 제거해보자. # Delete[2/2]
reflex.dev가 업데이트됨에 따라,더 간편하고 쉬운 방법으로 구축할 수 있게 되었습니다.최신버전의 튜토리얼은 아래 위키독스 링크를 방문해 주시기 바랍니다.https://wikidocs.net/book/16592지난 포스팅에서는 특정 할일의 정확한 삭제(pop)를 위해 State에서 enumerate를 통해 enum_list: list[tuple[int, str]] 라는 변수를 추가로 만들었다.(이 안에 index번호가 있는 덕분에, 정확하게 순서(인덱스)를 명시하여 특정 요소를 삭제할 수 있게 됐다.)그래서 이번 포스팅에서는페이지함수인 index를 완성해보기로 한다.기존에 만든, "할 일 추가"만 가능한 페이지 함수 index는 아래와 같다.def index(): return rx.contai..
2023.10.12
-
wsl에서 일반사용자로 mysql 실행시 Access Denied가 계속 뜬다?
데스크톱, 노트북 등 현재 사용중인 PC가 다섯 대 정도 있어서 여러 운영체제 조건하에서 코딩이나 테스트를 해 볼 수 있다. 재미있는 것은, 특정 PC의 wsl 환경에서만 데이터베이스 접속이 안되었는데, (정확히는 일반사용자로 mysql -u root -p 명령어로도 Access Denied가 뜨고, sudo mysql은 즉시 실행되는 문제가 있었다.) "설정파일을 만져보라", "재설치해보라" 등등 여러 가지 솔루션이 있었지만 차례대로 모두 실행해봐도 "Access Denied"가 해결되지 않다가 아래 링크를 통해 일반사용자 계정을 생성하고 previlege 설정을 주었더니 말끔히 해결되었다. 아직도 신기한 것은, 왜 다른 모든 컴퓨터에서는 mysql이 잘 돌고 있는데 주력으로 쓰고 있는 윈도우11 노트..
2023.10.10
-
rx에서 유튜브 allowFullScreen 활성화하는 방법
아래 방법은 전체화면 아이콘이 활성화되지 않는다. (잘못된 방법) import reflex as rx class State(rx.State): pass def index() -> rx.Component: return rx.box( element="iframe", src="https://www.youtube.com/embed/9bZkp7q19f0", allowFullScreen=True) # rx.Component: return rx.box( element="iframe", src="https://www.youtube.com/embed/9bZkp7q19f0", custom_attrs=dict(allowFullScreen=True)) #
2023.10.09
-
[reflex팁] rx.input을 효과적으로 다루는 방법
reflex는 pynecone 시절부터 지금까지 (react나 js를 다루지 않고) input을 편하게 사용할 수 있는 실험적인 기능을 제공해 왔다. 그 과정에서 불필요한 몇 가지 코드가 개선되었는데, 2023년 10월 현재는 (공식문서에는 아직 올라오지 않았지만) rx.form과 rx.set_value를 사용하는 방법이 가장 효과적인 방법으로 보인다. 개인적으로 reflex에서 set_value를 제공해 주기 전까지는 뭔가 미묘하게 걸리적거리는 문제들이 있어 고민을 많이 했는데 이제 rx.input이나 rx.form은 어느 정도 리플렉스의 철학대로 최적화가 되었다고 생각한다. 이번엔 reflex의 rx.input 컴포넌트 변천사(?)를 간단히 알아보는 포스팅을 작성해 두려고 한다. (엄밀히는 시간적인 ..
2023.10.05
-
투두리스트에서 완료한 업무를 제거해보자. # Delete[1/2]
reflex.dev가 업데이트됨에 따라,더 간편하고 쉬운 방법으로 구축할 수 있게 되었습니다.최신버전의 튜토리얼은 아래 위키독스 링크를 방문해 주시기 바랍니다.https://wikidocs.net/book/16592 [파이썬] html이 뭔지도 모르지만 홈페이지는 만들어보고 싶어!Reflex(구 Pynecone)은 파이썬으로만 웹 애플리케이션을 개발할 수 있는 오픈소스 풀스택 웹 프레임워크입니다. 이 프레임워크는 파이썬 개발자가 웹개발에 대한 경험이 전혀…wikidocs.net 지난 포스팅에서 투두리스트 앱의 CRUD 중 Create와 Read를 구현해보았다.리플렉스 컴포넌트 사용법이 다소 생소할 수는 있지만,실제로 로직 자체는 굉장히 간단한 파이썬 문법만 사용했다.append를 통해 할 일을 추가할 수..
2023.10.03
-
투두리스트에 할 일을 추가해보자. #Create
reflex.dev가 업데이트됨에 따라,더 간편하고 쉬운 방법으로 구축할 수 있게 되었습니다.최신버전의 튜토리얼은 아래 위키독스 링크를 방문해 주시기 바랍니다.https://wikidocs.net/book/16592 [파이썬] html이 뭔지도 모르지만 홈페이지는 만들어보고 싶어!Reflex(구 Pynecone)은 파이썬으로만 웹 애플리케이션을 개발할 수 있는 오픈소스 풀스택 웹 프레임워크입니다. 이 프레임워크는 파이썬 개발자가 웹개발에 대한 경험이 전혀…wikidocs.net공식문서의 투두리스트 앱은 로직의 간단함에 비해 다소 구현이 복잡하게 되어 있다.이 포스팅 시리즈에서는 최소의 코드로 투두리스트를 만들어보면서리플렉스에서 로직을 구현하는 방법에 익숙해지도록 하는 것을 1차목표로 한다.(이 포스팅을 ..
2023.10.03
-
파이썬의 리스트도 표현할 수 있나? # 투두리스트 앱 만들기
앞선 포스팅에서는 간단히 rx.heading이나 rx.text를 이용해 화면에 글자를 출력해보았으며 State라는 클래스와 클래스 변수인 Var를 이용해 동적인 웹앱, Counter를 구현해보았다. 그럼 이런 생각도 해볼 수 있을텐데? 단순한 텍스트 목록은 rx.text를 나열하면 될텐데, ["a", "b", "c"] 같은 리스트도 표현할 수 있을까? (직접 공식문서를 찾아 읽어보신 분이라면, 어렵지 않게 구현하실 것) 이 때는 우리가 사용할 또 다른 레이아웃 컴포넌트, 바로 rx.foreach가 필요하게 되는 시점이다. (굳이 비유하면 파이썬의 for문과 map 함수를 합친 느낌이다.) 참고로 rx.foreach는 단순한 파이썬의 for문과는 살짝 다르다. 무엇이 다른고 하니, rx.foreach(리스..
2023.10.03
-
간단한 동적 웹앱 만들어보기 : Counter
이번 포스팅에서는 아래와 같은 페이지를 만들어 보고, State의 사용법에 대해 간단히 이해해보고자 한다. 아래와 같은 코드로 index 함수를 만들었다. import reflex as rx def index(): return rx.vstack( # 행 방향으로 나열하는 레이아웃 컴포넌트 rx.heading("Counter"), # 제목 rx.hstack( # 열 방향으로 나열하는 레이아웃 컴포넌트 rx.button("-", color_scheme="red"), rx.heading("0"), rx.button("+", color_scheme="green") ) ) app = rx.App() app.add_page(index) app.compile() 참고로 위에서 사용한 vstack, hstack은 각각..
2023.10.03
-
reflex 웹페이지는 기본적으로 클래스 하나, 함수 하나로 구성된다.
reflex는 프론트엔드와 백엔드의 구분이 다소 모호(?)한 pure-python fullstack webframework이다. reflex로 만드는 웹앱은 기본적으로 State라는 클래스 하나, 그리고 index라는 함수 하나로 구성된다. 이를 이해하기 위해서는 가장 간단한 앱 하나를 만들어보는 것이 좋다. 우선 State 없이 간단한 페이지함수인 index를 만들어보자. import reflex as rx def index(): return rx.heading("Hello world!") app = rx.App(state=State) app.add_page(index) app.compile() python 코드로 구성된 간단한 소스이지만, 이는 리플렉스를 구성하고 있는 node.js, React, N..
2023.10.03
-
[컴포넌트 소개] flex VS grid VS hstack #layout
지난 포스팅에서 가장 기본적인 wrapping component인 rx.box와 rx.fragment를 소개했습니다. 하지만, 기본적인 스타일(예를 들면 가운데정렬이나 컴포넌트 간격 조절 등?)만 적용하려고 해도 코드라인이 길어집니다. reflex에서는 이런 작업의 편의를 위해 rx.flex, rx.container, rx.center, rx.stack, rx.vstack, rx.hstack, rx.grid 등 다양한 컴포넌트를 다양하게 제공하고 있습니다. rx.center rx.center는 rx.box의 자식컴포넌트를 중앙으로 정렬해주고 flex-box가 적용되며, 아래의 CSS가 기본적으로 적용되어 있습니다. { display: -webkit-box; display: -webkit-flex; dis..
2023.09.24
-
[컴포넌트 소개] rx.box vs rx.fragment #layout
rx.box는 가장 기본적인 태그와 같습니다. 특정 컴포넌트를 태그로 한 겹 감싸주는 기능 외에 아무 스타일도 적용되지 않습니다. rx.box와 거의 동일한 컴포넌트로 rx.fragment가 있습니다. rx.box와 rx.fragment의 차이는 딱 한 가지입니다. rx.box는 로 변환되어 그 안의 컴포넌트들을 한 겹 감싸주는 데 반해, rx.fragment는 (렌더링 후를 보면) 어떤 태그로도 감싸져 있지 않다는 점입니다. 그래서 rx.fragment에는 (당연히) 어떤 prop이나 이벤트 트리거도 적용되지 않습니다. rx.box의 렌더링 결과 rx.fragment의 렌더링 결과 그밖에 rx.box와 유사한 컴포넌트들 rx.box에 아주 조금씩 스타일이 추가적용된 컴포넌트들로 rx.center, rx..
2023.09.24
-
[컴포넌트 소개] rx.span #typography
1. rx.span이란 rx.span 컴포넌트는 줄바꿈을 하지 않고 라인 내 특정 텍스트에만 스타일을 적용할 수 있습니다. 렌더링 후에는 기본적으로 요소로 바뀝니다. 또한 rx.span 대신 rx.text("text", as_="span")으로 을 구현할 수도 있습니다. 2. 이전에 소개한 컴포넌트 2023.09.22 - [REFLEX 튜토리얼] - [컴포넌트 소개] rx.text #typography [컴포넌트 소개] rx.text #typography 1. rx.text란 rx.text 컴포넌트는 파이썬의 문자열을 웹에 표시하기 위한 기본 단위입니다. 렌더링 후에는 요소로 변환됩니다. 특정 속성을 부여하고 싶지 않다면 index 함수 내에서 rx.text("Hello world!") martinii...
2023.09.22
-
[컴포넌트 소개] rx.heading #typography
1. rx.heading이란 rx.heading 컴포넌트는 파이썬의 문자열을 "제목(heading)"으로 표시해줍니다. 렌더링 후에는 기본적으로 요소로 바뀝니다. 2. 크기조절 rx.heading 또한 rx.text와 마찬가지로 font_size 파라미터로 크기를 조절할 수 있으며, as_ 파라미터로 부터 까지 태그 변환도 가능합니다. 또한 내부적으로 rx.box 컴포넌트와 동일하게 작동하므로, rx.box에 부여할 수 있는 속성을 동일하게 rx.heading에도 적용할 수 있습니다. 3. 특정 라인수를 넘어갈 때 자르고 싶다면? 위의 예시에서 보시다시피 rx.heading에도 (rx.text와 마찬가지로) no_of_lines라는 속성(prop)이 있어서 (noOfLines로 사용해도 됩니다) 긴 제목..
2023.09.22
-
[컴포넌트 소개] rx.text #typography
1. rx.text란 rx.text 컴포넌트는 파이썬의 문자열을 웹에 표시하기 위한 기본 단위입니다. 렌더링 후에는 요소로 변환됩니다. 특정 속성을 부여하고 싶지 않다면 index 함수 내에서 rx.text("Hello world!") 대신 "Hello world!" 라고 사용하셔도 결과는 (거의) 동일해 보이기는 합니다. rx.text로 렌더링한 결과 Hello world! 일반 문자열로 렌더링한 결과 Hello world! 2. 크기조절 rx.text는 font_size 파라미터로 크기를 조절할 수 있습니다. 3. 특정 라인수를 넘어갈 때 자르고 싶다면? rx.text에는 no_of_lines라는 속성(prop)이 있습니다. 긴 텍스트를 표현해야 할 때, 레이아웃이 깨지는 것을 방지하기 위해 특정 라..
2023.09.22
-
[pynecone] Dall-E 2 이미지 생성 앱 만들기⑤ #마치며
파인콘으로 이미지생성앱 만들기 마지막 시간입니다. 지난 포스팅에서 사실상 앱을 완성한 거나 다름이 없었는데, 2023.02.16 - [pynecone 튜토리얼] - [pynecone] Dall-E 2 이미지 생성 앱 만들기④ [pynecone] Dall-E 2 이미지 생성 앱 만들기④ 들어가기 전에 지난 시간에는 작정하고 우리 앱에 들어가는 파인콘 컴포넌트 10개를 모두 짚어보았습니다. 사실 컴포넌트가 어떻게 작동하고 어떤 속성을 지녔는지를 파악했다면, 이들을 배치 martinii.fun 이번 포스팅에서는 세 가지 정도만 다듬어보겠습니다. 바로, ① 프로그레스바는 이미지 생성중에만 나타나게 하기(pc.cond 활용) ② 프롬프트 하나로 이미지 여러 개 한 번에 생성하기 ③ API 오류 발생시 window..
2023.02.16
-
[pynecone] Dall-E 2 이미지 생성 앱 만들기④ #State
들어가기 전에 지난 시간에는 작정하고 우리 앱에 들어가는 파인콘 컴포넌트 10개를 모두 짚어보았습니다. 사실 컴포넌트가 어떻게 작동하고 어떤 속성을 지녔는지를 파악했다면, 이들을 배치하고 조합하는 코딩은 듀플로를 조립하듯 너무 간단한 일입니다. 기억이 나지 않으면 검색하면 되고요. https://pynecone.io/docs/library 알려드렸죠? 그래서 프론트엔드 중에서도 UI 파트라고 할 수 있는 index 함수를 짜는 것보다 더 중요한 것은 웹앱의 상태값(변수 등)을 저장하는 State클래스에 대해 이해하는 것입니다. 지난 튜토리얼에서도 계속해서 State 클래스와 State 변수에 대해 설명드렸지만 가장 중요한 점은 State 클래스 안에 정의된 변수들은 특별한 기능을 지녔다는 것입니다. 바로..
2023.02.16
-
[pynecone] Dall-E 2 이미지 생성 앱 만들기③ #컴포넌트
지난 포스팅에서는 우리 튜토리얼 프로젝트인 Dall-E 웹앱에 들어가는 구성요소, 즉 우리 앱을 구성할 컴포넌트 목록에 대해 알아보았습니다. 2023.02.15 - [pynecone 튜토리얼] - [pynecone] Dall-E 2 이미지 생성 앱 만들기② [pynecone] Dall-E 2 이미지 생성 앱 만들기② 지난 포스팅에서는 openai.com Dall-E2의 API를 활용하여 이미지를 생성해보았습니다. (아직 본격적인 파인콘 앱을 만들지는 않았습니다.) 2023.02.15 - [pynecone 튜토리얼] - [pynecone] Dall-E 2 이미지 생성 앱 martinii.fun 이번 포스팅에서는 우리가 이 앱에서 다룰 컴포넌트에 대해 개략적으로만 알아봅시다. 코드에 출현하는 10개의 컴포넌..
2023.02.16
-
[pynecone] Dall-E 2 이미지 생성 앱 만들기② #UI배치
지난 포스팅에서는 openai.com Dall-E2의 API를 활용하여 이미지를 생성해보았습니다. (아직 본격적인 파인콘 앱을 만들지는 않았습니다.) 2023.02.15 - [pynecone 튜토리얼] - [pynecone] Dall-E 2 이미지 생성 앱 만들기① [pynecone] Dall-E 2 이미지 생성 앱 만들기① 이번에 밑바닥부터 만들어볼 pynecone 앱은 바로 Dall-E 이미지 생성기입니다. 아시다시피 Pynecone은 React.js라는 자바스크립트 UI 라이브러리를 래핑한 파이썬 패키지인데요. 파이썬 풀스택 웹프레임 martinii.fun 이번 포스팅은 본격적으로 코딩을 시작하기 전에.. 우리가 진행할 파인콘 프로젝트를 차근차근 알아가봅시다. 입문자를 대상으로 하는 만큼, 가급적 ..
2023.02.15
-
[pynecone] Dall-E 2 이미지 생성 앱 만들기① #프로젝트 생성
이번에 밑바닥부터 만들어볼 pynecone 앱은 바로 Dall-E 이미지 생성기입니다. 아시다시피 Pynecone은 React.js라는 자바스크립트 UI 라이브러리를 래핑한 파이썬 패키지인데요. 파이썬 풀스택 웹프레임워크라는 이름답게 간단한 파이썬 코드만으로 위와 같은 웹앱을 금세 만들어낼 수 있습니다. 대신 리액트나 Next.js에 대한 지식이 조금이라도 있으면 보다 쉽게 pynecone을 이해할 수 있는 것 같아요. 지난 튜토리얼인 투두리스트처럼 pynecone 프로젝트를 하나 생성하고 시작하겠습니다. pynecone을 아직 설치하지 않으셨거나, pynecone 프로젝트 생성이 처음이신 분은 아래 포스팅을 참고해주세요. 파인콘 및 node.js를 설치합니다. (martinii.fun) 파인콘 및 no..
2023.02.15
-
[pynecone] 리액트 컴포넌트를 파인콘에서 사용하기 #react-colorful
이번 포스팅에서 파인콘에 집어넣어 볼 리액트 컴포넌트는 react-colorful 입니다. omgovich/react-colorful: 🎨 A tiny (2,8 KB) color picker component for React and Preact apps (github.com) GitHub - omgovich/react-colorful: 🎨 A tiny (2,8 KB) color picker component for React and Preact apps 🎨 A tiny (2,8 KB) color picker component for React and Preact apps - GitHub - omgovich/react-colorful: 🎨 A tiny (2,8 KB) color picker compone..
2023.01.29
-
Pynecone tutorial: 추가버튼클릭시 인풋 컴포넌트 비우기
지난 포스팅까지, 파인콘 데모 갤러리에서 가장 쉬워 보이는 투두리스트에 대한 튜토리얼을 마쳤습니다. 2023.01.19 - [pynecone 튜토리얼] - Pynecone tutorial: Todo앱을 만들어봅시다. 2023.01.20 - [pynecone 튜토리얼] - Pynecone tutorial: Todo앱의 로직파트 작성하기 2023.01.21 - [pynecone 튜토리얼] - Pynecone tutorial: 투두리스트 스타일 매기기 그런데, 다른 투두리스트 앱을 사용해보셨거나 UX에 관심이 있는 분이시라면 아주 불편한 점 두 가지를 분명 느끼셨을 거라고 생각합니다. ① 꼭 버튼을 마우스로 클릭해야 하나? 할일 입력하고 엔터만 치면 바로 할일목록에 추가할 수 없을까? ② 추가버튼 클릭할 때 ..
2023.01.22
-
Pynecone tutorial: 투두리스트 스타일 매기기
지난 포스팅에서는 로직 파트까지 구현하고 마쳤습니다. Pynecone tutorial: Todo앱의 로직파트 작성하기 지난 시간에는 화면의 컴포넌트를 모두 구성해보았습니다. Pynecone tutorial: Todo앱을 만들어봅시다. 지난 포스팅에서는 터미널에서 pc run을 실행하여 pynecone 프로젝트를 초기화할 때 생성되는 프로 martinii.fun 이번 마지막 포스팅에서는 CSS스타일을 매겨서 우리의 앱을 더 예쁘게 만들어보겠습니다. 본격적으로 시작하기 전에 Pynecone 웹앱에 스타일을 매기는 세 가지 방법에 대해 간략히 설명드리겠습니다. 참고로 일반적인 CSS 스타일 적용방법은 인라인 스타일(Inline style) 내부 스타일 시트(Internal style sheet) 외부 스타일 ..
2023.01.21
-
Pynecone tutorial: Todo앱의 로직파트 작성하기
지난 시간에는 화면의 컴포넌트를 모두 구성해보았습니다. Pynecone tutorial: Todo앱을 만들어봅시다. 지난 포스팅에서는 터미널에서 pc run을 실행하여 pynecone 프로젝트를 초기화할 때 생성되는 프로젝트의 구조에 대해 간략히 훑어보았습니다. 이번에는 본격적으로 react의 hello world로 불리는(?) todo martinii.fun 이번 포스팅에서는 아래와 같은 로직 파트를 추가하려고 합니다. Pynecone에서는 데이터베이스 관련해서, sqlite와 파이썬의 아주 훌륭한 ORM 툴인 sqlalchemy를 탑재하고 있습니다. 다만, 이번 시간에는 데이터베이스 대신 파이썬의 list 자료형을 사용해보겠습니다. Pynecone의 코드가 pure python이라서 참 좋은 점 중 ..
2023.01.20
-
reddit에 pynecone 개발진이 직접 작성한 글
아래의 글은 지난달 레딧에 올라온 파인콘의 소개글입니다. 공식 홈페이지에서도 확인할 수 있지만, pynecone을 제작하게 된 계기와 특징을 잘 설명해 주고 있습니다. Hello, we just launched the alpha release of Pynecone - a way to build full-stack web apps in pure Python. The framework is easy to get started with even without previous web dev experience and is completely open source / free to use. 안녕하세요, 우리는 순수 Python으로 풀 스택 웹 앱을 구축하는 방법인 Pynecone의 알파 릴리스를 방금 출시했습니다..
2023.01.19
-
pynecone을 고작 이 두 사람이 만들고 있다고?
pynecone에 버그가 너무 많아 답답해서 최근 pynecone 프레임워크에 푹 빠져 공부도 하고 포스팅을 작성하고 있는데, 버그가 너무 많아서 답답하기도 하고 짜증이 났습니다. 공식문서도 부족해 보이고.. 해외 포스팅도 거의 없는 상태... 그래서 이슈라도 끄적이러 깃헙에 들어갔다가, 이슈가 어마어마하게 쌓이고 있는 걸 보고는 되려 미안한 마음과 함께 이들에 대한 궁금증이 생겼습니다. 도대체 누굴까? 이런 프레임워크를 만드는 사람들은? 그리고 구글링을 하다 우연히 재미있는 영상을 발견했습니다. 3개월 전, 2022년 9월에 업로드 된 영상이고, 조회수는 300여회, 구독자는 5명인 Nikhil Rao라는 쪼렙 채널이었습니다. pynecone-io 공동설립자인 Alek Petusky(좌)와 Nikhil..
2023.01.19
-
Pynecone tutorial: Todo앱을 만들어봅시다.
지난 포스팅에서는 터미널에서 pc run을 실행하여 pynecone 프로젝트를 초기화할 때 생성되는 프로젝트의 구조에 대해 간략히 훑어보았습니다. 이번에는 본격적으로 react의 hello world로 불리는(?) todo앱을 pynecone으로 시작 단계부터 간단히 구현해보겠습니다. 우리가 만들 todo앱은 아래와 같은 모습입니다. 아쉽게도 on_key나 on_enter 같은 키보드입력 이벤트는 아직 pynecone에 구현되어 있지 않습니다. 투두리스트에 할 일을 추가할 때 버튼을 클릭하지 않고 엔터키를 누르면 바로 할 일이 추가될 수 있도록 하여 사용자 경험을 개선하고자 하는 제안들이 많이 있고, 개발진에서도 바로 다음 릴리즈에서 추가하겠다고 하니, 빠른 업데이트를 기다려봅니다. 출처 : Input ..
2023.01.19
-
pynecone 프로젝트의 구성파일 및 구조
django를 배우기 시작한지는 7년 정도 된 것 같습니다. 당시에는 데이터분석이나 머신러닝보다는 바로 django 때문에 파이썬을 배우는 사람들이 많았던 분위기였습니다. 저도 다른 언어나 프레임워크를 배울 때와 다르게 django를 배울 때에는 시작부터 어딘지 마음이 든든했습니다. "나를 위한 모든 것이 이미 준비된" 느낌이었으니까요. django는 프로젝트 구조가 다소 복잡하지만, 어느 정도의 진입장벽만 넘고 나면 배우면 배울수록 "개발한다"기보다는 "발견한다"는 짜릿한 느낌이 있었습니다. 하지만 자랑이라도 하듯 600쪽이 넘는 방대한 분량의 공식문서는 엄청난 기능들과 편의성에도 불구하고, 아이러니하게 "부담"으로 다가왔습니다. 7년이 지난 지금도 입문 수준을 벗어나지 못했습니다. 그리고 정반대의 이..
2023.01.18
-
파인콘 첫 번째 예제, 카운터 앱
카운터 앱 만들어보기 파인콘의 공식문서에서 제공하고 있는 첫 번째 예제, 카운터 앱을 같이 만들어봅시다. 전체 소스코드와 영문 설명은 아래 링크의 문서에서 확인하실 수 있습니다. https://pynecone.io/docs/getting-started/introduction 전체 소스코드를 먼저 보여드리기보다는;;; 같이 틀을 잡아가면서 한 줄씩 완성해봅시다. 파인콘 앱과 인터랙션에 대해 이해하는 좋은 예제이기 때문입니다. 1. 파인콘 앱을 추가해줍니다. 앱을 추가하는 것이 복잡한 과정은 아닙니다. 그냥 폴더 하나, 파일 하나 생성하는 것에 지나지 않습니다. 이전 포스팅에서 예제를 테스트하면서 파이참 프로젝트를 생성하셨던 분들이라면 굳이 파이참 프로젝트를 하나 더 생성하지 마시고, 아래와 같은 과정을 통..
2023.01.17
-
파인콘 웰컴페이지 소스 훑어보기
소스코드는 아래와 같습니다. 간단해 보이지만 파인콘의 핵심이 되는 요소들이 전부 들어가 있으므로 프로젝트 구조와 더불어 이 코드를 한 번 훑어보는 것은 큰 도움이 될 것 같습니다. """Welcome to Pynecone! This file outlines the steps to create a basic app.""" from pcconfig import config import pynecone as pc docs_url = "https://pynecone.io/docs/getting-started/introduction" filename = f"{config.app_name}/{config.app_name}.py" class State(pc.State): """The app state.""" pass..
2023.01.17
-
파인콘 및 node.js를 설치합니다.
1. pynecone 및 node.js 설치 1-1. pip install pynecone-io 파인콘을 설치하는 방법은 간단합니다. pypi로 설치가 가능하기 때문입니다. 파이썬 가상환경을 하나 생성한 후, 터미널에서 pip install pynecone-io 를 실행하면 파인콘의 설치가 완료됩니다. 파이참을 사용하시는 분이라면, 프로젝트를 먼저 생성한 후 가상환경에서 pip 설치를 하시면 되겠습니다. pynecone과 별개로, 여러분의 PC에 NodeJS가 설치되어 있어야 합니다. node.js의 설치는 클릭 몇 번이면 해결되니 아래 과정을 따라해 주시면 되겠습니다. 1-2. Node.js 설치 노드JS는 12.22 이상의 버전이 필요합니다. 2023년 1월 현재 기준으로 최신버전은 19.4이며, L..
2023.01.17
-
파인콘(pynecone)이란 무엇인가?
파인콘이 무엇인가요? 2022년 공개되어 화제를 몰고 온 파인콘에 대한 포스팅을 연재하려고 합니다. 파인콘(pynecone)은 순수한 파이썬 언어만으로 개발 가능한 오픈소스 풀스택 프레임워크입니다. 파이썬 진영에도 이미 유명한 웹앱 프레임워크들이 있습니다. Django, Flask, FastAPI 등 각자의 개성과 스탠스를 가지고 적용범위를 넓혀 왔는데요. 파인콘은 (자칭) 풀스택 파이썬 프레임워크입니다. 간단한 웹앱을 몇 분 안에 구축할 수 있고, 배포도 쉬우면서, 기존 웹개발의 유연성과 성능을 적당히 갖춘 low-code 프레임워크인데요. 내부적으로 React, NextJS, ChakraUI 및 FastAPI 백엔드 등을 래핑하여 자연스럽고 간단한 파이썬 문법만으로 아름답고 기능적인 웹앱을 구축할 수..
2023.01.17
파이썬-한/글 실무응용 관련
-
아래아한글 액션아이디와 대응 파라미터셋 목록
Action ID ParameterSet ID Description AllReplace FindReplace 모두 바꾸기 AQcommandMerge UserQCommandFile 입력 자동 명령 파일 저장/로드 (글메뉴의 [도구-빠른 교정-빠른 교정내용]에서 [입력 자동 명령 사용자 사전] 대화상자) ParameterSet을 직접 조작하여 사용함. Average Sum 블록 평균 BackwardFind FindReplace 뒤로 찾기 Bookmark BookMark 책갈피 CellBorder CellBorderFill 셀 테두리 CellBorderFill CellBorderFill 셀 테두리 CellFill CellBorderFill 셀 배경 CellZoneBorder CellBorderFill 셀 테..
2024.01.12
-
[인프런 QnA] 용지설정 관련 질문입니다!
감사히 잘 활용하는 중에 질문이 있어서 글을 남깁니다 제가 용지 설정(F7)의 좌우 여백을 15mm로 설정하고자 문서를 찾기 시작했습니다. 제가 찾은 것은 다음과 같습니다. ActionTable : PageSetup - 편집용지 ParameterSet ID = SecDef ParameterSet Table 의 SecDef를 확인하니 Item이 PageDef로 SubType을 지정하도록 합니다. 따라서 PageDef를 찾은 결과 LeftMargin과 RightMargin을 찾을 수 있었습니다. SecDef를 넣어도 PageDef를 넣어도 에러가 발생합니다. 혹시 SecDef의 SubType를 PageDef로 지정하는 방법이 따로 존재하는 것인지 질문드립니다. 여기서 제가 사용한 코드는 다음과 같습니다. a..
2024.01.05
-
[원데이클래스 안내] 9.2(토) 동대구역 앞 보고서 작성 자동화 원데이 클래스
처음으로 공지포스팅을 올려봅니다. 9월2일 토요일 오후 2시 동대구역 인근에서 보고서 작성 관련 업무자동화 튜토리얼로 원데이클래스를 진행하게 되었습니다. 이번까지만 오프라인으로 진행하고, 앞으로는 줌 등으로 온라인 과정도 개설하겠습니다. 접수는 온오프믹스 플랫폼을 활용하오니, 관심 있으신 야근러 분들의 많은 참여 바랍니다^^ 입문자를 대상으로 커리큘럼을 짰지만, 참석하신 분들의 수준을 고려하여 유연하게 커리큘럼 수정 예정입니다.
2023.08.31
-
[업무자동화 영상 튜토리얼] 데이터프레임으로 아래아한글 보고서 만들기
최근 우리나라 대학교 외국인 유학생 하반기 모집기간이었어요. 그래서 이번 실무 튜토리얼 주제도 이걸로 잡아보았습니다. 외국인 학생이 제출한 지원서류에 문제가 없으면, 학생 명단을 학과별로 정리하여 각 학과에 통보하고, 학과심사 서식, "심사 리스트"를 작성해서 각 학과로 보내주게 되는데요. 그런 일련의 과정 중 학생명단 엑셀파일을 아래한글 심사리스트로 만드는 작업을 파이썬으로 처리하는 영상입니다. 편집과 설명이 다소 미흡하지만 전반적인 프로세스를 이해하고 코드 위주로 읽고 따라해보시면 크게 어렵지 않을 것이라 생각됩니다. 종종 유용한 튜토리얼 영상으로 찾아뵙겠습니다. 행복한 하루 되세요^^ 튜토리얼 영상 튜토리얼에 사용한 문서자료
2023.06.18
-
[QnA] 참조조항번호를 일괄변경하는 간단한 방법
안녕하세요 혹시 영향 있는 조항도 따라서 잡아주나요? 제 1조 1항 : ㄱㄴㄷ 2항 : ㄹㄹㄹ 제 2조 1항 : 제1조 2항에 의해 ㅇㅇ한다 에서 제1조 2항이 사라지면 제2조 1항 : 제1조1항에 의해 ㅇㅇ한다 로 자동으로 바뀌게도 가능한걸까요? 가능합니다. 아래처럼 누름틀을 매겨두고 간단한 함수를 실행하면 의도하시는 액션을 구현할 수 있겠습니다. (엄밀히 말해, "실시간 완전자동"은 아니에요ㅎㅎ) 예를 들어 아래와 같은 문서가 있다고 가정합시다. 제3조제1항 안의 붉은색 숫자 두 개는 제2조제1항제2호를 참고하고 있는데요. 네 개의 붉은색 글자 안에 모두 누름틀이 매겨져 있습니다. 위에서부터 차례대로 "정의_src", "건축물_src", "정의_dst", "건축물_dst"라는 누름틀을 임의로 매겨놓았..
2023.04.25
-
[QnA] 바탕쪽 삭제하기
질문 주신 내용 SetMessageBoxMode(0x10000) 을 이용하시면 [Yes/No] 케이스의 팝업 출현시 [Yes]를 자동클릭해줍니다. 아래 영상을 참고해 주시기 바랍니다^^ SetMessageBoxMode 실행 후에는 꼭! 해당 설정을 초기화해주는 코드(hwp.SetMessageBoxMode(0xf0000)를 잊지 맙시다^^ 도움이 되었길 바랍니다. 행복한 하루 되세요!
2023.04.06
-
[인프런QnA] 개체 여백 조정 방법
표 혹은 그림이든 개체 여백조정을 하고자 합니다. 매크로정의하고 코드편집에 따라서 해보았는데요 잘 동작하지 않네요..ㅠㅠ 아래는 개체 바깥 여백조정을 위한 함수를 만들어 본 예제입니다. 바깥 윗여백만 조정하는 것으로 했습니다. ####################### def Change_Object_Blank(): hwp.HAction.GetDefault("CellBorderFill", hwp.HParameterSet.HCellBorderFill.HSet) hwp.HParameterSet.HCellBorderFill.Hset.SetItem("ApplyTo", 1) hwp.HAction.Execute("CellBorderFill", hwp.HParameterSet.HCellBorderFill.HSet) ..
2023.03.30
-
[QnA] 표창장 만들기 응용버전
안녕하세요 엑셀 파일 토대로 상장제작 자동화를 하다가 궁금한점이 있어서 질문합니다. 엑셀 2행에 연번, 개인/단체, 회사, 직급, 이름, 주민등록번호 등 다양한 내용이 있는데 이런 셀의 내용은 hwp상장파일에 4개 정도 정보(이름, 회사, 직급, 내용)가 들어갑니다. 이 이름, 회사, 직급, 내용의 행을 찾아서 그 밑에 내용을 채워넣는것은 어떻게 코드를 수정해야 할까요.. 예제파일 1. df를 이용하는 방법 import win32com.client as win32 import pandas as pd def 한글_시작(): hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject") hwp.XHwpWindows.Item(0).Visible = True hwp.Re..
2023.03.16
-
[python+hwp] 자간 자동조정프로그램 리뉴얼
import os # 파일 경로를 다루기 위한 모듈 from tkinter.filedialog import askopenfilenames # 파일 선택창을 띄우기 위한 모듈 import win32com.client as win32 # 아래아한글을 열기 위한 모듈 def 한글_시작(): """ 아래아한글을 시작하는 함수 """ hwp = win32.Dispatch("hwpframe.hwpobject") # 한/글 실행 # hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject") # 한/글 실행 hwp.XHwpWindows.Item(0).Visible = True # 한/글 프로그램 백그라운드 해제 hwp.RegisterModule("FilePathCheckDL..
2023.03.02
-
[python+hwp] 한/글2022 문서끼워넣기 버그와 대처방법
clapeyon님의 제보를 받고 테스트를 해봤는데 정말 문서 끼워넣기가 제대로 작동하지 않네요ㅜ 사실 저도 한/글 2022를 쓰고 있습니다. 처음에는 '이 분께서 뭔가 잘못 입력하셨겠지..' 싶었는데 테스트해보니까 정말 어떻게 해도 여백이 조절이 되지 않아서, 후다닥 포스팅을 적어봅니다. 문서 끼워넣기 대신 쪽복사를 이용한 방법입니다. 소스코드를 먼저 보여드리겠습니다. import os import win32com.client as win32 from tkinter.filedialog import askopenfilename, askopenfilenames # def 페이지이동(hwp, page): # hwp.HAction.GetDefault("Goto", hwp.HParameterSet.HGotoE.H..
2023.02.14
-
[python+hwp] 불규칙한 데이터의 삽입 feat. [문서끼워넣기, 데이터프레임]
안녕하세요! 일코 선생님! R 을 활용해 통계분석을 하고있다가 파이썬 공부를 막 시작한 직장인 입니다. 분석 결과물은 다 내놓았는데, 결과물을 일일히 수작업으로 한/글로 옮기기엔 너무 방대하고, 기계적이라 열심히 구글링을 하던 도중 선생님의 블로그를 알게 되었습니다. 내용을 보자마자 바로 이거다! 하고 인프런 강의까지 신청했습니다! 강의를 보며 직접 코드를 짜 자동화를 도전해보려고 했는데, 강의 내용 여러개를 복합적으로 활용해야하는 것 같아서, 어떻게 풀어나가야 할지 막막하기도 하고(통계분석 위주로 작업하다 보니 반복문 짜는것은 힘든 수준입니다.), 수강생들에 한해 자동화 코드 제작에 도움을 주신다고 하여 문의 드립니다. 자동화 하고 싶은 내용을 대략적으로 설명드리면, 첫번째 페이지에는 결과물 엑셀파일의..
2023.02.09
-
[python+hwp] 파이썬+한/글로 가장 강력한 문자열 가공 프로그램 만들기 #스크립트txt를 영상자막용 srt포맷으로 변경하기
아래 유튜브 영상의 소스코드를 공개합니다. 예시문서(txt)를 3개 첨부해 두었습니다. txt 스크립트 출처 talkpython/mastering-pycharm-course: Course demos and handouts for Talk Python's Effective PyCharm course (github.com) GitHub - talkpython/mastering-pycharm-course: Course demos and handouts for Talk Python's Effective PyCharm course Course demos and handouts for Talk Python's Effective PyCharm course - GitHub - talkpython/mastering-py..
2023.02.08
-
[python+hwp] 생각보다 hwp 업무자동화가 어렵다면...
한컴오피스 업무자동화 튜토리얼을 블로그와 유튜브에 몇 년간 작성해 오면서 받았던 모든 피드백 중에 "감사하다"는 의견을 제외하면 "너무 어렵다"는 말씀이 가장 많습니다. 저도 이게 큰 고민거리인데요.. 제 설명이 미흡한 탓이라는 생각이 드니까 반성도 많이 하게 되고요. 제 기준에서 '의외로 쉽고, 이해하면 간단하기도 하다.'는 막연한 느낌은 아마 제가 입문자들의 레벨을 벌써 잊어버렸기 때문일 것입니다. 아마도 제가 "한/글 업무자동화"를 쉽다고 생각하는 첫 번째 이유는, 당장 방법이 생각나지 않거나, 막히더라도 어떤 과정으로 해답을 찾아가야 하는지 알기 때문인 것 같습니다. 그래서 이번 포스팅에서는 일반적으로 활용할 수 있는 한/글 업무자동화 코드작성 과정을 의식의 흐름대로 한 번 쭉 써내려가 보려고 합..
2023.02.01
-
[QnA] 글상자 내용을 밖으로 꺼내기
안녕하세요. 특정 디렉토리의 여러 hwp 파일 안에 있는 텍스트 상자의 텍스트를 Ctrl + A로 전체복사해서 골라 붙이기 한 후 저장하는 행위를 일괄적으로 수행하는 프로그램을 짜고 있는데(https://hyyoka-ling-nlp.tistory.com/7 위 게시글을 참고했습니다.) 계속 Error opening (-2147417851, '서버에서 예외 오류가 발생했습니다.', None, None) 혹은 Error opening (-2147023170, '원격 프로시저를 호출하지 못했습니다.', None, None) 혹은 Error opening (-2147023174, 'RPC 서버를 사용할 수 없습니다.', None, None) 과 같은 오류가 아무리 구글링해서 나오는 해결책을 써봐도 해결이 되지 ..
2023.01.27
-
[영상] 아래아한글 표 캡션 일괄수정하는 파이썬 코드
움짤로 빠르게 배우는 파이썬-아래아한글 자동화 레시피 | 학습 페이지 (inflearn.com) 학습 페이지 www.inflearn.com 파이썬-아래아한글 업무자동화 관련 30분 분량의 무료영상입니다. 템플릿이 있는 논문이나 보고서를 작성하다 보면 표나 그림의 캡션 위치 및 서식을 일괄수정해야 하는 경우가 생깁니다. 개체가 예닐곱 개 정도라면 수작업으로 포맷이나 위치, 정렬을 수정하면 되는데 페이지가 많고, 표나 그림 개체 수도 제법 많으면 전형적인 "에너지소모적이고 시간을 죽이는" 업무가 됩니다. 이 때 활용할 수 있는 파이썬 팁을 상세히 알려드립니다. 전체 파이썬코드를 본문 하단에 첨부해 두었으니 한컴오피스 업무자동화에 관심 있으신 분들은 한 번 방문하셔서 코드를 읽어보시거나, 영상을 시청하시면서 ..
2023.01.16
-
[QnA] 문서 자동교정 프로그램 만들기
안녕하세요! 일상의 코딩님! 매번 올려주신 영상 유용하게 보고 있는 구독자입니다! 다름이 아니라, 코딩님 블로그를 보니 한글에서 메일머지기능과 매크로를 이용한 여러 단어 찾아바꾸기 자동교정하는 법 올려주셨더라구요...! ㅎㅎ 어깨와 팔의 심신이 고달픈 차에 좋은 정보를 알게 되어 매크로 함수를 카피해서 적용을 해보려고 했는데...이 분야가 생소해서 글이 잘 이해가 안가더라구요...하하 물론...오류를 내고... 적용엔 실패했습니다...ㅠㅠ 혹시 언제 시간나실 때! 채널에 적용 방법 공유해주시면 좋을 것 같아서 댓글 남겨봅니다! 한글을 이용한 문서 편집자들에겐 참 좋은 정보가 될 것 같아서요! ㅎㅎ 항상 좋은 정보 감사드리고 2023년 복 많이 받으세요!!! 우선 실습을 진행하기 위한 파일을 다운받아주세요..
2023.01.13
-
[QnA] 엑셀의 날짜 칼럼을 한/글로 옮길 때 서식 정하는 방법
좋은 영상 감사 합니다 몇일 걸려 겨우 겨우 한글, 엑셀 불러와 마지막 필드 값 채우는 데 성공 했습니다 한글에서 날짜가 26 Sep. 2022 이렇게 표현되게 하고 싶어 엑셀에 미국식 표기법으로 만들었는데 한글에 입력된것은 2022-09-27 00:00:00 + 00:00 이렇게 나옵니다. 도움 부탁 드립니다. 제 유튜브 영상에 달아주신 댓글 중 하나입니다. 이 문제를 해결하려면 파이썬의 datetime 모듈을 사용하는 방법이 가장 간편합니다. 우선 아래와 같이 파이썬으로 엑셀과 한글을 같이 열어주고 import win32com.client as win32 def insert_text(text): act = hwp.CreateAction("InsertText") pset = act.CreateSet()..
2022.12.28
-
현재 조판부호가 보이는 상태인지 확인하는 함수 만들기
한/글 자동화 단축명령어 중에는, 조판부호 보이기 상태를 토글하는 명령어가 있습니다. 다만, 현재 어떤 상태인지 리턴해주는 명령어는 없기 때문에 문서를 조작할 때 애먹을 때가 있습니다. 예를 들면 글자처럼 취급되지 않는 이미지나 표를 복사할 때 조판부호를 선택할 수 있어야 복사가 가능한 경우가 있는데 현재 조판부호가 보임 상태인지 확인할 길이 없(다고 생각했)거든요. 그래서 나름의 방법을 고안해서 함수를 만들었습니다. 다른 여러 가지 방법도 있겠지만 제가 사용한 방법은, "고정폭 빈칸 썼다 지우기"입니다. 고정폭 빈칸도 일종의 컨트롤이라서, 제법 글자수를 많이 잡아먹거든요. 그런데 재미있는 건, 조판부호 보임 상태에서는 고정폭 빈칸이 14자를 잡아먹고, 조판부호가 숨겨진 상태에서는 고정폭 빈칸이 한 글자..
2022.12.27
-
모든 날짜 문자열 끝에 요일 붙이기
안녕하세요? 이번 포스팅에서는 이번 포스팅에서는 "12.20." 이런 형식의 날짜 문자열을 "12.20.(화)"라고 요일을 붙이는 코딩을 알려드리겠습니다. 작업 개요 요새 연말이라 기성이나 준공계 제출 등으로 바쁘신 분들 많이 계시죠? 저는 최근에 이런 문서를 편집하게 되었습니다. 내용은 대략 아래와 같습니다. 날짜가 빼곡하게 적혀 있는 실적표입니다. 어떤 종류의 작업을 날마다 어느 현장에서 시행했는지 적어놓은 문서죠. 편집을 마무리할 때 쯤 저녁무렵이 되었는데, 날짜 뒤에 괄호로 요일을 전부 적어놓으면 더 낫지 않을까?ㅎㅎ 라는 의견이 불쑥 나왔습니다... 그렇다면 요즘 한/글 자동화 포스팅을 부쩍 자주 올려서 그런지 뚝배기가 평소보다 잘 구릅니다. 머릿속에서 아이디어가 금방 정리되었습니다. 1. "m..
2022.12.20
-
한/글 표로 차트 그리기(확산형 누적막대)
다음과 같은 설문데이터가 있습니다. 시각화를 해 보고 싶은데 일반적인 누적막대로는 행간의 차이가 뭐랄까 극적이지 않습니다. 그래서 경계선으로 정렬해서 좌우로 튀어나오게 아래와 같은 차트를 만들어 보고 싶었습니다. 가장 자주 사용하는 "수업 안내"의 점유율이 높다는 정보가 시각적으로 훨씬 더 두드러지는 느낌입니다. 재미있게도 위 이미지는 아래아한글 표로 직접 만든 차트입니다. 구현을 고민하는 데 시간이 많이 들기는 했지만 코드 자체는 길지 않을뿐더러, 생각보다 간단합니다. 코드와 시연화면을 보여드리겠습니다. 파이썬 코드 import os from time import sleep import win32com.client as win32 import pandas as pd def shift(percent, d..
2022.12.18
-
한/글 프로그램 없이 hwp->pdf 변환하기
혹시 한글 프로그램 없이 hwp->hwpx 변환 또는 hwp->pdf 변환이 가능한가요? 가끔 읽어야하는 문서가 hwp 파일인 경우가 있는데 한글 프로그램이 없어서 난처한 경우가 많습니다🥲 많은 분들이 짐작하셨겠지만 한글과컴퓨터 오피스온라인에 대한 포스팅입니다. 데스크탑 어플리케이션에 가깝게 만들어진, 한컴에서 제공하는 정말 유용한 웹앱인데요. 이번 포스팅에서는 한컴오피스 온라인을 통한 파일변환 방법에 대해 알려드리겠습니다. 천천히 따라해 주시기 바랍니다. 1. 한컴독스 사이트에 접속합니다. 한글과컴퓨터에서 새롭게 제공하는 웹페이지입니다. 한컴독스 (hancomdocs.com) 한컴독스 매 순간 어디서든지 최신 버전으로 문서 작성 가능한 구독형 한컴오피스 www.hancomdocs.com 2. 좌측의 파..
2022.12.18
-
hwp 표 캡션 서식 일괄 수정하기
이번 포스팅에서는 모든 표들의 캡션 텍스트 또는 서식을 파이썬으로 일괄 수정하는 방법을 알려드리겠습니다. 예제는 다소 간단하게, 아래처럼 표 하단 좌측으로 정렬되어 있는 캡션을 아래처럼 상단 중앙으로 옮기는 코드입니다. hwp문서 안에서 표 캡션을 수정하려면 다소 번거롭습니다. 대부분은 직접 마우스로 클릭하실 거고, (저도 그렇습니다) 실수로 표 옆이나 표 안에서 Ctrl-N-C 같은 단축키를 누르면 캡션이 없어져버리기 일쑤입니다ㅜ 특히 보고서나 논문(논문을 hwp로 작성하시는 분들이 많지는 않겠지만..) 작성시에는 분량이 큰 경우가 많은데, 표의 갯수가 어마어마할 때도 있지요. 샘플 문서를 하나 만듭시다. 빈 문서에다 표를 임의로 세 개만 만들겠습니다. (단축키는 Ctrl - New-Table) 여러분..
2022.12.09
-
[QnA] 표 너비 조절이 되지 않습니다.
이전 버전까지는 정상적으로 사이즈가 정상적으로 반영되었는데 특정패치이후에 안됩니다. 일시적인 버근줄알았는데 2022까지 계속 이어지네요. 문서의 width, widthRelTo를 적용해봐도 동일하게 용지사이즈만큼 늘어납니다. 질문출처 : 한글과컴퓨터 - 개발자 커뮤니티 이런 문제들은 대체로 이런 문제들은 대체로 필요한 파라미터 몇 개가 빠져 있어서 생깁니다. 표 생성시 필요한 파라미터가 굉장히 많기도 하고요. 프로그램에서 표를 만들면 행, 열의 수만 입력하고 엔터를 치면 표가 만들어지지만 이 간단한 과정을 매크로로 녹화해보면 깜짝 놀라게 됩니다. 코드가 너무 길거든요. 1행1열의 표를 삽입하는 매크로는 아래와 같습니다. function OnScriptMacro_중국어1성() { HAction.GetDef..
2022.12.09
-
[HDMI] 비슷한 문자열 매치 (by difflib.SequenceMatcher)
지난 포스팅까지, 스타일 이름을 가져오는 과정을 마쳤습니다. 이번에는 유사하지만 미묘하게 다른 단어들끼리 매칭할 때 많이 사용되는 파이썬 내장모듈인 difflib의 SequenceMatcher를 활용하는 방법을 알려드리겠습니다. 지금까지 이 고생을 해서 스타일 이름을 가져온 이유를 다시 상기해보면, 취합문서의 스타일 이름이 템플릿문서 대비 전부 미묘하게 바뀌어 있고 특히 템플릿의 스타일과 취합문서의 스타일 순서가 뒤죽박죽이 되어버렸기 때문입니다. (극단적인 예를 들었습니다.) 위 엑셀파일에는 취합문서 스타일의 이름이 템플릿 문서의 스타일과 전부 다릅니다. 여기 SequenceMatcher를 도입하면 어떨까? 그럼 SequenceMatcher의 사용법에 대해 간략히 보여드리겠습니다. 사실 SequenceM..
2022.12.07
-
[HDMI] 진짜 본격적으로 header.xml 파헤쳐보기
자, 이제 모든 준비가 끝났...다고는 말할 수 없지만 본격적으로 header.xml을 분석해보겠습니다. 왜 아직 모든 준비가 끝나지 않았냐면, 한/글의 xml 파일들은 "네임스페이스"라는 일종의 축약어를 사용하는데, 예를 들면, header.xml의 시작부분은 아래와 같습니다. 뾰족괄호와 콜론(:) 사이의 "hh"가 네임스페이스인데요. head 태그 안에 보면 xmlns:hh="http://www.hancom.co.kr/hwpml/2011/head" 라는 문구가 있습니다. xmlns 는 xmlNameSpace의 약자로, 이 문서 내 는 모두 실제 태그이름이 로 치환됩니다. iter() 메서드나 findall() 메서드 이용시 "hh:태그"로는 탐색이 되지 않기 때문에 1. 직접 저렇게 길게 입력하거나 ..
2022.12.07
-
[HDMI] 본격적으로 xml 파헤쳐보기
지난 포스팅에서는 hwp 파일을 hwpx로 포맷변환하고, 압축을 푸는 과정을 진행해보았습니다. 이번 포스팅은 본격적으로 xml 파헤쳐보기 입니다. xml파일을 파싱하는 라이브러리는 여러 개가 있지만 우리는 xml파서의 큰형님(?)이라 불릴 수 있는 내장 패키지인 xml을 이용해보겠습니다. 그 중에서도 ElementTree라는 모듈을 사용할건데요. (ElementTree 외에도 xml 패키지 안에는 dom, parsers, sax 등의 서브패키지가 포함되어 있습니다.) 그 전에 우리가 파헤칠 header.xml 문서를 한 번 열어나 보고 시작하자구요. 포맷변환이나 압축해제 등 이전 과정을 건너뛰고 파싱에만 관심 있으신 분은 아래 첨부한 header.xml 파일만 다운받아서 실습을 진행해주시면 되겠습니다. ..
2022.12.07
-
[HDMI] hwp를 hwpx로 포맷변환하고 압축 풀기
제목이 거창해 보이지만 사실 굉장히 간단한 프로세스입니다. 1. hwp를 hwpx로 포맷변환(다른 이름으로 저장) 2. hwpx파일 압축해제 이러면 제목이랑 똑같잖아!ㅜ 위 두가지 기능을 각각 구현해보겠습니다. 1. 다른이름으로 저장 한글에서 제공하는 API를 형식별로 크게 나누면 네 가지 정도가 있습니다. ①일반적인 메서드, ②프로퍼티, ③파라미터가 필요한 액션, 그리고 ④파라미터가 필요없는 액션 다른이름으로 저장하기 기능은 함수 형태의 메서드로도 구현되어 있습니다. hwp.SaveAs(파일명, 포맷)입니다. import win32com.client as win32 FILE_PATH = r"C:\Users\smj02\OneDrive\바탕 화면\빈 문서1.hwp" hwp = win32.gencache.E..
2022.12.07
-
[HDMI] 빈 문서1.hwpx를 분해해보면
안녕하세요? 일코입니다. HDMI(Hangul Document Manipulation and Information, 이름 참 잘 지었다!) 시리즈 예전에도 이와 관련한 포스팅을 한 번 올린 적은 있었습니다. 한/글 없이 hwpx 파일의 표를 pd.DataFrame으로 추출하는 방법 (tistory.com) 한/글 없이 hwpx 파일의 표를 pd.DataFrame으로 추출하는 방법 안녕하세요? 일상의 코딩, 일코입니다. hwpx 포맷이 만들어진지 벌써 10년도 훌쩍 넘었습니다. 한컴오피스에서는, 데이터 추출이 번거로운 기존의 hwp 포맷 대신 machine-readable한 hwpx 포맷을 사용해 martinii.fun 솔직히 말ㅆ므드리면 그 뒤로 틈틈이 파이썬의 xml 모듈 문서를 읽어보거나 튜토리얼을 ..
2022.12.07
-
[hwpx 분석하기] HDMI 시리즈를 시작하며
잠시 과거회상 업무자동화 공부를 시작한지도 벌써 6년이 넘었습니다. 사실 업무 중에 가장 많은 시간을 썼던 코드는 아래아한글이 아니라 파이썬-셀레늄으로 브라우저(회사 그룹웨어) 작업을 자동화하는 거였어요. 이게 나름 해킹하는 느낌의 재미가 있어서 파고들게 되었습니다. 해킹이라는 표현은 좀 오바 같지만, 공기업의 그룹웨어가 이렇게 취약점이 많을 줄은 몰랐거든요. 재직 당시 보안팀에 제보했던 수십 개의 취약점 중에 굵직한 걸 꼽으라면 그룹웨어 로그인 비밀번호 입력 무력화, 로그인할 때 휴대폰 2차인증 패스, 다른 사우 사번으로 그룹웨어 및 메신저 로그인하기, 타 부서 기록물, 비공개문서 열람하기, 비밀번호 "1"로 바꾸기 등등 서비스 대부분이 주로 클라이언트 측에서 자바스크립트로 이뤄지는 구조라서 소스코드만..
2022.12.07
-
[QnA] 문단 위, 문단 아래 간격이 적용이 안되고 0이 돼요..
혹시. 문단모양에서 문단 위 간격, 문단 아래 간격 값을 지정하는 방법을 알 수 있을까요? # 문단모양 설정 def para_style(align, LineSpace, prevSpace, nextSpace, breakline_div, min_space): # 정렬방식(왼쪽, 가운데, 오른쪽) / 줄간격 / 문단위 / 문단아래 / 줄나눔기준(어절, 글자) / 최소공백 act = hwp.CreateAction("ParagraphShape") # 액션생성 pset = act.CreateSet() # 파라미터셋 생성 act.GetDefault(pset) # 파라미터셋에 현재 상태값 넣기 pset.SetItem("AlignType", hwp.HAlign(align)) # 정렬("Justify", "Left", "..
2022.12.06
-
문서 중 특정 컨트롤을 모두 삭제하는 아주 간단한 코드
문서 안에서 쪽번호 위치나 새쪽번호, 감추기 같은 조판부호들은 일일이 찾기도 쉽지 않을뿐더러 본문이 긴 경우에는 페이지 밖으로 사라져 있기도 합니다. 문서가 긴 경우에는 이런 컨트롤들을 일일이 찾아서 삭제하는 것도 정말 시간을 많이 잡아먹는 일입니다. 다행히 한/글에서는 특정 조판부호를 모두 삭제하는 기능을 제공하고 있습니다. 아래 움짤은 문서 내 모든 고정폭빈칸 컨트롤을 삭제하는 예시입니다. 다행히 이 코드는 매크로 녹화가 되어서, 파이썬 코드로도 쉽게 고칠 수 있습니다. 녹화한 스크립트매크로는 아래와 같습니다. HAction.GetDefault("DeleteCtrls", HParameterSet.HDeleteCtrls.HSet); with (HParameterSet.HDeleteCtrls) { Cre..
2022.12.05
-
문서 중 짝수(또는 홀수)페이지를 전부 삭제하는 파이썬코드
코드를 먼저 보여드립니다. 간단한 주석을 옆에 달아놓았습니다. 이 코드는 한/글 2014 이하 버전에서는 작동하지 않습니다. act = hwp.CreateAction("DeletePage") # DeletePage 액션 생성 pset = act.CreateSet() # 파라미터셋 생성 act.GetDefault(pset) # 파라미터셋에 현재값 대입 pset.SetItem("Range", 2) # 삭제범위 설정. {2:RangeCustom에서 지정한 페이지만 삭제, 0:현재 쪽 삭제(RangeCustom 무시), 1:선택한 모든 쪽 삭제} pset.SetItem("RangeCustom", ", ".join([str(i) for i in range(1, hwp.XHwpDocuments.Item(0).XHw..
2022.12.05
-
[QnA] 파이참에서 한/글 API 코드 자동완성을 하고 싶어요!
파이참이나 VSCode에서 코딩을 해보면 자동완성 기능 덕분에 메서드를 빠르게 찾는 등 코드를 쾌적하게 짤 수 있는데, win32com으로 아래아한글 자동화를 할 때에는 자동완성이나 파라미터 정보 등이 하나도 뜨지 않아서 막막합니다. 좋은 방법이 없을까요? 예. 좋은 방법이 없는 것 같습니다. 솔직히 저도 사실 왜 IDE에서 한/글 API 코드의 자동완성이나 파라미터 정보가 안 뜨는지 잘 모르겠습니다. 아래 예시화면처럼 자동완성을 잘 잡아주면 참 좋을텐데요. 한/글 자동화 코드를 짤 때는 아래처럼 장님 코끼리 만지듯 허우적허우적 코딩하는 게 참 번거롭습니다. 모두 외울 수도 없는 노릇이고 수시로 API문서를 뒤적거리면서 코딩해야 하니까요. 그래도 나름 경험적으로 알게 된 몇 가지 팁이 있는데요. 업무자동..
2022.12.05
-
[QnA] pythonwin.exe로 한/글의 TypeLibrary 생성하기
이번 포스팅에서는 아래아한글 자동화 작업 때 메서드 인자명을 확인할 수 있는 타입라이브러리 파일 생성방법을 알려드리겠습니다. 대략 아래와 같이 생긴 파이썬 파일입니다. # -*- coding: mbcs -*- # Created by makepy.py version 0.5.01 # By python version 3.10.1 (tags/v3.10.1:2cd268a, Dec 6 2021, 19:10:37) [MSC v.1929 64 bit (AMD64)] # From type library 'HwpObject.tlb' # On Tue Sep 20 21:31:28 2022 'HwpObject 1.0 Type Library' makepy_version = '0.5.01' python_version = 0x30a..
2022.12.04
-
[QnA] 스타일문서를 임의로 변경한 경우 복원하기
안녕하세요. 한글자동화를 이용해 문서의 서식을 바꾸는 코드를 만들고 싶어 문의드립니다. 회사에서 보고서 작업을 하는데 동일한 문서에서 서식을 다르게 하여 수정 후 내용을 첨가하여 제출하는 경우가 많습니다. "서식 유지한 채로 스타일을 모두 "바탕글"로 바꾸는 코딩" 에서 일부 수정하면 될 것 같은데 "스타일_조회"함수에서 "Act = hwp.CreateAction("Style")"에서 object가 추출되지 않아서 Nonetype object로 되고 그로 인해 "Set = Act.CreateSet()" 부분이 작동하지 않아 오류가 발생합니다. 그래서 "hwp" 자식 클래스를 "dir" 함수로 살펴보는데 "CreateAction"는 있으나 그 하부에는 "Style"이라는 자식 클래스가 없습니다. 설치 과정..
2022.12.04
-
[QnA] A문서 스타일을 B문서에 적용하는 가장 간편한 코딩
더브릴레 가벼운 남자 여자 블루라이트차단 안경 COUPANG www.coupang.com 똑똑해 보이는 안경이네요! 여친 선물해주시면 좋겠어요^^ (이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.) 안녕하세요. 한글자동화를 이용해 문서의 서식을 바꾸는 코드를 만들고 싶어 문의드립니다. 회사에서 보고서 작업을 하는데 동일한 문서에서 서식을 다르게 하여 수정 후 내용을 첨가하여 제출하는 경우가 많습니다. "서식 유지한 채로 스타일을 모두 "바탕글"로 바꾸는 코딩" 에서 일부 수정하면 될 것 같은데 "스타일_조회"함수에서 "Act = hwp.CreateAction("Style")"에서 object가 추출되지 않아서 Nonetype object로 되고 그로 인해 "Set ..
2022.12.04
-
[QnA] 수기로 입력한 MathML 수식을 정확한 문법으로 교정하기
안녕하세요. 수식 관련해서 문의 드리고 싶은게 있습니다. 사용자가 입력하는수식을 추출할 때, 정확한 수식문법으로 가져오지 못하는 문제가 생겨 혹시 이러한 문제를 해결할 수 있는 방법이 있는지 문의 드립니다. 예를 들어 루트 2를 표현하는데 사용자가 한글의 수식 편집기에서 루트기호를 클릭하여 루트 2를 사용하는게 아니라 직접 스크립트 문법을 작성하여 입력하는 경우 sqrt {2} 또는 sqrt 2 이런식으로 표현이 가능합니다. 중괄호 없이 표현을 해도 루트가 작성이 되더라고요. 루트 뿐만 아니라 모든 수식이 이렇게 중괄호 없이 표현이 가능합니다. 물론 스크립트 문법을 사용하지 않고 수식편집기에서 수식 아이콘을 클릭하여 수식 UI에 직접 숫자를 입력하면 괄호 안에 정확하게 나타납니다. 수식을 정확하게 읽어오..
2022.11.27
-
[QnA] 줄간격 설정하는 다양한 방법
질문 주신 내용 혹시 줄간격 설정하는 방법이 있을까요? hwp.HAction.GetDefault("ParagraphShape", hwp.HParameterSet.HParaShape.HSet) hwp.HParameterSet.HParaShape.LineSpacing = 140 # 줄간격 hwp.HParameterSet.HParaShape.Condense = 100 - 25 # 최소공백 hwp.HParameterSet.HParaShape.BreakNonLatinWord = 1 # 줄 나눔 기준 : 글자 hwp.HParameterSet.HParaShape.AlignType = hwp.HAlign("Justify") # 정렬 hwp.HAction.Execute("ParagraphShape", hwp.HParam..
2022.11.25
-
PDF출력시 여러 매수 한 번에 출력하는 방법
제가 원하는 건 특정 폴더에 새로 저장되는 파일을 한번 읽어서 여러부수를 프린터로 한번에 인쇄하는 기능입니다. 파이썬에서 일반적인 제시방법들은 os.startfile이나 win32api.ShellExecute방법들인데, 모두 한번 읽어 출력하고, 다시 읽어 출력하는 방법으로 원하는 인쇄부수만큼 반복 출력하는 방법뿐이더라구요.. 이럴 경우 매번 읽어들이느라 약간씩의 딜레이타임이 발생하는데, 제가 원하는 건 한번 읽어서 인쇄부수를 지정하여 한번에 출력하는 기능을 구현하고 싶습니다. os.startfile이나 win32api, win32print 등에는 인쇄부수를 정하는 옵션이 (제가 알기로는) 없지만, 파이썬 모듈을 이용하면 비교적 간단히 해결 가능합니다. 바로 PyPdf2를 이용해서 같은 문서를 인쇄부수만..
2022.11.10
-
[QnA] 파이썬, 모듈 설치 및 코드 실행 따라해보기
회사에서 꼭 필요한건데.. 혹시.. 파이선과 PNWIN32는 다운만 받으면 바로 사용할수 있는걸까요?? 제가 프로그램같은건 관심이 많은데.. 다룰줄 몰라서요 찾아보았는데.. 엄청 복잡하고 어려움이~ 있어 보여서 많이 공부하고 설치를 해야 할것 같아서요. 너무 예의바르시고 기분좋아지게 메일을 써주셔서 감사합니다. 파이썬이나 모듈 설치는 굉장히 간단한 작업인데, 처음 시도하는 분들에게는 다소 다가가기 어렵게 느껴질 수도 있겠네요. 이번 포스팅에서는 파이썬과 pywin32, pyinstaller 모듈을 설치하는 모습을 보여드리겠습니다. 코딩이 처음이시더라도 충분히 따라하실 수 있을 겁니다. 1. 파이썬 설치 2. 모듈 설치 3. 컴파일한 exe파일 또는 pyw 확장자로 실행 1. 파이썬 설치 1..
2022.11.09
-
[QnA] 한/글 문서 쪼개기 프로그램에서 멈춰 있어요..
안녕하세요. 유투브 열심히 잘 보고 있습니다. 제게 꼭필요한 한글쪼개기 파일을 사용해보려고 하는데... 자꾸 에러가 나서 문의드립니다. 원래 파일쪼개기 실행하면, 접근허용 누른후에는 파일쪼개기 실행파일은 아무것도 안보이는것이 맞나요?? 사진첨부합니다. 파일쪼개기 실행하고, 한글문서 선택하고 있으면 꼭 멈춰있는것 같애요. 그러다 다시 파일쪼개기를 클릭했더니 또 오류가 나네요. 어떻게 사용해야 하는걸까요? 도와주셔서 감사드립니다. 수고하세요~ 추측해보건대, 아래아한글 2014 이하 버전에는 쪽 복사 기능을 제공하지 않기 때문에 발생하는 오류라고 생각됩니다. 질문 주신 분 캡쳐화면을 보니 한/글2014 또는 VP를 사용하고 계신 것 같네요.. 현재 제 컴퓨터에는 한/글 2020 버전이 설치되어 있습니다. 저 ..
2022.11.08
-
[QnA] 교정부호 시작/끝 위치를 파악해서 엑셀로 저장하는 프로그램
안녕하세요. 저는 한글 문서 분석을 공부하고 있는데 다음과 같은 기능이 필요합니다. * 설정 영역의 시작과 끝의 위치 정보(교정 부호나 메모 등) 예를 들어 교정 부호 사용시 시작 부분은 찾을 수 있으나 끝 부분은 찾을 수가 없네요. 확인 부탁합니다. 이상입니다. 질문 주신 분이 이런 기능을 어떻게 활용하실지는 잘 모르겠습니다. 그래도, 어떤 문제를 겪고 계신지는 공감이 됩니다. 왜냐면 한/글 문서 내에서 교정부호를 비롯한 다수의 컨트롤이 시작위치는 ctrl.GetAnchorPos(1)로 파악이 가능한 반면 끝위치는 도무지 찾을 방법이 없기 때문입니다. 하지만, (다소 조잡하긴 하지만) 몇 가지 메서드를 조합하면 이런 기능도 직접 구현이 가능한데요. 아래 문서를 예제로 사용하겠습니다. 튜토리얼을 따라해 ..
2022.11.08
-
[QnA] 맞춤법 자동교정시 표시해 두기
안녕하세요 일상의 코딩님!! 유튜브를 통해서 알게되고 블로그까지 찾아왔습니다. 블로그의 유익한 글들로 많은 도움을 받고 있는데요... 아무리 찾아봐도 도저히 제 능력 밖이라 ... 바쁘실텐데 여쭙고자 합니다. ㅠㅠ 아래한글에서 맞춤법 교정을 자동으로 하는 코드를 만들고 싶은데 단순히 맞춤법 검사기로 교정하는 것은 어절단위로 돌면서 Run으로 작동은 시키는데 맞춤법 교정을 한 부분을 글자나 음영색을 바꿔서 어떤 부분을 교정했는지 표시를 하고 싶은데요 교정이 되고 나니 빨간줄도 사라지고,,, 그위치를 찾는 것도... 방법이 없는거 같아서요 도움을 요청합니다. ㅠㅠ 어떻게 방법이 없을까요... ㅠㅠ 헤매고 있는 절 구해주세요 ㅠㅠㅠㅠㅠ 질문 주신 분께서는 나름 한/글 메서드를 잘 활용하고 계신 분 같아요. 어..
2022.10.28
-
[8/8] 여러 한/글 문서에서 이미지 추출(최종)
메인함수 if __name__ == '__main__': hwp = 한글프로그램_실행() 취합폴더 = Path(r"C:\Users\smj02\Desktop\취합문서") 한글문서리스트 = 취합폴더.glob("*.hwp") for 한글문서 in 한글문서리스트: 문서열기(한글문서) 제목리스트, 제목함수 = 제목뽑기() 제목폴더_만들기(제목리스트) 이미지저장(제목함수) 현재문서닫기() 한글프로그램_종료() 이 메인함수는 이 튜토리얼 시작 때 미리 보여드렸습니다. 여기까지 오는 동안 필요한 모든 함수를 하나씩 정의해봤으니, 이제는 위 메인함수의 프로세스를 어느 정도 파악을 하셨을 거라고 생각합니다. 그럼 앞에서 정의한 함수들을 포함한 전체 소스코드를 보여드리고 실행결과를 보여드리겠습니다. 전체 소스코드 from ..
2022.10.25
-
[7/8] 특정 이름으로 이미지 저장하기
def ctrl로_이동하기(ctrl): loc_set = ctrl.GetAnchorPos(0) hwp.SetPosBySet(loc_set) def 이미지저장(제목함수): ctrl = hwp.HeadCtrl # 첫 번째 컨트롤부터 탐색 이미지번호 = 1 이전제목 = "" while ctrl != None: if ctrl.CtrlID == "gso": # "그림"이면 ctrl로_이동하기(ctrl) hwp.Run("CloseEx") # 표 안에 있는 경우, 표 밖으로 나옴 제목 = 제목함수(hwp.GetPos()[1]) if 이전제목 != 제목: 이미지번호 = 1 # 폴더별로 1번부터 시작하기 위함 이전제목 = 제목 ctrl로_이동하기(ctrl) hwp.FindCtrl() hwp.HAction.Run("Pic..
2022.10.25
-
[6/8] 제목리스트로 하위폴더 만들기
이번 포스팅은 짧게 설명드리고 마치겠습니다. from pathlib import Path def 제목폴더_만들기(title_list): for title in title_list: Path.mkdir(취합폴더/"취합사진"/title, parents=True, exist_ok=True) 취합폴더 = Path(r"C:\Users\smj02\Desktop\취합문서") 제목리스트, _ = 제목뽑기() 제목폴더_만들기(제목리스트) 위 코드를 복붙해서 실행해보면, 취합폴더 하위에 "취합사진"이라는 폴더가 생성되고, 그 아래에 제목리스트의 각 제목 이름으로 빈 하위폴더들을 생성했습니다. 폴더생성 작업은 pathlib.Path 클래스를 활용했습니다. Path().mkdir 메서드의 파라미터 중 parents=True는..
2022.10.25
-
[5/8] 문서에서 제목 추출하기
이전 포스팅까지는 이미지를 저장하는 프로세스를 구현해보았습니다. 이번 포스팅부터는 문단제목을 추출하는 작업을 해보겠습니다. 기본적으로 한/글 프로그램은 찾기/찾아바꾸기 기능이 잘 구현되어 있습니다. 매크로 추출을 해 보면, 다양한 옵션도 활용이 가능하고요. 그런데, 탐색한 문자열을 파이썬으로 추출해서 활용하려면 번거로운 추가작업이 필요합니다. 이를테면, 문단의 끝까지 추가선택한 후, 복사해서 클립보드로 옮기고 파이썬으로 클립보드의 문자열을 추출해야 한다든지요. 번거롭습니다. 그런데 한/글에서는 이런 일련의 과정을 간결하게 덜어주는 GetText라는 메서드가 존재합니다. GetText, 한/글 자동화 고급과정의 첫걸음① (tistory.com) GetText, 한/글 자동화 고급과정의 첫걸음① 안녕하세요?..
2022.10.25
-
[4/8] 캐럿을 개체 앞으로 이동하는 방법
이전 포스팅에서 hwp.FindCtrl()을 실행하면 캐럿과 인접한 개체(이미지)가 선택되는 것을 보여드렸습니다. 이 시점부터는 "개체"라는 용어 대신 "컨트롤(Ctrl)"이라는 용어를 사용하겠습니다. 한/글 내부적으로 통용되는 용어이니 익숙해지시길 바랍니다. 그런데, 캐럿을 컨트롤(표, 이미지, 차트 등) 앞으로 옮기려면 어떻게 해야 할까요? 모든 컨트롤은 연결되어 있기 때문에 우선 한/글 문서의 모든 컨트롤들은 "linked list"라는 자료형으로 모두 연결되어 있습니다. 그래서, 특정 컨트롤을 선택하려면 문서의 첫 번째 컨트롤인 hwp.HeadCtrl이나 마지막 컨트롤인 hwp.LastCtrl에서부터 시작해서 Next 또는 Prev 명령어로 순차적인 탐색을 해야 합니다. 현재 탐색중인 컨트롤의 타..
2022.10.25
-
[3/8] 이미지를 선택하는 방법
이전 포스팅에서는 이미지를 추출하는 함수를 실행하려면 우선 해당 이미지를 마우스로 선택해야 했습니다. 이 과정을 파이썬 코드로 대체해보겠습니다. 개체 선택 과정은 어찌 보면 간단합니다. 딱 두 단계입니다. 1. 캐럿을 개체 바로 앞이나 뒤로 이동 2. hwp.FindCtrl()을 실행하면 개체 선택됨 위의 영상처럼 hwp.FindCtrl()을 실행하면 이미지가 선택되기는 하는데, (문제는) 캐럿을 개체 앞으로 이동하는 코드가 솔직히 조금 복잡합니다. 캐럿을 개체 앞으로 이동하는 코드는 다음 포스팅에서 자세히 알려드리겠습니다.
2022.10.25
-
[2/8] 선택한 그림을 파일로 저장하기
def 그림추출(): hwp.HAction.GetDefault("ShapeObjSaveAsPicture", hwp.HParameterSet.HShapeObjSaveAsPicture.HSet) hwp.HParameterSet.HShapeObjSaveAsPicture.Path = "c:/users/smj02/desktop/취합문서/1.jpg" # 저장하고자 하는 절대경로 hwp.HParameterSet.HShapeObjSaveAsPicture.Ext = "JPG" # 포맷은 대문자로 입력 hwp.HAction.Execute("ShapeObjSaveAsPicture", hwp.HParameterSet.HShapeObjSaveAsPicture.HSet) 문서에서 선택된 이미지를 저장하는 간단한 네 줄 짜리 함수..
2022.10.25
-
[1/8] 한글프로그램 실행/종료 및 문서 열고 닫는 함수
import win32com.client as win32 def 한글프로그램_실행(visible=True): hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject") # 한/글 프로그램 실행 hwp.XHwpWindows.Item(0).Visible = visible # 기본값 = 백그라운드 해제 hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule") # 보안모듈 실행 return hwp def 문서열기(한글파일): hwp.Open(한글파일) def 현재문서닫기(): hwp.Clear(option=1) # 1:문서 닫기(변경내용 버림) def 한글프로그램_종료(): hwp.Quit() 한/글 프로그램을..
2022.10.25
-
[0/8] 문서 이미지 일괄저장시 파일명에 제목 넣기(인트로)
개요 대체로 주무부서에서는 소속팀이나 기관에 뿌렸던 문서를 취합 후 가공, 병합하여 보고서로 만드는 일이 많습니다. 이번 튜토리얼에서는 취합한 hwp 문서들의 이미지를 일괄로 추출하여 저장하되 이미지명에 해당 문단의 제목(예: "□ 제목"), 파일명(예: 부서이름), 페이지를 넣고, 제목 이름의 폴더들을 생성하여 그 안에 이미지를 저장하는 일련의 과정을 진행해보겠습니다. 예를 들자면 이런 식입니다. 아래와 같은 문서서식이 있습니다. 세 개의 팀(알파, 베타, 감마)으로부터 아래와 같은 문서를 취합하였습니다. 문서에는 각각 "나무사진", "꽃사진", "풀사진" 이라는 제목 아래에 1x2 크기의 표에 이미지가 각각 두 장씩 들어 있습니다. 위와 같은 문서에 삽입된 이미지를 아래와 같이 저장하고자 합니다. 우..
2022.10.24
-
정부부처 보도자료에 필드가 적용되어 요약 언어모델 데이터셋 만들기 쉬워졌다
과기정통부와 행안부 보도자료를 살펴보다가 재미있는 점을 두 가지 발견했습니다. 하나는, 보도자료에 machine-readable한 hwpx 포맷으로 바뀌어가고 있다는 점이며 다른 하나는 올해 초, 1월 말 경부터 한/글 문서에 필드와 누름틀이 매겨지고 있다는 점입니다. 이 두 가지는 항상 양질의 데이터에 배고픈 요즘 시대에 아주 큰 강점이 됩니다. 예를 들어보겠습니다. 1. 뉴스기사 크롤링할 때 얼마 전부터 KoGPT나 KoBART 등 한국어 대규모 언어모델이 개발되고 있는데, 학습데이터셋 대부분은 웹에 공개된 언론 뉴스기사나 위키자료 등이죠. 크롤링으로 대규모의 자료를 스크랩해오더라도 데이터셋의 전/후처리가 쉽지 않은데, 그 이유는 언론사마다 제각각인 시맨틱 태그, 맥락없이 중간중간 삽입된 사진설명, ..
2022.09.22
-
[QnA] "PDF가 모아찍기로 출력돼요" #PDF 출력시 파이썬으로 모아찍기 일괄해제
파이썬으로 특정 폴더에 있는 한글(hwp)파일들을 PDF로 전환하려고하는데.. 한글에서 마지막 저장 시 두쪽 모아찍기로 인쇄하고 저장을 하면 해당 설정을 기억해서 파이썬으로 불러들여서 PDF로 저장하면 한페이지에 두장 모아 찍기로 PDF가 저장이 됩니다. 저장된 파일의 최종 인쇄설정을 무시하고 종이 한장에 1페이지 인쇄 설정한 상태로 전환하여 PDF로 저장하고 싶은데.. 쉽지 않네요 파이썬으로 여러 개의 HWP 파일을 PDF로 변환하는 건 사실 굉장히 간단한 작업입니다. 코드도 짧죠. 예를 들어, 위와 같이 hwp파일이 여러 개 있고, 동일한 파일명에 확장자만 바꿔서 PDF파일을 생성하려면? 아래와 같이 코드를 짜볼 수 있겠죠. import os import win32com.client as win32 ..
2022.09.21
-
PDF드라이버를 직접 골라서 변환하는 두 줄 코드
한컴에서 제공하는 기본 PDF드라이버인 "Hancom PDF"를 사용하다 보면 종종 오류가 발생할 때가 있습니다. 그게, 명확하게 어떤 오류메시지가 뜨는 게 아니라 변환중에 그냥 꺼져버린다든지, 수십개의 hwp파일을 pdf로 열심히 변환해놨는데 변환결과를 보니 막 서체가 깨져 있다든지, 나중에 확인해보니 전부 용량이 0이라든지 회사에서도 적잖이 당황했던 경험이 많습니다. (2010 버전의 hancom pdf 드라이버로 다시 설치하라고 권하는 분들도 계시던데, 저는 해결이 안되더군요) 하여튼 예전에 유튜브에도 PDF변환 관련한 영상을 올린 적이 있었는데 (311) 수백개의 HWP파일을 PDF로 변환해야 한다면? [파이썬으로 한컴오피스 한글2018 조작하는 방법2 : PDF일괄변환] - YouTube 최근에..
2022.09.21
-
[QnA] (5/5) 특정단어를 포함한 문단을 표로 감싸기-최종
안녕하세요. 한글 자동화 프로그램을 공부하고 있는데 궁금한 사항이 있어 질문합니다. 특정 글자가 들어가 있는 문단을 찾아서 그 곳에 글뒤로 속성으로 표를 삽입하고 싶습니다. 1. 자동으로 표 생성시 속성을 "본문과의배치"에서 "글뒤로" 선택하여 생성할 수 있나요? 이 속성없이 생성시 문단에 삽입되면서 글자가 밀려나는 현상이 발생합니다. 2. 찾은 문단의 위치값을 HWPUNIT 값으로 알 수 있나요? 표 생성시 위치값은 HWPUNIT으로 지정해야 하는데 현재 찾은 위치의 속성은 줄,칸으로 알려주네요. 이상입니다. 자, 이전포스팅까지의 내용을 통해 드디어 모든 재료가 완성되었습니다. 2022.09.19 - [업무자동화/파이썬-아래아한글 자동화 응용] - [QnA] (2/?) 표 생성하고, 수정하기 [QnA]..
2022.09.19
-
[QnA] (4/5) 특정 단어를 포함한 문단 검색하기
안녕하세요. 한글 자동화 프로그램을 공부하고 있는데 궁금한 사항이 있어 질문합니다. 특정 글자가 들어가 있는 문단을 찾아서 그 곳에 글뒤로 속성으로 표를 삽입하고 싶습니다. 1. 자동으로 표 생성시 속성을 "본문과의배치"에서 "글뒤로" 선택하여 생성할 수 있나요? 이 속성없이 생성시 문단에 삽입되면서 글자가 밀려나는 현상이 발생합니다. 2. 찾은 문단의 위치값을 HWPUNIT 값으로 알 수 있나요? 표 생성시 위치값은 HWPUNIT으로 지정해야 하는데 현재 찾은 위치의 속성은 줄,칸으로 알려주네요. 이상입니다. 지난 포스팅에서는 지난 포스팅에서는 용지의 너비와 문단의 높이를 구하는 함수를 구현해보았습니다. 2022.09.19 - [업무자동화/파이썬-아래아한글 자동화 응용] - [QnA] (3/5) 문단의..
2022.09.19
-
[QnA] (3/5) 문단의 높이와 너비(HwpUnit) 구하기
안녕하세요. 한글 자동화 프로그램을 공부하고 있는데 궁금한 사항이 있어 질문합니다. 특정 글자가 들어가 있는 문단을 찾아서 그 곳에 글뒤로 속성으로 표를 삽입하고 싶습니다. 1. 자동으로 표 생성시 속성을 "본문과의배치"에서 "글뒤로" 선택하여 생성할 수 있나요? 이 속성없이 생성시 문단에 삽입되면서 글자가 밀려나는 현상이 발생합니다. 2. 찾은 문단의 위치값을 HWPUNIT 값으로 알 수 있나요? 표 생성시 위치값은 HWPUNIT으로 지정해야 하는데 현재 찾은 위치의 속성은 줄,칸으로 알려주네요. 이상입니다. 문단의 크기를 좌표값으로 구할 수 있다면 얼마나 좋을까요? 그런데 한글에는 그런 기능이 구현되어 있지 않으니 문단의 줄 수, 글자높이(pt)와 줄간격(%)을 더해서 문단의 높이를 직접 계산해보겠습..
2022.09.19
-
[QnA] (2/5) 표 생성하고, 수정하기
안녕하세요. 한글 자동화 프로그램을 공부하고 있는데 궁금한 사항이 있어 질문합니다. 특정 글자가 들어가 있는 문단을 찾아서 그 곳에 글뒤로 속성으로 표를 삽입하고 싶습니다. 1. 자동으로 표 생성시 속성을 "본문과의배치"에서 "글뒤로" 선택하여 생성할 수 있나요? 이 속성없이 생성시 문단에 삽입되면서 글자가 밀려나는 현상이 발생합니다. 2. 찾은 문단의 위치값을 HWPUNIT 값으로 알 수 있나요? 표 생성시 위치값은 HWPUNIT으로 지정해야 하는데 현재 찾은 위치의 속성은 줄,칸으로 알려주네요. 이상입니다. 이전 포스팅(인트로)에서는 특정 단락 위치에 백그라운드로 표를 삽입하는 방법을 구상해보았고, 그 이유와 대략적으로 구현해야 하는 함수 다섯 개를 짚어보았습니다. 2022.09.19 - [업무자동화..
2022.09.19
-
[QnA] (1/5) 특정단어 포함 문단 뒤에 표 깔기-인트로
안녕하세요. 한글 자동화 프로그램을 공부하고 있는데 궁금한 사항이 있어 질문합니다. 특정 글자가 들어가 있는 문단을 찾아서 그 곳에 글뒤로 속성으로 표를 삽입하고 싶습니다. 1. 자동으로 표 생성시 속성을 "본문과의배치"에서 "글뒤로" 선택하여 생성할 수 있나요? 이 속성없이 생성시 문단에 삽입되면서 글자가 밀려나는 현상이 발생합니다. 2. 찾은 문단의 위치값을 HWPUNIT 값으로 알 수 있나요? 표 생성시 위치값은 HWPUNIT으로 지정해야 하는데 현재 찾은 위치의 속성은 줄,칸으로 알려주네요. 이상입니다. 한/글 개발자 커뮤니티에 재미있는 질문이 있어 블로그에서 다뤄보겠습니다. 이를테면 이런 예제를 말씀하시는 것 같아요. 아래와 같은 문서가 있을 때 특정 단어가 들어가는 문단에 다음과 같이 백그라운..
2022.09.19
-
SetPos 대신 SetPosBySet을 쓰면 훨씬 유용한 경우 : GetAnchorPos와 연계할 때
컨트롤코드를 써서 아래아한글 보고서 자동화를 할 때 십중팔구 사용하는 메서드가 있습니다. 해당 컨트롤의 위치를 찾아내는 GetAnchorPos, 그리고 찾아낸 위치로 찾아가는 SetPos가 대표적이죠. 이전 예제에서 사용한 GetAnchorPos 메서드 예제 일부를 먼저 살펴보겠습니다. def 문자열삽입(문자열): hwp.HAction.GetDefault("InsertText", hwp.HParameterSet.HInsertText.HSet) hwp.HParameterSet.HInsertText.Text = 문자열 hwp.HAction.Execute("InsertText", hwp.HParameterSet.HInsertText.HSet) caption_list = [ "구름 낀 하늘", "푸른 하늘", ..
2022.09.15
-
문서좌표를 활용하는 고급메서드 : GetAnchorPos()
지난 포스팅에서 한/글 문서의 위치정보에 대해 설명드렸습니다. 2022.09.08 - [업무자동화/파이썬-아래아한글 자동화 기초] - 아래아한글 문서의 위치(좌표)체계 아래아한글 문서의 위치(좌표)체계 아래아한글 문서의 위치체계 아래아한글 문서에는 명확하게 위치체계가 존재하고, 비어있는 공간이 아닌 이상 좌표(?)가 매겨져 있습니다. 마치 3차원 좌표계(x, y, z)처럼 말이죠. 이 글에서 사용 martinii.fun (List, Para, Pos)로 구성된 3차원 벡터는 마치 좌표를 연상하게 하는데요. 굳이 누름틀이나 필드를 이용하지 않고도 얼마든지 자유롭게 원하는 위치로, 혹은 오프셋 이동이 가능하기 때문에, 다양한 방법으로 활용할 수 있겠습니다. 이번 포스팅은 "이미지마다 캡션 텍스트 달기" 위치..
2022.09.08
-
아래아한글 문서의 위치(좌표)체계
아래아한글 문서의 위치체계 아래아한글 문서에는 명확하게 위치체계가 존재하고, 비어있는 공간이 아닌 이상 좌표(?)가 매겨져 있습니다. 마치 3차원 좌표계(x, y, z)처럼 말이죠. 이 글에서 사용하는 "좌표"라는 용어는 제가 편의상 임의로 붙였으며, API의 공식 명칭은 아님을 밝힙니다. 기존에 작성했던 대부분의 포스팅에서는 "누름틀"이나 "필드"를 이용해서 작업을 자동화했기 때문에 굳이 좌표를 계산하거나 추출해야 할 필요가 없었습니다. 그런데 아래 예제 같은 경우에는 좌표개념을 사용하면 작업이 훨씬 수월해집니다. 2022.09.06 - [업무자동화/파이썬-아래아한글 자동화 기초] - [QnA] 한글에서 특정 글꼴 찾아 태그 붙이기 [QnA] 한글에서 특정 글꼴 찾아 태그 붙이기 안녕하세요. 우연히 유..
2022.09.08
-
[QnA] 한글에서 특정 글꼴 찾아 태그 붙이기
안녕하세요. 우연히 유튜브에서 회사원코딩의 파이썬 hwp 강좌를 보다가 궁금한 점이 있어서 연락드리게 됐습니다. 하나씩 따라하다 보니 아주 간단한 것은 응용이 되는 데, 아래 내용은 아무리 검색을 해봐도 비슷한 내용이 안보입니다. 한글파일에서 아래 그림처럼 함초롱바탕글 내에 고딕이라는 특정 글꼴 모양이 있는 경우, 그 특정 글꼴을 찾아 앞 뒤로 태그를 붙여주고 싶은데 어떻게 하면 되는 지 궁금합니다. 문서가 많은 상태라 꼭 자동화 하고 싶습니다. 감사합니다. 우선 위 문제를 해결하기 위한 알고리즘을 생각해봅시다. (제 해법이 가장 좋은 방법은 아닐 수 있음을 먼저 밝힙니다ㅎㅎㅎ) 위 문제를 해결하려면 크게 두 개의 과정이 필요합니다. (1) 문서를 순회하면서 고딕 서체가 적용된 블록구간의 좌표를 모두 얻..
2022.09.06
-
그간 잘못된 정보를 알려드려 죄송합니다. 몇 가지 오류 정정
안녕하세요? 길다면 긴 기간 동안 아래아한글 자동화를 공부하면서 유튜브 영상으로, 블로그 포스팅으로 이것저것 남겨 왔는데, 현 시점에서 수정하고 싶은 부분이 몇 개 있습니다. (일종의 포스팅 정오표 같은 것...) 읽으셔도 크게 도움 되지 않겠지만, 한 번은 정리해야겠다 싶었는데 오늘에야 포스팅으로 남깁니다. 1. "누름틀에 예약어가 있다?" - 누름틀에는 예약어가 없다. 제 첫 유튜브 영상의 오류입니다. https://youtu.be/1pC_UXhiJH8 해당 영상에 고정댓글로 달아놓기는 했는데, 누름틀에는 예약어가 없습니다. 다만, 동일한 누름틀이 문서에서 여러 개 존재하는 경우, 의도한 대로 입력되지 않을 수 있습니다. (물론 한/글 API에는 동일명의 누름틀 중 몇 번째 누름틀에 텍스트를 채울지 ..
2022.08.31
-
[QnA] while문으로 #번째 그림을 삭제하는 방법
안녕하세요 화사원코딩님..! 파이썬 한/글에 대해서는 거의 국내.. 유일하신 듯 합니다. 덕분에 많이 공부하고 있습니다. 감사합니다. 오늘 방명록 남긴건 다름이 아니라 한/글 파일 중에서도 그림을 특정해서 지우고 싶은데 그 방법을 모르겠어서 입니다. ㅠ HeadCtrl 사용해서 while문 돌려서 순차적으로 찾는 건 되는데, 파일이 300페이지 이상에, 그림도 너무 많아서 while문 사용해서 특정하는 건 너무 비효율 + 어려울 것 같구, 저는 그림을 "특정"하고 싶거든요..? 누름틀을 사용해서 누름틀 아이디를 먼저 부여한 다음에 거기다가 그림을 얹어놓고 그 부분에 있는 그림만 삭제하고 새로운 그림을 넣고 싶습니다. 그래서 MoveToFiled하고 FindCtrl하고 DeleteCtrl(Delete도 해..
2022.08.31
-
[QnA] 문서 내의 특정 그림을 삭제하는 방법(누름틀)
안녕하세요 화사원코딩님..! 파이썬 한/글에 대해서는 거의 국내.. 유일하신 듯 합니다. 덕분에 많이 공부하고 있습니다. 감사합니다. 오늘 방명록 남긴건 다름이 아니라 한/글 파일 중에서도 그림을 특정해서 지우고 싶은데 그 방법을 모르겠어서 입니다. ㅠ HeadCtrl 사용해서 while문 돌려서 순차적으로 찾는 건 되는데, 파일이 300페이지 이상에, 그림도 너무 많아서 while문 사용해서 특정하는 건 너무 비효율 + 어려울 것 같구, 저는 그림을 "특정"하고 싶거든요..? 누름틀을 사용해서 누름틀 아이디를 먼저 부여한 다음에 거기다가 그림을 얹어놓고 그 부분에 있는 그림만 삭제하고 새로운 그림을 넣고 싶습니다. 그래서 MoveToFiled하고 FindCtrl하고 DeleteCtrl(Delete도 해..
2022.08.31
-
특정 페이지로 찾아가는 함수 만들기
아래아한글 API 중 GoTo라는 간편한 메서드가 있습니다. 쪽, 구역, 줄, 스타일, 조판부호 및 책갈피 등 다섯 개의 특성을 통해 인덱스를 입력하면 해당 라인으로 이동할 수 있는 간편한 대화상자를 제공하는데요. 사용방법은 대략 아래와 같습니다. hwp.HAction.GetDefault("Goto", hwp.HParameterSet.HGotoE.HSet) # 메서드 초기화 hwp.HParameterSet.HGotoE.SetSelectionIndex = 1 # "쪽"으로 찾아가기 설정 hwp.HParameterSet.HGotoE.HSet.SetItem("DialogResult", 3) # 3쪽으로 이동 hwp.HAction.Execute("Goto", hwp.HParameterSet.HGotoE.HSet..
2022.08.07
-
[QnA] 엑셀에서 줄바꿈된 텍스트를 한/글로 옮길 때 줄바꿈 유지하기
안녕하세요. 엑셀의 데이터를 한글로 옮기는 자동화 방법을 찾다가 유튜브에서 상장 만들기 컨텐츠를 보고 신세계를 경험했습니다. ^^ 그런데 그 과정 중에 엑셀에서 자동줄바꿈을 통해서 줄이 띄어져 있는 텍스트가 한글 (누름틀)로 입력이 되면 줄바꿈이 적용이 되지 않고 붙어서 입력이 되어서요. 혹시 엑셀의 줄 바꿈 편집이 그대로 한글에 엔터로 줄을 바꾼 것으로 적용되게 하는 방법이 없을까요? 번거로우시겠지만 답변 부탁드립니다. 안녕하세요? 이스케이프 문자열 차이 때문에 발생하는 간단한 문제이지만, 처음 겪을 때는 알쏭달쏭하기도 합니다. 해결방법을 먼저 알려드리면, 엑셀에서는 줄바꿈을 "\n"이라는 이스케이프 문자열로 처리합니다. 한/글에서는 줄바꿈을 "\n"이 아닌, "\r\n"으로만 인식합니다. (그 외에도..
2022.08.04
-
[QnA] Open메서드 실행시 오류:"매개변수의 개수가 잘못되었습니다." 해결법
안녕하세요. 제가 찾던 게 바로 이건데 딱 있어서 너무 놀랐습니다. 따라해보니까 이런 에러가 뜨는데 원인과 해결책을 알려주시면 감사하겠습니다. hwp.Open('c:/users/xxxxxxx/Documents/awards.hwp') Traceback (most recent call last): File "C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2963, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "", line 1, in hwp.Open('c:/users/xxxxxxx/Documents/awards.hwp') File "..
2022.08.02
-
[QnA] 표 내의 일부 테두리를 점선으로 바꾸는 법
솔직히 저도 모든 파라미터셋을 외우는 게 아니어서, 이런 질문을 받으면 직접 실행해봅니다. 아래와 같은 과정으로요. 같이 한 번 해 봅시다. 1. 파이썬으로 한/글을 연다. 2. 스크립트매크로를 녹화해본다. 3. 파이썬 코드로 변환한 후 실행해본다. 4. 되면 끝. 안되면? 5. 액션과 파라미터셋을 검색해서 답을 찾는다. (오래 걸림ㅜ) 1. 파이썬으로 한/글 열기 import win32com.client as win32 hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject") hwp.XHwpWindows.Item(0).Visible = True 2. 스크립트 매크로 녹화를 누른 후 테두리를 점선으로 바꿔본다. 표를 하나 생성해보고, 원하는 셀선택한 시점 이..
2022.05.13
-
상위버전의 HWP 문서 열 때 팝업 안 뜨게 하는 방법
상위버전의 HWP 문서 열 때 팝업 안 뜨게 하는 방법 hwp.Open 메서드는 세 개의 인자를 받습니다. path : 파일 경로 Format : 파일 포맷(생략가능) arg : 세부옵션(생략가능) 이번 포스팅에서는 세부옵션(arg) 인자에 대해 설명드리겠습니다. 세부옵션(arg)에 들어갈 수 있는 파라미터는 다음과 같습니다. 자세히 보면 중간에 이런 옵션이 있네요. arg 인자를 활용하면 암호를 묻거나, 상위버전 문서 경고창 등의 팝업을 간편하게 처리할 수 있겠습니다. arg인자의 사용방법을 예시로 보여드리겠습니다. 1. 암호가 걸린 hwp파일을 그냥 여는 경우(암호입력 팝업이 뜸) hwp.Open("c:\\users\\smj02\\desktop\\qwerasdfzxcv.hwp") 2. 암호가 걸린 H..
2022.05.09
-
파이썬으로 아래아한글 실행하는 방법
1. python.org에서 파이썬을 다운받아 설치한다. 2. 커맨드프롬프트에서 "pip install pywin32"를 실행해서 win32com 모듈을 설치한다. 3. 파이썬을 실행하고 아래 코드를 실행한다. import win32com.client as win32 # 모듈 임포트 hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject") # 한/글 실행하기 hwp.XHwpWindows.Item(0).Visible = True # 백그라운드 숨김 해제 4. (작업을 마친 후에) 한/글을 닫고 파이썬 종료. hwp.Clear(1) # 문서 닫기(1:저장하지 않은 내용 버림) hwp.Quit() # 한/글 프로그램 종료 끝. 다음 포스팅은 파이썬으로 한/글 파일..
2022.05.09
-
파이썬으로 한/글 파일에 텍스트를 입력하는 방법
파이썬으로 한/글을 실행하는 방법을 모른다면? 파이썬으로 아래아한글 실행하는 방법 1. python.org에서 파이썬을 다운받아 설치한다. 2. 커맨드프롬프트에서 "pip install pywin32"를 실행해서 win32com 모듈을 설치한다. 3. 파이썬을 실행하고 아래 코드를 실행한다. import win32com.client as.. martinii.fun 1. InsertText 액션을 이용하여 텍스트 입력 파이썬으로 한/글을 열었을 때 텍스트를 입력하는 가장 기본적인 방법은 아래와 같이 InsertText 액션을 정의하고 실행하는 것입니다. hwp.HAction.GetDefault("InsertText", hwp.HParameterSet.HInsertText.HSet) hwp.HParamete..
2022.05.09
-
서식 유지한 채로 스타일을 모두 "바탕글"로 바꾸는 코딩
안녕하세요? 일상의코딩 신명진입니다. 회사 다니다 보면 가끔 이런 경우가 있었습니다. 수십페이지의 아래아한글 레거시 문서를 구조화하기 위해서 개요와 스타일을 새롭게 매기고 싶은데 기존에 스타일이 뒤죽박죽 매겨져 있는 상태인 거예요. 근데 스타일을 변경하면 문서가 깨지잖아요ㅜ 그래서 서식은 그대로 두고 스타일을 모두 "바탕글"로 변경한 후에 개요와 스타일을 다시 하나씩 매겨보고 싶었거든요. 지식인에도 저와 똑같은 고민을 했던 분이 계시더라고요. 무작정 모든 스타일을 삭제하거나 "바탕글"로 바꾸면 서식이 다 날아가버려서 문서를 다시 구조화하는 작업이 굉장히 복잡해지죠. 문맥과 수준을 기억한 채로 수정해야 하니까요. (도입부 설명이 조금 길었습니다.) 이런 경우는 문서가 짧으면 어떻게라도 수작업으로 비벼볼 수..
2022.04.30
-
한글 불러올 때 CLSIDToClassMap 오류 해결하는 가장 간단한 방법
안녕하세요? 요즘은 블로그 포스팅으로 자동화 튜토리얼을 올리고, 유튜브 커뮤니티에 공유하고 있는데요. 저 오류 때문에 "한글 제어를 못 하겠다"는 댓글이 올라와서 안타까웠습니다. 사실 제 컴퓨터에서도 잊을 만 하면 뜨는 빈번한 오류이고, 조치방법은 10초도 안 걸리니까요ㅜㅜㅜ 제가 10초만에 처리할 수 있는 방법을 찬찬히 알려드리겠습니다. 제가 쓰는 방법을 한 문장으로 요약하면, "gen_py 폴더를 찾아서 삭제한다" 입니다. ① gen_py 폴더는 보통 어디 위치하냐면, 제 컴퓨터에는 C:/Users/사용자이름/AppData/Local/Temp 안에 위치하고 있네요. 위 폴더 경로는 사용자마다 다를 수 있습니다. ② 이 임시폴더를 인정사정 없이 삭제해버립니다. ③ 그리고 파이참을 재시작합니다. 파이참을..
2022.04.18
-
문서 내 모든 이미지를 추출하는 프로그램 feat. 한글메시지박스
지난 포스팅에서.. 한글 메시지박스 기능을 활용하면 준수한 (그리고 어색하지 않은) GUI를 구현해주었습니다. tkinter나 PySide 같은 모듈을 사용하지 않고도요. 2022.04.09 - [업무자동화/파이썬-아래아한글 자동화 기초] - hwp파일 열 때 한/글 자체 다이얼로그를 이용하면 qt도 tkinter도 필요없다!? hwp파일 열 때 한/글 자체 다이얼로그를 이용하면 qt도 tkinter도 필요없다!? 안녕하세요? 한/글에서 제공하는 API 중에는 대화상자를 열어주거나, 파일을 열거나, 대화상자를 띄워주는 메서드가 있습니다. 어쩔 수 없이 PyQt나 tkinter 등을 사용해야 하는 경우도 있지만 (여러 martinii.fun 아래의 예제는 한/글 자체 다이얼로그를 적극적으로 활용한 프로그램..
2022.04.14
-
hwp파일 열 때 한/글 자체 다이얼로그를 이용하면 qt도 tkinter도 필요없다!?
안녕하세요? 한/글에서 제공하는 API 중에는 대화상자를 열어주거나, 파일을 열거나, 대화상자를 띄워주는 메서드가 있습니다. 어쩔 수 없이 PyQt나 tkinter 등을 사용해야 하는 경우도 있지만 (여러 파일을 불러온다든지, 엑셀파일이나 다른 확장자를 불러와야 하는 경우 등) 기본적인 작업, 한/글 파일 하나를 불러와서 자동화작업을 하는 경우에는 거추장스럽게 GUI모듈을 임포트하지 말고 한/글에서 자체 제공하는 파일열기 다이얼로그를 사용하시면 코딩이 훨씬 간편해집니다. 사용법은 엄청나게 간단하거든요. 바로 hwp.Run("FileOpen") 입니다. 사용방법은 아래와 같습니다. Run 코드 한 줄이면 GUI가 뚝딱! 간편하지요? 한/글에서 제공하는 다양한 Run메서드가 궁금하시다면? hwp의 Run메서..
2022.04.09
-
한/글 문서에 포함된 그림들 화질저하 없이 이미지파일로 저장하는 프로그램 만들어보기
안녕하세요? 일상의코딩입니다. 잘들 지내시는지요? 저는 최근 정말정말 운좋게 다양한 일들을 경험하고 있습니다. 이야기보따리는 다음에 풀 기회가 있으면 꺼내놓겠습니다. 이번 시간에는 한/글에서 제공하는 다양한 방식의 메서드 중 가장 간편한 한줄명령어(Run)와 파이썬을 이용해서 응용프로그램을 하나 만들어보겠습니다. 이름하여, "한/글 문서에 포함된 그림들 화질저하 없이 이미지파일로 저장하는 프로그램"입니다. 실제로 한/글 문서에 삽입한 이미지를 화질저하 없이 그대로 이미지파일로 저장하려면, 아래와 같은 작업을 거쳐야 합니다. 1. 이미지를 선택한다. 2. 이미지를 "원래 크기"로 변경한다. 3. 우클릭(또는 다양한 방법)으로 저장한다. 왜냐면, 한/글2020 전의 버전 어딘가까지는 문서 내 삽입된 해상도의..
2022.03.31
-
선택한 특정 구간만 새로운 파일로 저장하는 함수 만들기
안녕하세요. 마티니님 유튜브, 블로그 구독자 ㅇㅇㅇ입니다. 먼저 한글 자동화 공부에 많은 도움 주셔서 감사합니다. 공개해주신 동영상, 블로그를 모두 찾아 봤는데요 제가 원하는 기능 없어서 문의 드립니다. 아래한글 파일의 내용 중 특정 영역을 블록으로 선택하여 지정된 블록영역만 다른이름으로 저장하려는데요. 예를 들어서 SetPos로 블록 시작위치를 지정하고 특정 위치의 블록 끝 위치를 지정한 후 블록으로 지정된 영역만 새로운 파일로 저장했으면 합니다. 도움 주시면 감사하겠습니다. 구독과 질문 감사합니다. 질문 주신 분은 어느 정도 한/글 자동화에 익숙하신 분인 것 같아요. SetPos로 두 개의 포지션을 선택해서 사이구간을 다른이름으로 저장하는 방법을 물어보셨습니다. 우선, 선택한 블록을 다른이름으로 저장..
2022.03.13
-
한/글 문서 이미지 사이즈를 문서여백에 맞춰 일괄조정 및 캡션 유지하는 방법
안녕하세요? 일상의 코딩, 일코입니다. 예전 포스팅 중에, 이미지 사이즈 일괄변경 관련하는 방법을 올린 적이 있었습니다. 2021.01.07 - [업무자동화/파이썬-아래아한글 자동화 기초] - HWP여백조정 후 이미지 너비/높이를 폭에 맞게 일괄조정하는 방법 HWP여백조정 후 이미지 너비/높이를 폭에 맞게 일괄조정하는 방법 HWP포맷을 사용하는 소규모의 출판사가 의외로 많다는 걸 최근들어 알게 되었다. 그도 그럴 것이, 인디자인이나 퍼블리셔 같은 프로그램 없이도 직접 책을 출판하고 SNS로 홍보할 수 있는 시대가 martinii.fun 이 글을 쓸 때만 해도 "굉장히 공들여 만든 포스팅"이라고 생각했는데, 댓글알림이 달려서 오랜만에 읽어보니까 '내가 욕심이 어마어마했구나!' 하는 생각이 강하게 드네요. ..
2022.02.10
-
GetText의 첫 단락 인덱스를 수정해야 하는 이유(최종)
이번 포스팅은 개별 포스팅이 아닙니다. 아래 포스팅의 보충설명입니다. 2022.02.06 - [업무자동화/파이썬-아래아한글 자동화 기초] - GetText 실행 후에 찾아가서 수정하는 방법 GetText 실행 후에 찾아가서 수정하는 방법 안녕하세요? 일상의 코딩, 일코입니다. 지난 포스팅에서는, 문자열을 단락별로 탐색해서 리턴해주는 GetText라는 메서드를 소개해 드렸습니다. 2022.02.04 - [업무자동화/파이썬-아래아한글 자동화 martinii.fun 위의 상황을 간략히 설명드리면, 코드에는 문제가 없어 보였는데 첫 단락을 수정할 때 문자열 인덱스가 잘못되었는지 엉뚱한 곳으로 가서 코드를 반복합니다. 이건 사실 한/글 문서의 구조 때문에 발생하는 문제로, GetText로 한/글 자동화를 하실 때..
2022.02.08
-
GetText 실행 후에 찾아가서 수정하는 방법
안녕하세요? 일상의 코딩, 일코입니다. 지난 포스팅에서는, 문자열을 단락별로 탐색해서 리턴해주는 GetText라는 메서드를 소개해 드렸습니다. 2022.02.04 - [업무자동화/파이썬-아래아한글 자동화 기초] - GetText, 한/글 자동화 고급과정의 첫걸음① GetText, 한/글 자동화 고급과정의 첫걸음① 안녕하세요? 일상의 코딩, 일코입니다. 이전 포스팅에서 찾기 후 매크로 몇 줄을 보태서 문제를 간단히 해결했습니다. 2022.02.03 - [업무자동화/파이썬-아래아한글 자동화 기초] - 찾기로 탐색한 단 martinii.fun 그런데 GetText는 의외로 싱겁습니다. 지금 탐색하고 있는 단락 상태값과, 문자열만 담백하게 리턴해줍니다. 그 문자열을 어떻게 수정해야 하는지는 내 코딩능력을 활용해..
2022.02.06
-
GetText, 한/글 자동화 고급과정의 첫걸음①
안녕하세요? 일상의 코딩, 일코입니다. 이전 포스팅에서 찾기 후 매크로 몇 줄을 보태서 문제를 간단히 해결했습니다. 2022.02.03 - [업무자동화/파이썬-아래아한글 자동화 기초] - 찾기로 탐색한 단어 말고 바로 뒤의 단어를 조작하고 싶다면? 찾기로 탐색한 단어 말고 바로 뒤의 단어를 조작하고 싶다면? 안녕하세요? 일상의 코딩, 일코입니다. (편하게 일코님~ 하고 불러주세요^^) 이번에 질문 주신 내용을 요약하면 "문자열 탐색 후 옆 단어를 조작하는 방법" 입니다. 지난 포스팅에서 "찾아바꾸기" martinii.fun 그럼에도 이번 응용편 포스팅을 덧붙이는 이유는, 현업에서 복잡한 작업을 다루다 보면 한/글에서 찾기(Ctrl-F)나 찾아바꾸기(Ctrl-H) 매크로만으로는 해결할 수 없는 문제가 자주..
2022.02.04
-
찾기로 탐색한 단어 말고 바로 뒤의 단어를 조작하고 싶다면?
안녕하세요? 일상의 코딩, 일코입니다. (편하게 일코님~ 하고 불러주세요^^) 이번에 질문 주신 내용을 요약하면 "문자열 탐색 후 옆 단어를 조작하는 방법" 입니다. 지난 포스팅에서 "찾아바꾸기"를 파이썬으로 활용하는 방법을 보여드렸는데, 이번 포스팅은 그 응용편이라고 보셔도 좋겠습니다. 먼저 드리고 싶은 말씀은, "이걸 구현하는 방법은 다양하다"는 것입니다. 입맛대로 어떤 방법이든 사용하셔도 왠만하면 대부분 잘 돌아갈텐데, 그럼에도 제가 가장 추천하는 두 가지 방법은, 1. 찾기(Ctrl-F) 매크로 아래에 매크로 덧붙이기 2. GetText를 활용해서 찾아간 후 조작하는 방법 입니다. 아니, 굳이 두 가지를?;;;;; 첫 번째 방법(찾아바꾸기 + 액션 덧붙이기)은 제 경험상, 아주아주 가끔씩 캐럿이 ..
2022.02.03
-
파이썬으로 한/글 프로그램이 현재 "쪽윤곽 보기" 상태인지 확인/설정하는 방법
한/글 문서를 다루시는 분들 중에는 아마 솔루션 관련해서 일하시는 분들인가 싶은데 문서 데이터가 아니라, "쪽윤곽 보기 상태"나, "오탈자의 붉은 줄 없애기" 같은 내용으로 종종 질문 주실 때가 있어요. 이런 내용들이 API문서에 장황하게 설명되어 있지는 않지만, 꼼꼼히 읽어보면 대부분 해결책이 나오기는 하거든요. 위 질문, "쪽윤곽 보기 상태 확인" 같은 경우도 API문서와 스크립트 녹화로 간단히 체크 가능해요. 한 번 확인해볼까요? 한/글을 열고 Ctrl-G-L을 여러 번 눌러보면, 아래는 쪽윤곽 보기 상태, 아래는 쪽윤곽 숨김 상태예요. 액션테이블 문서를 읽어보면 쪽윤곽을 토글하는 명령어는 ViewOptionPaper라고 하네요. hwp.HAction.Run("ViewOptionPaper") 그런데..
2022.02.02
-
한/글 없이 hwpx 파일의 표를 pd.DataFrame으로 추출하는 방법
안녕하세요? 일상의 코딩, 일코입니다. hwpx 포맷이 만들어진지 벌써 10년도 훌쩍 넘었습니다. 한컴오피스에서는, 데이터 추출이 번거로운 기존의 hwp 포맷 대신 machine-readable한 hwpx 포맷을 사용해줄 것을 정부 및 기관에 요청한 바 있었는데요. 실제로 hwpx 포맷이 어떻게 쓰이는지 한 번 간단히 알아보고, 한/글 프로그램 없이도 한/글 문서의 표를 판다스 데이터프레임으로 추출하는 간단한 예제를 여러분께 소개하려고 합니다. 우선 추출하고자 하는 한/글 문서는 아래와 같습니다. 예제로 사용할 hwpx문서(표) 안에 들어 있는 데이터는 seaborn으로 데이터 시각화 연습하실 때 한 번쯤은 사용해보셨을 법한, seaborn_tips_dataset입니다. 데이터 출처 : seaborn_t..
2022.02.02
-
[최종]아래아한글 문서교정 기능을 파이썬으로 구현해보기
이전 포스팅에서는 메일머지로... 이전 포스팅에서는 메일머지를 활용한 엑셀문서 교정DB를 한/글 문서에 적용하는 방법에 대해 알아보았습니다. 한/글 문서의 단순교정 매크로를 메일머지로!!?? 원문 출처는 폴리텍대학 서울강서캠퍼스 출판디자인과 | 아래한글 단순 교정 매크로 - Daum 카페 아래한글 단순 교정 매크로 단순 교정 매크로 작성 방법에 대하여 !--[if !supportEmptyParas]--!--[endif]-- martinii.fun 조금 의외의 방법으로 느껴지실 수도 있지만 외부 프로그램을 활용하지 않고, 메일머지와 스크립트매크로만 활용해서 전체 찾아바꾸기를 구현하신 분의 노하우를 공유했습니다. 이번 포스팅에서는 파이썬으로! 이번에는 조금 더 쉽고 간단하게 파이썬으로 스크립트매크로 함수를 ..
2022.02.01
-
한/글 문서의 단순교정 매크로를 메일머지로!!??
원문 출처는 폴리텍대학 서울강서캠퍼스 출판디자인과 | 아래한글 단순 교정 매크로 - Daum 카페 아래한글 단순 교정 매크로 단순 교정 매크로 작성 방법에 대하여 !--[if !supportEmptyParas]--!--[endif]-- 교정 업무를 진행하다 보면, 교정자의 판단이 필요 없이 무조건 일괄 변환시켜도 무방한 형태의 사례가 있습니다. 이를테면 cafe.daum.net 위와 같은 작업을 파이썬으로 간단히 처리해 보려고 합니다. 그 전에 원저자 분의 아이디어부터 한 번 검토해봅시다. 원문을 자세히 읽어보시면 짐작하시겠지만, 한/글 스크립트 자체에서는 엑셀파일과의 연동이 까다롭다고 생각하신 원저자 분께서 굉장히 신박한 방법을 하나 생각해 냅니다. 그것은 바로, "메일머지"로 "스크립트를 복제" 하는..
2022.01.31
-
파이썬으로 hwp파일 안에 메일머지 필드 삽입하고 실행하기
안녕하세요? 일상의 코딩 일코입니다. 아래아한글 보고서 작업을 자동화하는 기술은 1~2년 정도가 아니라, 20년 가까운 긴 전통이 있는 기술입니다. 그 덕분에 역사있는 Daum카페나 선생님들 커뮤니티 등의 십여년 전 글에서도 인사이트를 발견하곤 합니다. 그 중 하나가, 메일머지를 굉장히 다양하게 활용하는 분께서 남겨주신 꿀팁이었어요. (다음 포스팅에서 다루겠습니다.) 근데, 한 가지 먼저 고백하자면 제가 파이썬-한/글 자동화 관련한 유튜브채널과 블로그를 운영하면서 "메일머지" 노이로제에 걸리는 줄 알았습니다. 그 이유가 뭐냐면요. 가장 많이 받는 (부정적) 질문이 바로 "아니, 메일머지라는 멋진 기능이 있는데 왜 파이썬 (따위로) 자동화가 필요하죠?" 였거든요. 하여튼 메일머지 정도의 기능까지만 필요하신..
2022.01.30
-
한컴스페이스 웹에디터로 표 만들기 자동화(selenium)
기본적으로 한컴스페이스에 접속해서 새 문서를 여는 일련의 코드는 아래에서 참고하기 바랍니다. 크롬으로 한/글 문서 작성한 후 다운받기 feat. selenium 안녕하세요? 일상의코딩, 일코입니다. 최근 여러 브라우저에서 한/글 문서를 읽을 수 있는 기능을 제공하고 있습니다. 대표적으로 네이버 웨일은 (파일을 서버로 업로드하는 과정을 거친 후에) martinii.fun 한컴에서 제공해주는 무료 hwp 에디터인 한컴스페이스는 정품 아래아한글만큼은 아니지만, 대부분의 기능을 웹으로 지원해줍니다. 이게 또 신박한 것이 거의 모든 단축키가 구현되어 있고, 각종 작업아이콘도 div 태그로 또렷하게 구분되어 있거든요. body에다 send_keys를 통해 텍스트 입력이나 단축키 입력이 가능하고, 메뉴 자체의 htm..
2022.01.28
-
크롬으로 한/글 문서 작성한 후 다운받기 feat. selenium
안녕하세요? 일상의코딩, 일코입니다. 최근 여러 브라우저에서 한/글 문서를 읽을 수 있는 기능을 제공하고 있습니다. 대표적으로 네이버 웨일은 (파일을 서버로 업로드하는 과정을 거친 후에) 브라우저로 뷰어 기능을 거의 완벽하게 제공해줍니다. 크롬 브라우저 확장프로그램 중 하나인 hwp.js를 설치하면 크롬에서 hwp문서를 (완벽하진 않지만) 읽기전용으로 불러올 수도 있습니다. 그런데 이번에 소개해드리는 프로그램은 한컴오피스에서 공식적으로 제공하는 웹 hwp 편집기인 한컴스페이스입니다. 한컴스페이스 어디서나 펼쳐지는 오피스 세상 space.malangmalang.com 회원가입만 하시면 개인사용자에 한해서는 freemium이라는 무료 요금제로 2GB의 무료 스토리지와 한/글 프로그램에서 제공하는 대부분의 기..
2022.01.27
-
[추천] 파이썬 런타임에서도 엄청나게 빠른 누름틀 값 입력방법
안녕하세요? 이번 포스팅에서는 누름틀(필드)에 텍스트 삽입시 작업시간을 단축하는 노하우를 알려드리겠습니다. 아래아한글 자동화를 통해 가장 흔하고 손쉽게 자동화할 수 있는 업무라면 역시 "보고서 자동화" 아닐까 생각이 됩니다. 특히 엑셀파일이나, 이미지 파일, 혹은 폴더이름 등으로 입력할 자료를 정리해놓고 최종 순서로 hwp 보고서를 완성하는 일이 될 텐데요. 한 번이라도 실무 사이즈로 작업을 해 보신 분이라면 누름틀이나 셀 필드의 갯수가 굉장히 많을 것이라고 생각해요. (적당히 작은 갯수라면 이런 스킬을 찾지 않으셨겠죠.) 어떻게 삽입시간을 좀 단축할 수 없을까? 저도 자동화를 공부하던 초반에는 나름 고민했던 부분입니다. 필드에 값이 채워지는 과정을 하나부터 열까지 다 지켜보면서 나름 카타르시스를 느끼는..
2022.01.27
-
[QnA] 이미지 수백개를 삽입할 때 파이썬 for문으로 넣으면 너무 느려요!
제목: [문의] 파이썬에서 한글자동화 그림삽입 다이알로그 API 사용 방법 도움 요청 회사원 코딩님, 블로그에 공개된 InsertPicture 이용 한글자동화 소스 코드를 통해 많은 도움 받고 있습니다. 오늘은 실례를 무릅쓰고 방명록 대신 메일로 아래 내용 관련 조언 구하고자 합니다. (1)입력 메뉴에 있는 그림(P) PictureInsertDialog 호출하여 (2)특정 위치(디렉토리)에 있는 (3)모든 image(PNG) 파일을 Ctrl+A 선택하여 (4)일시에 한글 파일에 넣고자 합니다. InsertPicture의 경우 한 개의 파일만 삽입 가능한데 for loop 문을 사용하여 많은 양의 image 파일을 반복하여 삽입할 경우 다소 시간이 소요되더군요. 그리고 InsertPicture 파일 인자로..
2022.01.24
-
[Q&A](3/3) 제목을 {문서첫줄}.hwp로 저장하는 가장 쿨한 방법
지난 포스팅 [Q&A](1/3) 제목을 {문서첫줄}.hwp로 저장하는 가장 쿨한 방법 안녕하세요? 일상의 코딩, 일코입니다. 질문을 읽어보니 대략 이런 상황인 것 같습니다. 1. 아래와 같은 내용의 파일이 있고, 2. 이걸 아래와 같이 만들고 싶으신 것 같습니다. 여기서 잠깐 이 생 martinii.fun
2022.01.14
-
[Q&A](2/3) 제목을 {문서첫줄}.hwp로 저장하는 가장 쿨한 방법
안녕하세요? 일상의 코딩, 일코입니다. 두 번째 시간입니다. 지난 시간에는 한/글을 열지 않고도 첫 줄을 불러오는 함수를 소개해드렸습니다. def 첫줄읽기(filepath): """한/글 문서 텍스트를 불러와서 엔터(\r\n)로 쪼갠 후 첫 번째 행 리턴""" with OleFileIO(filepath) as ole: # 한/글 파일 불러오기 text = ole.openstream('PrvText').read().decode('UTF-16').split("\r\n")[0] return text 이번에는 이 함수를 활용해서 파일들의 이름을 일괄 변경하는 프로그램을 만들어보겠습니다. 기존 파일목록은 아래와 같습니다. GUI를 열어서 파일목록을 선택한 후, 선택한 파일들의 PrvText 첫 번째 라인을 불러와..
2022.01.14
-
[Q&A](1/3) 제목을 {문서첫줄}.hwp로 저장하는 가장 쿨한 방법
안녕하세요? 일상의 코딩, 일코입니다. 질문을 읽어보니 대략 이런 상황인 것 같습니다. 1. 아래와 같은 내용의 파일이 있고, 2. 이걸 아래와 같이 만들고 싶으신 것 같습니다. 여기서 잠깐 이 생각을 해 봅시다. 여러분은 아래 두 가지 중 어떤 게 좋은 방식이라고 생각하시나요? (물론 호불호일 뿐, 정답은 없다고 생각합니다.) ① 따로따로 만들어 각각 실행하기!? 우선 다 잘라서 저장하는 프로그램을 하나 만들고, 파일명을 변경하는 프로그램을 별도로 만든다. 예를 들면 간단히 페이지 번호대로 1.hwp, 2.hwp, 3.hwp ... 저장하는 식으로. 그 후에 파일명을 변경하는 코드를 따로 만든다. (1.hwp부터 하나씩 열어서 "첫 번째 페이지입니다.hwp" 방식으로) ② 원클릭으로 끝까지 한 번에!?..
2022.01.14
-
한/글 매크로의 with (xxx) {yyy} 문법은 파이썬으로 어떻게 바꾸나요?
질문주신 내용은, 안녕하세요. 포스팅 해주신 내용이 제 업무에 엄청나게 도움이 될 내용이어서 정말로 감사드립니다. (주로 필요할때마다 한글매크로 만들어서 사용중입니다) 첫번째로 말씀해주신 방법(매크로 코드를 파이썬으로 옮겨서 중괄호, 세미콜론 등 지우고 hwp. 붙여주는 방법)으로 시도중인데요 다음 코드(한글 매크로 코드편집 내용)에서 ***로 표시한 부분을 파이썬에서 어떻게 바꿔야 할 지 모르겠어서 여쭤봅니다. 혹시나 시간 편하실때로 답변주시면 정말로 감사드리겠습니다. 아래 매크로 코드 내용은 '마침표를 찾아서 엔터(=문단끝) 두번 입력' 입니다. { HAction.GetDefault("FindDlg", HParameterSet.HFindReplace.HSet); with (HParameterSet.H..
2022.01.03
-
pythonwin에서 COM MakePy Utility 목록이 비어있는 오류 해결방법
파이썬으로, 특히 pywin32 모듈로 엑셀이나 아래아한글 자동화를 하시는 분들 계시죠? 저를 포함해서요. 종종 여러 가지 알 수 없는 문제들을 만나는데, 국내에는 파이썬으로 win32를 깊게 다루는 포스팅이 많지 않아서 해결에 수일이 걸리기도 하고, 결국 그 지점에서 포기하는 분들도 많습니다. (가장 많은 오류는 gen_py 관련이 아닌가 생각해봅니다.) 관련 커뮤니티가 만들어지고 활성화되면 참 좋을텐데요. 하여튼 오늘은 제가 새 노트북(무려 XPS13)을 24개월 할부로 지른 기념으로 파이썬도 설치하고 pywin32도 설치하고 교육자료를 준비한다고 분주했는데, 또 처음 보는 오류가 한 번 나타났습니다. pythonwin을 실행해서 MakePy Utility 메뉴를 선택했는데 아래와 같은 오류가 뜨는 ..
2021.12.14
-
AttributeError: module 'win32com.gen_py.7D2B6F3C-1D95-4E0C-BF5A-5EE564186FBCx0x1x0' has no attribute 'CLSIDToClassMap' 해결방법
오랜만에 한/글 자동화를 하려다 보면 아래와 같은 오류가 뜰 때가 있습니다. 전에도 몇 번 pythonwin.exe를 실행하고, MakePy를 통해서 해결하는 방법 등을 포스팅한 적이 있습니다. 이번에는 여러 개의 파이썬 버전 또는 가상환경을 사용하시는 분들을 위한 설명입니다. 저도 최근에 확인했는데, 가상환경에 설치한 pywin32패키지의 pythonwin.exe는 실행되지 않더라고요. 해결방법은 글로벌파이썬에 pywin32 를 설치한 후 글로벌의 pythonwin.exe 로 MakePy를 실행하는 것입니다. 다소 포스팅이 길어질 것 같은데 우선 3줄요약을 붙여놓겠습니다. 1. venv 등으로 생성한 가상환경에서는 pythonwin.exe가 실행되지 않습니다. (버그로 추정) 1. 해당 가상환경의 소스..
2021.09.14
tkinter 한꼬집씩 따라해보기
-
32. 진행표시줄(progressbar) 삽입하기
이전 포스팅 2022.11.28 - [기타/tkinter 한꼬집씩만 따라해보기] - 31. 커스텀 테마 적용하기 31. 커스텀 테마 적용하기 이전 포스팅 2022.11.28 - [기타/tkinter 한꼬집씩만 따라해보기] - 30. 위젯에 툴팁 붙이기 30. 위젯에 툴팁 붙이기 이전 포스팅 2022.11.28 - [기타/tkinter 한꼬집씩만 따라해보기] - 29. 스핀박스 위젯 추가 martinii.fun 이번 포스팅에서는 : 진행표시줄(프로그레스바) 만들기 이번 포스팅에서는 프로그레스바를 만들고, 진행표시막대를 움직이게 만들어보겠습니다. 우리가 만들고자 하는 위젯은 다음과 같은 형태입니다. 버튼 하나와 프로그레스바 위젯 하나를 배치한 상태입니다. 코드를 한 번 보여드리겠습니다. import tkin..
2022.11.29
-
31. 커스텀 테마 적용하기
이전 포스팅 2022.11.28 - [기타/tkinter 한꼬집씩만 따라해보기] - 30. 위젯에 툴팁 붙이기 30. 위젯에 툴팁 붙이기 이전 포스팅 2022.11.28 - [기타/tkinter 한꼬집씩만 따라해보기] - 29. 스핀박스 위젯 추가하기 29. 스핀박스 위젯 추가하기 이전 포스팅 2022.11.28 - [기타/tkinter 한꼬집씩만 따라해보기] - 28. 메인윈도우 martinii.fun 이번 포스팅에서는 : 커스텀 테마 적용하기 tkinter로 만든 GUI에 특별한 디자인 테마를 적용할 수 있습니다. 적용방법은 여러 가지가 있지만, 이번 포스팅에서는 ① 가장 간편하게 GUI의 룩앤필을 수정할 수 있는 ttkthemes 모듈, ② 미리 작성된(수정가능한) tcl 테마파일을 다운로드하고 적..
2022.11.28
-
30. 위젯에 툴팁 붙이기
이전 포스팅 2022.11.28 - [기타/tkinter 한꼬집씩만 따라해보기] - 29. 스핀박스 위젯 추가하기 29. 스핀박스 위젯 추가하기 이전 포스팅 2022.11.28 - [기타/tkinter 한꼬집씩만 따라해보기] - 28. 메인윈도우에 아이콘 추가하기 28. 메인윈도우에 아이콘 추가하기 이전 포스팅 2022.11.27 - [기타/tkinter 한꼬집씩만 따라해보기] - 27 martinii.fun 이번 포스팅에서는 : 위젯에 툴팁 붙이기 지금까지 여러가지 위젯과 레이아웃, 이벤트사용방법 등에 대해 간략히 알려드렸습니다. 이번에 소개해드릴 기능은 바로 "툴팁"입니다. 툴팁이 뭔지 모르시는 분들도, 은연중에 이런저런 앱에서 많이 봐 오셨을 것이라 생각합니다. 아래와 같이 엔트리 등의 위젯에 부가..
2022.11.28
-
29. 스핀박스 위젯 추가하기
이전 포스팅 2022.11.28 - [기타/tkinter 한꼬집씩만 따라해보기] - 28. 메인윈도우에 아이콘 추가하기 28. 메인윈도우에 아이콘 추가하기 이전 포스팅 2022.11.27 - [기타/tkinter 한꼬집씩만 따라해보기] - 27. 다양한 메시지박스 생성하기 27. 다양한 메시지박스 생성하기 이전 포스팅 2022.11.20 - [기타/tkinter 한꼬집씩만 따라해보기] - 26. GUI martinii.fun 이번 포스팅에서는 : 스핀박스 위젯 추가하기 오랜만에 위젯을 하나 더 소개해드리고자 합니다. 바로 "스핀박스"라는 위젯으로, 콤보박스와 어떤 면에서는 유사한 부분이 있어서 주어진 숫자 중에 하나를 선택하는 공통점이 있지만, 스핀박스는 창이 확대되지 않고 버튼을 통해서 값이 오르내린다..
2022.11.28
-
28. 메인윈도우에 아이콘 추가하기
이전 포스팅 2022.11.27 - [기타/tkinter 한꼬집씩만 따라해보기] - 27. 다양한 메시지박스 생성하기 27. 다양한 메시지박스 생성하기 이전 포스팅 2022.11.20 - [기타/tkinter 한꼬집씩만 따라해보기] - 26. GUI에 탭(Notebook) 생성하기 26. GUI에 탭(Notebook) 생성하기 지난 포스팅 2022.11.20 - [기타/tkinter 한꼬집씩만 따라해보기] - 25. 메뉴바의 martinii.fun 이번 포스팅에서는 : 메인윈도우 아이콘 추가하기 우리가 지금까지 만든 메인윈도우에는 다음과 같은 청색 깃털 아이콘이 기본으로 제공됩니다. "이 GUI는 무려 tkinter로 만들었어!" 라는 메시지를 내비치고 싶다면 이렇게 둬도 괜찮지만, 기왕이면 우리 애플리..
2022.11.28
-
27. 다양한 메시지박스 생성하기
이전 포스팅 2022.11.20 - [기타/tkinter 한꼬집씩만 따라해보기] - 26. GUI에 탭(Notebook) 생성하기 26. GUI에 탭(Notebook) 생성하기 지난 포스팅 2022.11.20 - [기타/tkinter 한꼬집씩만 따라해보기] - 25. 메뉴바의 종료버튼으로 프로그램 종료하기 25. 메뉴바의 종료버튼으로 프로그램 종료하기 지난 포스팅 2022.11.20 - [기타/tkinter 한 martinii.fun 이번 포스팅에서는 : 다양한 메시지박스 생성하기 가장 기본적인 메시지박스를 만드는 방법부터 알아봅시다. 메인윈도우 창도 master나 parent 파라미터도 필요없고, mainloop()을 실행할 필요도 없이 창 하나만 띄워주는 코드들입니다. GUI가 거의 필요없는 업무자동..
2022.11.27
-
26. GUI에 탭(Notebook) 생성하기
지난 포스팅 2022.11.20 - [기타/tkinter 한꼬집씩만 따라해보기] - 25. 메뉴바의 종료버튼으로 프로그램 종료하기 25. 메뉴바의 종료버튼으로 프로그램 종료하기 지난 포스팅 2022.11.20 - [기타/tkinter 한꼬집씩만 따라해보기] - 24. 상단에 메뉴바 붙이기 24. 상단에 메뉴바 붙이기 지난 포스팅 2022.11.20 - [기타/tkinter 한꼬집씩만 따라해보기] - 23. 프레임 안의 위 martinii.fun 이번 포스팅에서는 : 탭으로 GUI에 여러 페이지 구현하기 여러 프로그램을 다뤄보신 분들이라면 탭에 대해서도 잘 아실 것으로 생각합니다. 위와 같은 탭 기능을 tkinter에서는 Notebook이라는 위젯으로 제공하고 있습니다. 탭의 위치도 자유롭게 배치할 수 있..
2022.11.20
-
25. 메뉴바의 종료버튼으로 프로그램 종료하기
지난 포스팅 2022.11.20 - [기타/tkinter 한꼬집씩만 따라해보기] - 24. 상단에 메뉴바 붙이기 24. 상단에 메뉴바 붙이기 지난 포스팅 2022.11.20 - [기타/tkinter 한꼬집씩만 따라해보기] - 23. 프레임 안의 위젯들 속성을 일괄변경하기 23. 프레임 안의 위젯들 속성을 일괄변경하기 지난 포스팅 2022.11.20 - [기타/tkinter 한꼬집 martinii.fun 이번 포스팅에서는 : 메뉴바 종료버튼으로 프로그램 종료 지난 시간에는 tkinter GUI에 메뉴바를 만드는 방법을 간단히 보여드렸습니다. 각 메뉴버튼을 눌렀을 때 어떤 동작을 할지는 함수로 만들고 command 인자로 넣으면 되는데, 이번에는 그 과정을 "종료" 기능을 만들어보면서 배워봅시다. 코드가 짧..
2022.11.20
-
24. 상단에 메뉴바 붙이기
지난 포스팅 2022.11.20 - [기타/tkinter 한꼬집씩만 따라해보기] - 23. 프레임 안의 위젯들 속성을 일괄변경하기 23. 프레임 안의 위젯들 속성을 일괄변경하기 지난 포스팅 2022.11.20 - [기타/tkinter 한꼬집씩만 따라해보기] - 22. 프레임 위젯 - 위젯들을 묶어주는 위젯 22. 프레임 위젯 - 위젯들을 묶어주는 위젯 지난 포스팅 2022.11.18 - [기타/tkinter 한꼬집씩만 martinii.fun 이번 포스팅에서는 : GUI상단에 메뉴바 붙이기 이번에는 GUI레이아웃에서 굉장히 중요한 파트인 "메뉴바" 만들기입니다. 메뉴바를 만들고 각 메뉴버튼에 커맨드를 붙이기 시작하면 GUI의 코드가 대체로 길어지기 때문에 어느 정도 레이아웃이나 트리구조를 정리해둔 후 작업..
2022.11.20
-
23. 프레임 안의 위젯들 속성을 일괄변경하기
지난 포스팅 2022.11.20 - [기타/tkinter 한꼬집씩만 따라해보기] - 22. 프레임 위젯 - 위젯들을 묶어주는 위젯 22. 프레임 위젯 - 위젯들을 묶어주는 위젯 지난 포스팅 2022.11.18 - [기타/tkinter 한꼬집씩만 따라해보기] - 21. 스크롤바 기본제공 텍스트 위젯 - Scrolledtext 21. 스크롤바 기본제공 텍스트 위젯 - Scrolledtext 지난 포스팅 2022.11.18 - [기타/tkinter 한 martinii.fun 이번 포스팅에서는 : 프레임의 자식위젯 속성 일괄변경 지난 포스팅에서 (레이블)프레임 안에 위젯들을 넣어보는 작업을 했습니다. 그리고 프레임 위젯의 장점 중 하나가, 중복되는 자식 위젯들의 속성 등 코드반복을 최소화할 수 있다고 했습니다...
2022.11.20
-
22. 프레임 위젯 - 위젯들을 묶어주는 위젯
지난 포스팅 2022.11.18 - [기타/tkinter 한꼬집씩만 따라해보기] - 21. 스크롤바 기본제공 텍스트 위젯 - Scrolledtext 21. 스크롤바 기본제공 텍스트 위젯 - Scrolledtext 지난 포스팅 2022.11.18 - [기타/tkinter 한꼬집씩만 따라해보기] - 20. 텍스트박스 만들기 20. 텍스트박스 만들기 지난 포스팅 2022.11.18 - [기타/tkinter 한꼬집씩만 따라해보기] - 19. 라디오버튼 선택에 따 martinii.fun 이번 포스팅에서는 : 위젯들을 묶어주는 프레임 위젯 지금까지 tkinter의 기본적인 위젯 사용법을 주로 다루었습니다. 어느 정도 GUI가 커지고, 위젯이 많이 들어가는 경우에, 코딩에 도움이 되는 몇 가지 툴이 있습니다. 대표적..
2022.11.20
-
21. 스크롤바 기본제공 텍스트 위젯 - Scrolledtext
지난 포스팅 2022.11.18 - [기타/tkinter 한꼬집씩만 따라해보기] - 20. 텍스트박스 만들기 20. 텍스트박스 만들기 지난 포스팅 2022.11.18 - [기타/tkinter 한꼬집씩만 따라해보기] - 19. 라디오버튼 선택에 따라 작동하는 함수 추가하기 19. 라디오버튼 선택에 따라 작동하는 함수 추가하기 지난 포스팅 2022.11.17 - [기 martinii.fun 이번 포스팅에서는 : Scrolledtext 위젯 만들기 지난 포스팅에서는 텍스트위젯을 만들어보았고, 직접 Scrollbar 위젯을 우측에 붙이는 작업도 해보았습니다. 그런데 기본적으로 텍스트위젯이라면 텍스트 라인수가 길어졌을 때 스크롤바가 생기는 게 당연하기 때문에 편의상 스크롤바를 기본제공하는 텍스트위젯도 제공하고 있..
2022.11.18
-
20. 텍스트박스 만들기
지난 포스팅 2022.11.18 - [기타/tkinter 한꼬집씩만 따라해보기] - 19. 라디오버튼 선택에 따라 작동하는 함수 추가하기 19. 라디오버튼 선택에 따라 작동하는 함수 추가하기 지난 포스팅 2022.11.17 - [기타/tkinter 한꼬집씩만 따라해보기] - 18. 라디오버튼 만들기 18. 라디오버튼 만들기 지난 포스팅 2022.11.16 - [기타/tkinter 한꼬집씩만 따라해보기] - 17. sticky로 위젯 정렬하기 martinii.fun 이번 포스팅에서는 : 텍스트박스 만들기 import tkinter as tk win = tk.Tk() tk.Text(win).grid(row=0, column=0) win.mainloop() 이번 포스팅에서 소개하는 위젯은 바로 "텍스트박스"입..
2022.11.18
-
19. 라디오버튼 선택에 따라 작동하는 함수 추가하기
지난 포스팅 2022.11.17 - [기타/tkinter 한꼬집씩만 따라해보기] - 18. 라디오버튼 만들기 18. 라디오버튼 만들기 지난 포스팅 2022.11.16 - [기타/tkinter 한꼬집씩만 따라해보기] - 17. sticky로 위젯 정렬하기 #도전과제 17. sticky로 위젯 정렬하기 #도전과제 지난 포스팅 지난 포스팅에서는 체크박스 및 체크박스의 상 martinii.fun 이번 포스팅에서는 : 라디오버튼으로 배경색 바꾸기 import tkinter as tk def radio_callback(): rad_selected = rad_var.get() if rad_selected == 1: win.configure(background="Red") elif rad_selected == 2: w..
2022.11.18
-
18. 라디오버튼 만들기
지난 포스팅 2022.11.16 - [기타/tkinter 한꼬집씩만 따라해보기] - 17. sticky로 위젯 정렬하기 #도전과제 17. sticky로 위젯 정렬하기 #도전과제 지난 포스팅 지난 포스팅에서는 체크박스 및 체크박스의 상태 초기화, 체크박스 command에 함수를 붙여보는 연습을 했습니다. 2022.11.16 - [기타/tkinter 한꼬집씩만 따라해보기] - 16. 체크박스에 함수 martinii.fun 이번 포스팅에서는 : 라디오버튼 만들기 이번 포스팅에서는 체크버튼과 비슷해 보이지만 큰 차이가 있는 "라디오버튼"에 대해 소개해 드리겠습니다. 체크버튼은 나열된 버튼들 중 복수의 체크가 가능한 반면, 라디오버튼은 (일반적으로) 여러 개의 옵션 중 딱 하나를 고르는 용도로 쓰이는 위젯입니다...
2022.11.17
-
17. sticky로 위젯 정렬하기 #도전과제
지난 포스팅 지난 포스팅에서는 체크박스 및 체크박스의 상태 초기화, 체크박스 command에 함수를 붙여보는 연습을 했습니다. 2022.11.16 - [기타/tkinter 한꼬집씩만 따라해보기] - 16. 체크박스에 함수 붙여보기 16. 체크박스에 함수 붙여보기 지난 포스팅 지난 포스팅에서는 체크버튼을 생성하고, 상태값을 초기화하는 방법에 대해 설명드렸습니다. 2022.11.16 - [기타/tkinter 한꼬집씩만 따라해보기] - 15. 체크버튼에 기본값 부여하기(선택 martinii.fun 이번 포스팅에서는 : sticky로 위젯 상하좌우 정렬 위젯의 너비나 높이가 다르기 때문에, GUI 안에 위젯들을 배치하다 보면 마치 뒤죽박죽처럼 꼬여 보일 수가 있어요. 완벽한 해결책은 아니지만 sticky가 어느..
2022.11.16
-
16. 체크박스에 함수 붙여보기
지난 포스팅 지난 포스팅에서는 체크버튼을 생성하고, 상태값을 초기화하는 방법에 대해 설명드렸습니다. 2022.11.16 - [기타/tkinter 한꼬집씩만 따라해보기] - 15. 체크버튼에 기본값 부여하기(선택상태) 15. 체크버튼에 기본값 부여하기(선택상태) 지난 포스팅 지난 포스팅에서는 tkinter의 체크버튼에 대해 간단히 알아보았습니다. 2022.11.16 - [기타/tkinter 한꼬집씩만 따라해보기] - 14. 체크박스 버튼 만들기 14. 체크박스 버튼 만들기 지난 포스 martinii.fun 이번 포스팅에서는 : 체크버튼에 함수 붙이기 미리 솔직히 말씀드리면, 여러분이 앞으로 만들게 될 다양한 GUI에서 체크버튼에 함수가 붙을 일은 거의 없을 것입니다. 그냥 체크버튼의 선택값을 가져다가 어플..
2022.11.16
-
15. 체크버튼에 기본값 부여하기(선택상태)
지난 포스팅 지난 포스팅에서는 tkinter의 체크버튼에 대해 간단히 알아보았습니다. 2022.11.16 - [기타/tkinter 한꼬집씩만 따라해보기] - 14. 체크박스 버튼 만들기 14. 체크박스 버튼 만들기 지난 포스팅 지난 포스팅에서는 콤보박스에 대해 알아보고, 콤보박스와 버튼, 레이블 등을 연계하거나, 직접 이벤트를 사용하는 방법을 추가로 알아보았습니다. 2022.11.16 - [기타/tkinter 한꼬집씩 martinii.fun 이번 포스팅에서는 : 체크버튼 상태 초기화 tkinter의 체크버튼은 세 개의 상태를 가질 수 있습니다. 우측은 해당 커맨드입니다. 선택불가 : checkbutton["state"] = "disabled" 체크 : checkbutton.select() 체크해제 : c..
2022.11.16
-
14. 체크박스 버튼 만들기
지난 포스팅 지난 포스팅에서는 콤보박스에 대해 알아보고, 콤보박스와 버튼, 레이블 등을 연계하거나, 직접 이벤트를 사용하는 방법을 추가로 알아보았습니다. 2022.11.16 - [기타/tkinter 한꼬집씩만 따라해보기] - 13. 콤보박스와 레이블 연계하는 두 가지 방법 13. 콤보박스와 레이블 연계하는 두 가지 방법 지난 포스팅 지난 포스팅까지 두 회에 걸쳐 콤보박스를 엔트리처럼 입력하는 방법, 리스트에서 선택만 하게 하는 방법을 알아보았습니다. 2022.11.16 - [기타/tkinter 한꼬집씩만 따라해보기] - 12. 콤 martinii.fun 이번 포스팅에서는 : 체크버튼 만들기 import tkinter as tk win = tk.Tk() tk.Checkbutton(master=win, te..
2022.11.16
-
13. 콤보박스와 레이블 연계하는 두 가지 방법
지난 포스팅 지난 포스팅까지 두 회에 걸쳐 콤보박스를 엔트리처럼 입력하는 방법, 리스트에서 선택만 하게 하는 방법을 알아보았습니다. 2022.11.16 - [기타/tkinter 한꼬집씩만 따라해보기] - 12. 콤보박스에서 주어진 값만 선택 할 수 있게 변경하기 12. 콤보박스에서 주어진 값만 선택 할 수 있게 변경하기 지난 포스팅 지난 포스팅에서는 ttk에 대한 간단한 설명과 함께 콤보박스의 기본적인 삽입방법에 대해 알려드렸습니다. 2022.11.16 - [기타/tkinter 한꼬집씩만 따라해보기] - 11. 콤보박스 위젯 추가하 martinii.fun 이번 포스팅에서는 : 콤보박스 값을 레이블에 넣기 이제 콤보박스 사용법은 어렴풋이 아시게 됐을텐데요. 아래 코드를 한 번 읽어보겠습니다. import ..
2022.11.16
-
12. 콤보박스에서 주어진 값만 선택 할 수 있게 변경하기
지난 포스팅 지난 포스팅에서는 ttk에 대한 간단한 설명과 함께 콤보박스의 기본적인 삽입방법에 대해 알려드렸습니다. 2022.11.16 - [기타/tkinter 한꼬집씩만 따라해보기] - 11. 콤보박스 위젯 추가하기 11. 콤보박스 위젯 추가하기 지난 포스팅 지난 포스팅까지 tkinter의 기본적인 위젯들과 간단한 레이아웃, 그리고 command와 이벤트 바인딩의 사용법까지 가볍게 훑어보았습니다. 2022.11.15 - [기타/tkinter 한꼬집씩만 따라해보기] martinii.fun 이번 포스팅에서는 : 콤보박스 선택만 할 수 있게 import tkinter as tk from tkinter import ttk win = tk.Tk() combobox = ttk.Combobox(win, state=..
2022.11.16
-
11. 콤보박스 위젯 추가하기
지난 포스팅 지난 포스팅까지 tkinter의 기본적인 위젯들과 간단한 레이아웃, 그리고 command와 이벤트 바인딩의 사용법까지 가볍게 훑어보았습니다. 2022.11.15 - [기타/tkinter 한꼬집씩만 따라해보기] - 10. 특정 위젯을 비활성화하기 #도전과제있음 10. 특정 위젯을 비활성화하기 #도전과제있음 import tkinter as tk win = tk.Tk() button = tk.Button(win, text="클릭못하쥬?") button.grid(row=0, column=0) button.configure(state="disabled") win.mainloop() 위젯을 만들다 보면 편의상 사용자의 입력을 제한하거나 특정 입력이 martinii.fun 이번 포스팅에서는 : 콤보박스 ..
2022.11.16
-
10. 특정 위젯을 비활성화하기 #도전과제있음
이전 포스팅 2022.11.15 - [기타/tkinter 한꼬집씩만 따라해보기] - 9. 엔트리 위젯에 placeholder 구현하기 #event binding 9. 엔트리 위젯에 placeholder 구현하기 #event binding import tkinter as tk def focus_in(*args): # 엔트리창에 포커스되는 경우 if id_.get() == placeholder_text: # placegholder가 있으면 entry.delete(0, "end") # 엔트리 값 삭제(시작위치:0, 끝위치:"end") entry.configure(fg="black") # martinii.fun 이번 포스팅에서는 import tkinter as tk win = tk.Tk() button = tk..
2022.11.15
-
9. 엔트리 위젯에 placeholder 구현하기 #event binding
이전 포스팅 2022.11.15 - [기타/tkinter 한꼬집씩만 따라해보기] - 8. 엔트리 위젯에 포커스 놓기 8. 엔트리 위젯에 포커스 놓기 import tkinter as tk win = tk.Tk() entry = tk.Entry(win) entry.grid(column=0, row=1, padx=20, pady=20) entry.focus() # martinii.fun 이번 포스팅에서는 import tkinter as tk def focus_in(*args): # 엔트리창에 포커스되는 경우 if id_.get() == placeholder_text: # placegholder가 있으면 entry.delete(0, "end") # 엔트리 값 삭제(시작위치:0, 끝위치:"end") entry.c..
2022.11.15
-
8. 엔트리 위젯에 포커스 놓기
이전 포스팅 2022.11.15 - [기타/tkinter 한꼬집씩만 따라해보기] - 7. 엔트리로 입력받은 값 활용하기 #도전과제 7. 엔트리로 입력받은 값 활용하기 #도전과제 import tkinter as tk def click(): button.configure(text=f"{name.get()}님 안녕하세요?") win = tk.Tk() name = tk.StringVar() tk.Label(win, text="이름을 입력한 후 버튼을 클릭하세요.").grid(column=0, row=0) entry = tk.Entry(win, textvariab martinii.fun 이번 포스팅에서는 import tkinter as tk win = tk.Tk() entry = tk.Entry(win) entr..
2022.11.15
-
7. 엔트리로 입력받은 값 활용하기 #도전과제
이전 포스팅 2022.11.15 - [기타/tkinter 한꼬집씩만 따라해보기] - 6. Entry 입력창 추가하기 6. Entry 입력창 추가하기 import tkinter as tk win = tk.Tk() tk.Entry(win).grid(row=0, column=0) # martinii.fun 이번 포스팅에서는 import tkinter as tk def click(): button.configure(text=f"{name.get()}님 안녕하세요?") win = tk.Tk() name = tk.StringVar() tk.Label(win, text="이름을 입력한 후 버튼을 클릭하세요.").grid(column=0, row=0) entry = tk.Entry(win, textvariable=na..
2022.11.15
-
6. Entry 입력창 추가하기
이전 포스팅 2022.11.15 - [기타/tkinter 한꼬집씩만 따라해보기] - 5. 버튼에 동작 추가하기 #도전과제 5. 버튼에 동작 추가하기 #도전과제 import tkinter as tk def click(): button.configure(text="클릭함") win = tk.Tk() button = tk.Button(win, text="클릭", command=click) button.grid(column=0, row=0) win.mainloop() 지난 포스팅에서 버튼을 생성해보았는데, 자고로 버튼의 martinii.fun 이번 포스팅에서는 import tkinter as tk win = tk.Tk() tk.Entry(win).grid(row=0, column=0) #
2022.11.15
-
5. 버튼에 동작 추가하기 #도전과제
이전 포스팅 2022.11.15 - [기타/tkinter 한꼬집씩만 따라해보기] - 4. 버튼 추가하기 4. 버튼 추가하기 import tkinter as tk win = tk.Tk() tk.Button(master=win, text="클릭").grid(column=0, row=0) # martinii.fun 이번 포스팅에서는 import tkinter as tk def click(): button.configure(text="클릭함") win = tk.Tk() button = tk.Button(win, text="클릭", command=click) button.grid(column=0, row=0) win.mainloop() 지난 포스팅에서 버튼을 생성해보았는데, 자고로 버튼의 핵심은 버튼을 눌렀을 때..
2022.11.15
-
4. 버튼 추가하기
이전 포스팅 2022.11.15 - [기타/tkinter 한꼬집씩만 따라해보기] - 3. 레이블 추가하기 3. 레이블 추가하기 import tkinter as tk win = tk.Tk() tk.Label(master=win, text="Hello").grid(column=0, row=0) win.mainloop() 지난 포스팅에서는 한 줄의 코드로 타이틀을 붙여보았습니다. 이번 포스팅에서는 한 줄의 코드로 레이블Label을 martinii.fun 이번 포스팅에서는 import tkinter as tk win = tk.Tk() tk.Button(master=win, text="클릭").grid(column=0, row=0) #
2022.11.15
-
3. 레이블 추가하기
이전 포스팅 2022.11.15 - [기타/tkinter 한꼬집씩만 따라해보기] - 2. 빈 창에 타이틀 붙이기 2. 빈 창에 타이틀 붙이기 import tkinter as tk win = tk.Tk() win.title("제목") # martinii.fun 이번 포스팅에서는 import tkinter as tk win = tk.Tk() tk.Label(master=win, text="Hello").grid(column=0, row=0) win.mainloop() 지난 포스팅에서는 한 줄의 코드로 타이틀을 붙여보았습니다. 이번 포스팅에서는 한 줄의 코드로 레이블Label을 붙여보겠습니다. 레이블이 뭐냐면 위의 창에서 "이름을 입력하세요." 라는 문자열이 바로 레이블입니다. 엔트리(한줄 입력칸)나 텍스트(..
2022.11.15
-
2. 빈 창에 타이틀 붙이기
이전 포스팅 2022.11.15 - [기타/tkinter 한꼬집씩만 따라해보기] - 1. 가장 심플하게 GUI 시작하기 #tkinter 1. 가장 심플하게 GUI 시작하기 #tkinter import tkinter as tk win = tk.Tk() win.mainloop() 가장 심플하게 GUI를 만드는 방법에 대해 담백하게 소개해 드리려고 합니다. 개인적으로는 교재나 인강 등으로 GUI를 배울 때 참 힘들었습니다. 그 이유는 GUI martinii.fun 이번 포스팅에서는 import tkinter as tk win = tk.Tk() win.title("제목") #
2022.11.15
-
1. 가장 심플하게 GUI 시작하기 #tkinter
이전 포스팅 2022.11.10 - [기타/tkinter 한꼬집씩만 따라해보기] - 들어가며 : tkinter 한꼬집 들어가며 : tkinter 한꼬집 파이썬으로 어느 정도 코딩을 배우는 시점까지는 나만을 위한 코딩을 하기 때문에 파이참에서 실행하든, 콘솔에서 실행하든 금방 익숙해지죠. 문제는 다른 사람을 위한 코딩을 할 때에는, 대부 martinii.fun 이번 포스팅에서는 import tkinter as tk win = tk.Tk() win.mainloop() 가장 심플하게 GUI를 만드는 방법에 대해 담백하게 소개해 드리려고 합니다. 개인적으로는 교재나 인강 등으로 GUI를 배울 때 참 힘들었습니다. 그 이유는 GUI요소보다 예제가 더 복잡해서, 예제를 이해하는 데 오히려 너무 많은 에너지를 소비하..
2022.11.15
-
들어가며 : tkinter 한꼬집
파이썬으로 어느 정도 코딩을 배우는 시점까지는 나만을 위한 코딩을 하기 때문에 파이참에서 실행하든, 콘솔에서 실행하든 금방 익숙해지죠. 문제는 다른 사람을 위한 코딩을 할 때에는, 대부분 GUI가 필요하게 되는데 문제해결이나 최적화에만 고민하다가 덜컥 만나게 되는 어려움이 바로 그놈의 구이(GUI)를 짜는 게 왜 이렇게 어려운 건지 싶은 때가 꼭 한 번 찾아오죠. 저도 PyQt로 시작해서 이런저런 GUI 모듈을 써 보았지만, 준수한 수준에서 가장 쉽게 프로젝트를 GUI로 표현할 수 있는 모듈을 하나 꼽으라면 의심의 여지 일도 없이 tkinter를 고르겠습니다. 왜 그런지는 이어지는 튜토리얼을 따라하며 확인하실 수 있겠지만, 무엇보다 간단하기 때문입니다. ※ 이 과정은 GUI 입문 및 초보를 대상으로 기획..
2022.11.10