Tkinter를 사용한 파이썬 GUI 프로그래밍 2/e
저자

앨런무어

저자:앨런무어
2005년부터파이썬코딩을했다.현재미국테네시주프랭클린에거주하며현지지방정부의데이터베이스앱을개발하고있다.관심기술분야는파이썬,자바스크립트,리눅스,아날로그전자기기다.여유시간에는자신의유튜브채널인‘AlanDMooreCodes’에코딩강의동영상을올리고작곡도하며기타효과(guitareffect)도만든다.또한교회와스카우트부대에서자원봉사를하며아내와함께다섯자녀를양육하고있다.

역자:이태상
자바와웹전문가로서오랜기간개발,교육,컨설팅을했으며현재전자금융관련업무를담당하고있다.『톰캣최종분석』(에이콘,2005)부터『리액트16』(에이콘,2020)까지십여권의IT서적을번역했다.

목차


01장.Tkinter소개
__Tkinter와Tk소개
____Tkinter선택의이유
____Tkinter설치
______파이썬설치:윈도우즈
______파이썬설치맥:OS
______파이썬과Tkinter설치:리눅스
____IDLE소개
______IDLE셸모드
______IDLE편집기모드
______Tkinter예제로서의IDLE
____Tkinter버전의HelloWorld
__Tkinter개요
____Tkinter위젯으로GUI구성
____배치관리자로위젯배열
____폼작동시키기
____Tkinter제어변수로데이터다루기
______콜백함수에제어변수사용
______제어변수의중요성
__정리

02장.GUI애플리케이션설계
__ABQAgriLabs과제분석
____문제조사
____관련정보수집
______인터뷰
____조사내용분석
______데이터제공자로부터의정보
______애플리케이션사용자로부터의정보
______기술지원팀으로부터의정보
______데이터소비자로부터의정보
__요구명세문서화
____간단한명세구성
____ABQ프로그램명세작성
__애플리케이션설계
____입력위젯결정
____필드그룹화
____폼레이아웃
____애플리케이션레이아웃
__기술요소검토
__정리

03장.Tkinter와Ttk위젯으로기본폼제작
__Ttk위젯세트
____Label
____Entry
____Spinbox
____Checkbutton
____Radiobutton
____Combobox
____Text
______Text의인덱스
____Button
____LabelFrame
__애플리케이션구현
____첫번째단계
____데이터레코드폼
______기록정보섹션
______환경정보섹션
______작물정보섹션
______GUI마무리
____콜백함수작성
______초기화콜백
______저장콜백
____ABQ앱테스트
__정리

04장.클래스로코드개선
__파이썬클래스입문
____클래스사용의이점
______파이썬의필수요소
______데이터와함수의명시적관계설정
______재사용가능한코드
____클래스생성문법
______속성과메서드
______매직속성과매직메서드
______퍼블릭,프라이빗,프로텍티드멤버
____상속과하위클래스
__Tkinter에서클래스사용
____Tkinter클래스개선
____복합위젯
____컴포넌트캡슐화
____Tk하위클래스
__클래스를사용한애플리케이션재작성
____Text위젯에StringVar추가
______변수전달
______변수로위젯동기화
______위젯으로변수동기화
____개선된LabelInput()
____폼클래스
____애플리케이션클래스
__정리

05장.검증과자동화로사용자오류최소화
__사용자입력검증
____데이터오류방지전략
____Tkinter방식의검증
______validate인자
______validatecommand인자
______invalidcommand인자
__검증위젯클래스
____날짜위젯제작
__GUI에서검증위젯구현
____다중상속
____검증믹스인클래스개발
____ValidatedMixin으로검증위젯만들기
______기본입력위젯
______Date위젯
______Combobox위젯
______범위제한Spinbox위젯
______검증가능Radiobutton위젯
____검증가능위젯으로폼개선
____위젯사이의상호작용을통한검증
______Spinbox범위의동적변경
______필드의동적비활성화
____오류보여주기
____폼제출방지
__입력자동화
____날짜자동화
____나머지필드자동화
__정리

06장.애플리케이션확장계획
__관심사분리
____MVC패턴
______모델
______뷰
______컨트롤러
____설계복잡성의이유
__애플리케이션디렉터리구성
____기본디렉터리구조
______abq_data_entry
______README
______docs디렉터리
______파이썬패키지제작
__애플리케이션분리
____모델모듈만들기
____위젯이관
____뷰이관
______뷰의중복코드제거
______커스텀이벤트로강한결합제거
____애플리케이션파일작성
____애플리케이션실행
__버전관리시스템
____깃사용을위한빠른안내
______깃저장소의초기화와설정
______코드추가와커밋
______커밋의확인과활용
__정리

07장.메뉴와대화상자제작
__애플리케이션문제해결
____해결방안계획
__Tkinter대화상자구현
____messagebox
____오류대화상자
____filedialog
____simpledialog와커스텀대화상자
______simpledialog를사용한로그인대화상자
______LoginDialog통합
__애플리케이션메뉴설계
____TkinterMenu위젯
______Checkbutton과Radiobutton아이템
____ABQ앱메뉴구현
______도움말메뉴
______파일메뉴
______옵션메뉴
______마무리작업
____설정보존
______설정보존을위한모델
______설정모델사용
__정리

08장.Treeview와Notebook으로레코드탐색
__모델에읽기와쓰기구현
____CSVModel클래스에읽기와쓰기추가
______get_all_records()구현
______get_record()구현
______save_record()에기능추가
__Ttk트리뷰
____트리뷰해부
____파일탐색기구현
______Treeview생성과설정
______트리뷰에데이터채우기
______Treeview레코드정렬
______Treeview의가상이벤트사용
__Treeview로레코드목록구현
____RecordList클래스
______Treeview위젯설정
______Treeview에스크롤바추가
______Treeview채우기
__애플리케이션에레코드목록추가
____레코드폼수정
______인스턴스속성추가
______레이블추가
______load_record()메서드추가
____애플리케이션레이아웃개선
______TtkNotebook위젯
______애플리케이션에노트북추가
____콜백추가와수정
_______show_recordlist()메서드
_______populate_recordlist()메서드
_______new_record()메서드
_______open_record()메서드
_______on_save()메서드
____주메뉴변경
____프로그램테스트
__정리

09장.스타일과테마로룩앤필개선
__Tkinter이미지작업
____PhotoImage
______PhotoImage와변수범위
____Pillow를사용한이미지지원확대
____회사로고추가
______이미지경로문제
____윈도우아이콘설정
____버튼과메뉴에아이콘추가
______BitmapImage
__Tkinter위젯스타일링
____색상속성
______주메뉴에위젯속성사용
____태그를사용한위젯콘텐츠스타일링
______태그를사용한레코드목록스타일링
__Tkinter글꼴작업
____Tkinter글꼴설정
______문자열과튜플을사용한글꼴설정
______font모듈
____ABQ앱의글꼴설정
__Ttk위젯스타일링
____Ttk스타일링해부
______Ttk위젯분석
______테마사용
____ABQ앱에색상추가
______개별위젯스타일링
______오류레이블색상변경
______오류시입력위젯스타일링
____테마설정
______테마선택메서드
__정리

10장.크로스플랫폼호환성유지
__크로스플랫폼파이썬
____파일명과파일경로
______경로구분자와드라이브
______대소문자구분
______심볼릭링크
______경로변수
____플랫폼특정적인라이브러리와기능
______플랫폼특정적인라이브러리
______로우레벨호환성확인
______subprocess모듈의위험성
____텍스트파일의인코딩과포맷
____GUI모드와콘솔모드
____플랫폼에따라변경되는코드작성
__크로스플랫폼Tkinter
____플랫폼별Tkinter버전차이
____크로스플랫폼애플리케이션메뉴
______Menu위젯의특별함
______메뉴지침과표준
______메뉴와단축키
____크로스플랫폼글꼴
____크로스플랫폼테마
____전체창모드
__크로스플랫폼ABQ앱
____설정파일저장
____CSV인코딩지정
____플랫폼맞춤형메뉴
______MainMenu클래스준비
______단축키추가
______윈도우즈용메뉴
______리눅스용메뉴
______맥OS용메뉴
______셀렉터함수
__정리

11장.unittest로테스트자동화
__테스트자동화의기본
____간단한단위테스트
____unittest모듈
______테스트케이스작성
______TestCase단언메서드
______픽스처
______모의객체
______복수의단위테스트수행
__Tkinter코드테스트
____비동기코드관리
____사용자액션시뮬레이션
______이벤트시퀀스지정
____포커스관리
____위젯정보취득
__ABQ앱을위한테스트작성
____데이터모델테스트
______파일읽기테스트
______파일저장테스트
______나머지테스트
____Application객체테스트
____위젯테스트
______ValidatedSpinbox위젯의단위테스트
______ValidatedSpinbox의통합테스트
____믹스인클래스테스트
__정리

12장.데이터저장소개선
__PostgreSQL
____PostgreSQL설치와설정
____pgAdmin으로PostgreSQL설정
____명령으로PostgreSQL설정
__관계형데이터모델링
____기본키
______대리키
____정규화
______제1정규형
______제2정규형
______제3정규형
______더높은단계의정규형
____개체-관계다이어그램
____데이터타입할당
__ABQ데이터베이스구축
____테이블생성
______룩업테이블생성
______lab_checks테이블
______plot_checks테이블
____뷰생성
____룩업테이블채우기
__psycopg3를사용한PostgreSQL연결
____psycopg2기초
____파라미터화쿼리
____특별한커서클래스
__ABQ앱에SQL통합
____새모델작성
______데이터저장
______현재종자샘플가져오기
____Application클래스변경
______SQL로그인구현
______Application
______파일관련코드제거
____DataRecordForm수정
______필드순서조정
______load_record()수정
______자동채우기개선
____RecordList수정
____마무리
__정리

13장.클라우드연계
__urllib을사용한HTTP
____HTTP트랜잭션기초
______HTTP상태코드
____urllib.request로콘텐츠다운로드
______POST요청생성
____기상데이터다운로드
______기상데이터모델만들기
______XML데이터파싱
______기상데이터저장소구현
____다운로드기능을위한GUI요소추가
__requests를사용한RESTfulHTTP서비스
____RESTful웹서비스의이해
____파이썬requests라이브러리
______requests설치와사용
______세션을사용한인증통신
______requests.Response객체
____REST백엔드구현
______authenticate()
______upload_file()
______check_file()
______get_file()
____REST업로드적용
______CSV파일생성
______업로드콜백추가
______마무리
__paramiko를사용한SFTP서비스
____테스트용SSH서비스준비
____paramiko의설치와사용법
______paramiko사용법
______연결정보조사
______SFTP사용
____SFTP모델구현
______파일업로드
______파일존재확인
____SFTPModel사용
______마무리
__정리

14장.비동기프로그래밍
__Tkinter이벤트큐
____이벤트큐제어
______update()
______after()
____일반적인이벤트큐제어방법
______매끄러운화면변화
______GUI프리징완화
__스레드로백그라운드코드실행
____threading모듈
______Tkinter와스레드안전
____네트워크함수에스레드적용
______ThreadedUploader사용
______큐를사용한메시지전달
______Queue객체
______큐를사용한스레드간통신
____ThreadedUploader에큐추가
____통신규약정의
____업로드스레드에서메시지전송
____큐메시지처리
__락을사용한공유자원보호
____Lock객체
____Lock객체를사용한동시업로드방지
______GIL
__정리

15장.캔버스를사용한데이터시각화
__캔버스를사용한그림과애니메이션
____캔버스에그리기
______사각형
______원과부채꼴
______선
______다각형
______텍스트
______이미지
______Tkinter위젯
______캔버스아이템과상태
____Canvas객체의메서드
____캔버스스크롤
____캔버스애니메이션
______필드만들기
______선수설정
______선수움직이기
______게임루프실행과우승조건판별
__간단한그래프제작
____모델메서드
____차트뷰
____애플리케이션수정
__고급그래프제작
____데이터모델메서드
____버블차트뷰
____애플리케이션수정
__정리

16장.패키징
__setuptools로배포패키지제작
____배포용패키지준비
______requirements
______pyproject
______라이선스파일추가
______실행파일제작
____setup
______기본메타데이터
______패키지와의존라이브러리
______추가파일지정
______명령문지정
______설정테스트
____소스배포판제작
______소스배포판테스트
____wheel배포판제작
__cx_Freeze로실행파일제작
____cx_Freeze첫걸음
____build_exe옵션
____외부파일의포함
____실행파일빌드
______빌드파일정리
____윈도우즈실행파일
______윈도우즈인스톨러
____맥OS실행파일
______맥OS앱번들
______맥OS.dmg파일
__정리

부록A.reStructuredText요약

부록B.SQL요약지침서

출판사 서평

이책에서다루는내용

*체계적이고반응성높은기능형GUI애플리케이션제작
*클래스와객체지향프로그래밍을사용한위젯기능확대
*MVC와버전관리를사용한앱확장성도모
*유효성검증과단위테스트를통한앱무결성확보
*사용자요구분석과반영을위한도구와프로세스활용
*SQL,HTTP,Matplotlib,스레드프로그래밍,CSV등실전기술습득
*PostgreSQL을사용한데이터보안유지

이책의대상독자

많은경험이없어도파이썬의기본만알면충분하다.대형애플리케이션을설계하고구축할수있게차근차근단계를밟을것이며고급프로그래머가되기위해필요한기법들을설명할것이기때문이다.
또한데이터과학,웹개발,시스템운영이주요업무더라도부가적으로GUI애플리케이션을만들필요가있는개발자에게도적합하다.GUI애플리케이션제작에필요한지식과기법을공부할것이기때문이다.
마지막으로Tkinter에관심있는경험많은파이썬프로그래머에게도유용할것이다.이책의상당부분은Tkinter라이브러리의세부사항을설명하기때문이다.

◈이책의구성◈

1장,‘Tkinter소개’에서는기본적인Tkinter라이브러리를알아보고간단한Tkinter애플리케이션을제작한다.또한그자체가Tkinter애플리케이션의본보기인IDLE을소개한다.
2장,‘GUI애플리케이션설계’에서는사용자요구를구현가능한설계로전환하는과정을진행한다.
3장,‘Tkinter와Ttk위젯으로기본폼제작’에서는CSV파일에데이터를저장하는기본적인데이터입력애플리케이션을제작한다.
4장,‘클래스로코드개선’에서는전반적인객체지향프로그래밍기법뿐만아니라좀더이해하기쉽고관리하기편한GUI애플리케이션을만들고자Tkinter만의클래스사용법을살펴본다.
5장,‘검증과자동화로사용자오류최소화’에서는폼에자동으로데이터를채우고검증하는방법을알아본다.
6장,‘애플리케이션확장계획’에서는하나의스크립트파일을여러파일로적절하게분리하고,애플리케이션을파이썬모듈로빌드하며,좀더관리가용이한코드기반을만들고자관심사분리를구현한다.
7장,‘메뉴와대화상자제작’에서는Tkinter를사용해주메뉴를제작한다.또한통상적인메뉴기능을구현하고자내장대화상자를사용하는방법도알아본다.
8장,‘Treeview와Notebook으로레코드탐색’에서는Ttk의Treeview와Notebook을사용해데이터탐색시스템을구현하며,데이터추가만가능했던애플리케이션을데이터읽기,쓰기,갱신도가능하게개발한다.
9장,‘스타일과테마로룩앤필개선’에서는애플리케이션의색상,글꼴,위젯스타일을변경하는방법과이를활용해애플리케이션을좀더유용하고매력적으로만드는방법을알아본다.
10장,‘크로스플랫폼호환성유지’에서는애플리케이션이윈도우즈,맥OS,리눅스에서도자연스럽게작동하게하는파이썬과Tkinter의기술을적용한다.
11장,‘unittest로테스트자동화’에서는단위테스트와통합테스트의자동화를통해애플리케이션을검증하는방법을알아본다.
12장,‘데이터저장소개선’에서는안정적인데이터저장을위해CSV파일에서데이터베이스로저장소를변경한다.이에따라SQL과관계형데이터베이스모델에관해알아본다.
13장,‘클라우드연계’에서는HTTP서버,REST서비스,SFTP서버와같은네트워크자원을다룬다.이들서비스를사용해데이터와파일을다운로드하거나업로드하는방법을알아본다.
14장,‘비동기프로그래밍’에서는장기실행프로세스,즉시간이오래걸리는프로세스실행중에도애플리케이션성능이떨어지지않게비동기프로그래밍과멀티스레드프로그래밍을적용하는방법을알아본다.
15장,‘캔버스를사용한데이터시각화’에서는데이터시각화와UI애니메이션을구현하고자Tkinter의Canvas위젯을사용하는방법을알아본다.또한Matplotlib차트의사용법도알아보고간단한게임도만든다.
16장,‘패키징’에서는애플리케이션배포를위해파이썬패키지뿐만아니라독립적으로실행가능한파일을만드는방법을알아본다.