Spring, 2019 School of CSE Pusan National University

Slides:



Advertisements
Similar presentations
6 장 객체 - 지향 설계 ③. 목차 GUI 레이아웃  전화기 키 패드 전화기 키 패드 전화기 키 패드 모양의 GUI 를 만드는 Telephone.java, TelephonePanel.java 를 완성해 보자.  주석을 참고하여 TelephonePanel.java.
Advertisements

Python Essential 세미나 1 CGI 프로그램 작성법 발표자 : 박승기 ( 수 )
Python Ch.06 RaspberryPi Sejin Oh. Raspberry Pi Python  IDLE(Integrated Development Environment)  라즈베리 파이 배포본들은 일반적으로 파이썬과 파이썬 3 의 IDLE 파 이썬 개발 도구를.
1/29 키보드로 직접 입력할 수 없는 다양한 기호와 한자를 입력하는 방법을 알아 보자. 또한 블록으로 영역을 설정하는 여러 가지 방법에 대해 살펴본 후 블록 으로 설정된 내용을 복사하여 붙여넣거나, 잘라내고 이동하는 방법에 대해서 도 알아보자. 02_ 문서의 입력과 편집.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
파워포인트 2007.
Powerbuilder 연동 1 : File-New (Application 선택)
CHAP 19. 구글맵.
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
Image & Video processing
.Net Web Application 2010 컴퓨터공학실험(Ⅰ)
컴퓨터 프로그래밍 실습 #7 제 4 장 GUI 클래스 작성.
Excel 일차 강사 : 박영민.
윤 홍 란 다이알로그(대화상자) 윤 홍 란
(수) Python Essential 세미나 Gui 프로그래밍 - Tkinter 발표자 : 박승기.
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
2017년 하계 경성 프로그래밍 교육 (5/5) 경성대학교 공과대학 소프트웨어 학과.
07. 메뉴와 대화상자 제목. 07. 메뉴와 대화상자 제목 메뉴를 작성하고 사용하는 방법을 배운다. 토스트의 다양한 출력 방법을 알아본다. 대화상자의 사용법을 익힌다.
Visual Basic 함수.
마우스(Mouse) 다루기 컴퓨터응용 및 실습 I.
Communication and Information Systems Lab. 황재철
Raster 애니메이션은 GIF Animator로 만들면 쉽다
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
Javascript Basic Sample Programs
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
윈도 프로그래밍.
학습목표 학습목차 다른 홈페이지의 HTML 파일 코드를 보는 방법에 대해 알아봅니다.
CHAP 12. 리소스와 보안.
10장 컴퓨터 기반 데이터 획득 응용 프로그램 LabVIEW 사용법
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
인터넷응용프로그래밍 JavaScript(Intro).
비주얼 프로그래밍 1분반 화/목.
10장 tkinter로 GUI 만들기.
두근두근 파이썬 수업 10장 tkinter로 GUI 만들기.
30강 JAVA 그래픽 JAVA GUI(Graphic User Interface)란? AWT 컴포넌트? Swing 컴포넌트?
2018년 11월 05일 박성진 Web & Internet [08] 레이아웃 P1 2018년 11월 05일 박성진
CHAP 5. 레이아웃.
Lesson 2. 기본 데이터형.
Lab 1 Guide: 교재 2장 DrawX ( 쪽)
인터넷응용프로그래밍 JavaScript(Intro).
웹디자인
1차시: 낮과 밤이 생기는 원리 지구과학
두근두근 파이썬 수업 11장 파일을 사용해봅시다..
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
자바 5.0 프로그래밍.
Mariadb JDBC PROGRAMMING2
CHAP 21. 전화, SMS, 주소록.
학습목표 처음 만드는 비주얼 베이직 프로그램 프로그램 실행과 실행 파일 생성. 학습목표 처음 만드는 비주얼 베이직 프로그램 프로그램 실행과 실행 파일 생성.
DK-128 개발환경 설정 아이티즌 기술연구소
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
Homework #12 (1/2) 프로그램을 작성하고, 프로그램과 실행 결과를 프린트하여 제출한다.
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
.Net Web Application 2007 컴퓨터공학실험(Ⅰ)
메뉴(Menu) 컴퓨터응용 및 실습 I.
01. 분산 파일 시스템의 개요 네트워크에 분산된 파일을 사용자가 쉽게 접근하고 관리할 수 있게 해준다.
기초C언어 제2주 실습 프로그래밍의 개념, 프로그램 작성 과정 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
함수, 모듈.
9 브라우저 객체 모델.
슬라이드 쇼의 설정 슬라이드 쇼의 실행 파일과 폴더의 관리 글꼴을 포함해서 저장 웹 페이지로 게시 압축 파일
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
프로그래밍 개론 Ⅰ-실습 2장 데이터와 식①.
Excel 일차 강사 : 박영민.
Platform Builder 사용법.
유승석 FILE I/O File Input/Output 유승석 SD50 – C# & .NET Platform.
7 생성자 함수.
Spring, 2019 School of CSE Pusan National University
Chapter 11. 문서 인쇄 및 파일 형식.
BoardGame 보드게임 따라가기.
Presentation transcript:

Spring, 2019 School of CSE Pusan National University Python GUI 프로그래밍 Spring, 2019 School of CSE Pusan National University

학습목표 Python의 Tkinter 모듈을 사용하여 GUI(Graphic User Interface) 프로그래밍을 익힌다. 이와 더불어 이벤트 기반 프로그래밍이라는 프로그램의 구조화 방식을 소개한다.

루트 윈도우(Root Window) 루트 윈도우 작성 >>> from tkinter import * >>> window = Tk() >>> window.mainloop() 모든 Tkinter GUI 애플리케이션은 루트 윈도우를 만들어 변수에 참조를 저장하면서 시작한다.

기본 GUI 구현 위젯 추가 from tkinter import * window = Tk() label = Label(window, text="This is our label.") label.pack() window.mainloop() 루트 윈도우에 위젯을 추가함 레이블: 텍스트를 표시할 때사용 pack 메소드 레이블 위젯을 부모 위젯 안에 위치시키고, 부모 위젯의 크기를 필요한 만큼 재조정함

Tkinter 위젯 Tkinter 위젯 윈도우에 다양한 위젯을 추가할 수 있음

화면에 문자열 출력 StringVar() 이용 화면에 문자열 출력 from tkinter import * window = Tk() data = StringVar() data.set("Data to display") label = Label(window, textvariable=data) label.pack() window.mainloop() 가변 문자열 StringVar를 이용하여 프로그램의 GUI와 변수 사이의 상호 작용을 관리한다.

Tkinter 가변 타입 가변 타입 내용을 바꿀 수 있는 타입 Python 타입에 대응하는 가변 타입을 제공함

프레임 구성 프레임 구성하기 window = Tk() frame = Frame(window) frame.pack() frame2 = Frame(window, borderwidth=4, relief=GROOVE) frame2.pack() first = Label(frame, text="First label") first.pack() second = Label(frame2, text="Second label") second.pack() third = Label(frame2, text="Third label") third.pack() window.mainloop() 프레임 위젯: 프레임은 직접적으로 화면에 보이지 않지만, 다른 위젯을 구성하는 데 도움을 줌

입출력 GUI 프로그램 화면에 Label과 Entry를 이용하여 입출력 GUI 구현하기 엔트리 위젯 from tkinter import * window = Tk() frame = Frame(window) frame.pack() var = StringVar() label = Label(frame, textvariable=var) label.pack() entry = Entry(frame, textvariable=var) entry.pack() window.mainloop() 엔트리 위젯 사용자가 텍스를 입력할 수 있는 위젯 StringVar()과 엔트리를 연결하여 텍스트 입력을 구현할 수 있음

버튼 클릭 처리 # Initialization. from tkinter import * # The controller. def click(): counter.set(counter.get() + 1) if __name__ == '__main__' : # More initialization. window = Tk() # The model. counter = IntVar() counter.set(0) # The views. frame = Frame(window) frame.pack() button = Button(frame, text="Click", command=click) button.pack() label = Label(frame, textvariable=counter) label.pack() window.mainloop() 버튼 위젯 command=click은 사용자가 버튼을 누를 때 마다 click 함수를 호출하라고 알리는 이벤트 호출 방식이다.

카운터 제어 from tkinter import * window = Tk() # The model. counter = IntVar() counter.set(0) # Two controllers def click_up(): counter.set(counter.get() + 1) def click_down(): counter.set(counter.get() - 1) # The views. frame = Frame(window) frame.pack() button = Button(frame, text="Up", command=click_up) button.pack() button = Button(frame, text="Down", command=click_down) label = Label(frame, textvariable=counter) label.pack() window.mainloop() 버튼 위젯 카운터의 값을 올리고 내리는 프로그램

람다 함수(lambda function) 람다 함수란? 람다 함수(lambda function)는 이름이 없는 함수를 뜻한다. 람다 함수를 이용하면 이름을 주지 않고도 쓰고 싶은 곳 아무데서나 한 줄짜리 함수를 만들 수 있다. >>> lambda: 3 <function <lambda> at 0x00A89B30> >>> (lambda: 3)() 3 람다 함수에 변수를 설정하기 >>> (lambda x: 2 * x)(3) 6 >>> (lambda x, y: 2 * x + y)(3, 4) 10

람다 함수를 이용한 버튼 클릭 from tkinter import * window = Tk() # The model. counter = IntVar() counter.set(0) # General controller def click(var, value): var.set(var.get() + value) # The views. frame = Frame(window) frame.pack() button = Button(frame, text="Up", command=lambda: click(counter, 1)) button.pack() button = Button(frame, text="Down", command=lambda: click(counter, -1)) label = Label(frame, textvariable=counter) label.pack() window.mainloop()

화면 스타일: 글꼴 설정 from tkinter import * window = Tk() button = Button(window, text="Hello", font=("Courier", 14, "bold italic")) button.pack() window.mainloop()

화면 스타일: 컬러 설정 from tkinter import * window = Tk() button = Label(window, text="Hello", bg="green", fg="white") button.pack() window.mainloop()

레이아웃: pack from tkinter import * window = Tk() frame = Frame(window) frame.pack() label = Label(frame, text="Name") label.pack(side="left") entry = Entry(frame) entry.pack(side="left") window.mainloop()

레이아웃: grid from tkinter import * window = Tk() frame = Frame(window) frame.pack() label = Label(frame, text="Name:") label.grid(row=0, column=0) entry = Entry(frame) entry.grid(row=1, column=1) window.mainloop() grid 배치 관리자 윈도우와 프레임을 행(Row)과 열(Column)로 구성된 격자로 다를 수 있다.

텍스트 위젯 설정 from tkinter import * def cross(text): text.insert(INSERT, 'X' ) window = Tk() frame = Frame(window) frame.pack() text = Text(frame, height=3, width=10) text.pack() button = Button(frame, text="Add", command=lambda: cross(text)) button.pack() window.mainloop() 텍스트 위젯 여러 줄 텍스트를 담고 싶은 경우 텍스트 위젯을 사용함

체크버튼 설정 from tkinter import * window = Tk() frame = Frame(window) 체크버튼 설정 체크버튼 설정 from tkinter import * window = Tk() frame = Frame(window) frame.pack() red = IntVar() green = IntVar() blue = IntVar() for (name, var) in (('R' , red), ('G' , green), ('B' , blue)): check = Checkbutton(frame, text=name, variable=var) check.pack(side='left' ) def recolor(widget, r, g, b): color = '#' for var in (r, g, b): color += 'FF' if var.get() else '00' widget.config(bg=color) label = Label(frame, text='[ ]' ) button = Button(frame, text='update' , command=lambda: recolor(label, red, green, blue)) button.pack(side='left' ) label.pack(side='left' ) window.mainloop()

메뉴 설정(1/2) from tkinter import * import tkinter.filedialog as dialog def save(root, text): data = text.get('0.0' , END) filename = dialog.asksaveasfilename( parent=root, filetypes=[('Text' , '*.txt' )], title='Save as...' ) writer = open(filename, 'w' ) writer.write(data) writer.close() def quit(root): root.destroy() window = Tk() text = Text(window) text.pack() menubar = Menu(window) filemenu = Menu(menubar) filemenu.add_command(label='Save' , command=lambda : save(window, text)) filemenu.add_command(label='Quit' , command=lambda : quit(window)) menubar.add_cascade(label = 'File' , menu=filemenu) window.config(menu=menubar) window.mainloop()

메뉴 설정(2/2) 프로그램 구조 이 프로그램은 2개의 함수를 정의함 save 함수는 텍스트의 위젯 내용을 저장함 사용자에게 텍스트 파일의 이름을 묻는 표준 ‘Save as…’ 대화상자를 생성한다. quit 함수는 애플리케이션을 닫음

GUI 활용 예: 계산기 GUI 활용 예: 계산기 #-*- coding: utf-8 -*- #GUI를 만들어주는 tkinter 모듈을 불러 들임 from tkinter import * #이벤트 처리함수 def enter(btn): if btn == 'C': ent.delete(0, END) elif btn == '=': #eval()함수는 텍스트로된 입력된 수식 표현을 파이썬 코드로 변환후 실행합니다. ans = eval(ent.get()) ent.insert(0, ans) else: #C와 =을 제외한 버튼은 그대로 ent에 추가. ent.insert(END, btn) def quit(): root.destroy() root.quit() #창만들기 root=Tk() root.title('계산기') #숫자 입력란 만들기 ent=Entry(root) ent.insert(0, ' ') ent.pack(pady=5) #숫자 버튼 만들기 buttons = ['7410', '852=', '963+', 'C/*-'] for col in buttons: frm=Frame(root) frm.pack(side=LEFT) for row in col : btn=Button(frm, text=row, command=(lambda char=row: enter(char))) btn.pack(fill=X, padx=5, pady=5) #프로그램 실행 root.mainloop()

연습문제 온도 변환 프로그램 지역 변수에 화씨온도를 입력하여 섭씨 온도로 변환하는 함수를 작성하라 (F - 32) * 5/9 = C (F = 화씨, C = 섭씨)

요약 윈도우 화면을 구성하는 GUI 구성 요소들을 사용하는 방법을 학습하였다. 윈도우 루트 화면 작성 화면 프레임 구성 Label과 Entry를 이용한 입출력 GUI 구성 버튼 구현 화면 스타일 설정 화면 레이아웃 설정 텍스트 위젯 설정 계산기 프로그램 기반의 윈도우 응용 프로그램 작성 방법을 학습하였다.