티스토리 뷰

728x90
반응형

Chapter 10 연습문제 풀이

 

1. 300 X 300 크기의 윈도창을 만들고, 윈도창의 크기가 변경되지 않도록 하는 코드이다. 빈칸에 들어갈 내용을 보기에서 골라 넣으시오.

resizable, geometry, mainloop

from tkinter import *

 

window = Tk()

window.title("윈도창 연습")

window.geometry("400x100")    # 윈도창의 초기 크기 지정

window.resizable(width = FALSE, height = FALSE)    # 가로와 세로의 크기를 고정

 

window.mainloop()    # 이벤트 처리를 위해

 

 

2. 버튼을 클릭하면  func1() 함수가 호출되는 코드이다. 빈칸을 채우시오.

myBtn = Button(window, text = "파이썬 종료", fg = "red", command =  func1)

 

 

3. 버튼 5개를 수직으로 정렬하는 코드이다. 빈칸을 채우시오.

from tkinter import *

window = Tk()

 

btnList = [None] * 5

 

for i in range (0, 5) :

    btnList[i] = Button(window, text = "버튼" + str(i + 1))

 

for btn in btnList :

    btn.pack(side = TOP)

 

window.mainloop()

 

4. 윈도창에서 마우스 오른쪽 버튼을 더블클릭하면 실행되는 코드이다. 빈칸을 채우시오.

from tkinter import *

 

def myClick(event) :

    messagebox.showinfo("마우스", "마우스 오른쪽 버튼이 더블클릭됨")

 

window = Tk()

window.bind("<Double-Button-3>", myClick)

window.mainloop()

 

 

5. [프로그램 1]을 수정해서 PageUp 이나 PageDown 을 눌러도 사진이 바뀌는 기능을 추가하시오. 결과 화면은 [프로그램 1]과 동일하다.

from tkinter import *
from time import *

## 전역 변수 선언 부분 ##
fnameList = ["test1.gif", "test2.gif", "test3.gif", "test4.gif", "test5.gif",
"test6.gif", "test7.gif", "test8.gif", "test9.gif",]
photoList = [None] * 9
num = 0

## 함수 선언 부분 ##
def clickNext() :
    global num
    num += 1
    if num > 8 :
        num = 0
    photo = PhotoImage(file = "chapter10/gif/" + fnameList[num])
    pLabel.configure(image = photo)
    pLabel.image = photo

def clickPrev() :
    global num
    num -= 1
    if num < 0 :
        num = 8
    photo = PhotoImage(file = "chapter10/gif/" + fnameList[num])
    pLabel.configure(image = photo)
    pLabel.image = photo

## 메인 코드 부분 ##
window = Tk()
window.geometry("700x500")
window.title("사진 앨범 보기")

btnPrev = Button(window, text = "<< 이전", command = clickPrev)
btnNext = Button(window, text = "다음 >>", command = clickNext)

window.bind("<Up>", clickNext)      # PageUp key click
window.bind("<Down>", clickPrev)    # PageDown key click

photo = PhotoImage(file = "chapter10/gif/" + fnameList[0])
pLabel = Label(window, image = photo)

btnPrev.place(x = 250, y = 10)
btnNext.place(x = 400, y = 10)
pLabel.place(x = 15, y = 50)

window.mainloop()

 

6. [File] 메뉴 아래에 [Open], [Save] 메뉴 2개를 추가하는 코드이다. 빈칸에 들어갈 내용을 보기에서 골라 넣으시오.

add_cascade, add_command, Menu

 

fileMenu = Menu(mainMenu)    # 메뉴 생성

mainMenu.add_cascade(label = "File", menu = fileMenu)    #  상위 메뉴 File을 생성하고 fileMenu에 부착

fileMenu.add_command(label = "Open")    # fileMenu의 하위 메뉴 Open 생성

fileMenu.add_command(label = "Save")     # fileMenu의 하위 메뉴 Save 생성

 

 

7. askinteger(), askstring(), askfloat() 함수를 사용할 때 임포트해야 하는 모듈은 ?

① tkinter

② tkinter.simpledialog

③ tkinter.dialog

④ tkinter.filedialog

Answer 

 

 

8. askinteger() 함수에서 입력값의 범위를 제한할 때 사용하는 항목은 ?

① min, max

② mindata, maxdata

③ minimum, maximum

④ minvalue, maxvalue

Answer 

 

 

9. [파일 열기] 대화상자 및 [다른 이름으로 저장] 대화상자를 나타내는 코드이다. 빈칸을 채우시오.

askopenfilename(parent = window, filetypes = (("GIF 파일", "*.gif"), ("모든 파일", "*.*")))

 

asksaveasfile(parent = window, mode = "w", defaultextension = ".jpg",

                  filetypes = (("JPG 파일", "*.jpg;*.jpeg"), ("모든 파일", "*.*")))

 

 

10. [프로그램 2]에 상위 메뉴 [이미지 효과]와 하위 메뉴 [확대하기], [축소하기]를 추가하시오. 그리고 [확대하기] 메뉴를 선택하면 이미지가 확대되고, [축소하기] 메뉴를 선택하면 이미지가 축소되도록 코드를 추가하시오.

from tkinter import *
from tkinter.filedialog import *
from tkinter.simpledialog import *

## 전역 변수 선언 부분 ##
filename = ""

## 함수 선언 부분 ##
def func_open() :
    global filename     # 오픈한 이미지를 확대, 축소하기 위해 변수 공유
    filename = askopenfilename(parent = window, filetypes =
    (("GIF 파일", "*.gif"), ("모든 파일", "*.*")))
    photo = PhotoImage(file = filename)
    pLabel.configure(image = photo)
    pLabel.image = photo

def func_exit() :
    window.quit()
    window.destroy()

def func_zoom() :   # 확대 함수
    value = askinteger("확대배수", "확대할 배수를 입력하세요(2~8)", minvalue = 2, maxvalue = 8) # 확대할 배수 입력
    photo = PhotoImage(file = filename) # func_open에서 선택된 파일
    photo = photo.zoom(value,value) # 이미지 확대
    pLabel.configure(image = photo) # 윈도창에 나타내기
    pLabel.image = photo

def func_subsample() :   # 축소 함수
    value = askinteger("축소배수", "축소할 배수를 입력하세요(2~8)", minvalue = 2, maxvalue = 8) # 축소할 배수 입력
    photo = PhotoImage(file = filename) # func_open에서 선택된 파일
    photo = photo.subsample(value,value) # 이미지 축소
    pLabel.configure(image = photo) # 윈도창에 나타내기
    pLabel.image = photo

## 메인 코드 부분 ##
window = Tk()
window.geometry("400x400")
window.title("명화 감상하기")

photo = PhotoImage()
pLabel = Label(window, image = photo)
pLabel.pack(expand = 1, anchor = CENTER)

mainMenu = Menu(window)
window.config(menu = mainMenu)

fileMenu = Menu(mainMenu)
mainMenu.add_cascade(label = "파일", menu = fileMenu)
fileMenu.add_command(label = "파일 열기", command = func_open)
fileMenu.add_separator()
fileMenu.add_command(label = "프로그램 종료", command = func_exit)

## 이미지 효과 메뉴 추가하는 부분 ##
imageMenu = Menu(mainMenu)
mainMenu.add_cascade(label = "이미지 효과", menu = imageMenu)
imageMenu.add_command(label = "확대하기", command = func_zoom)
imageMenu.add_separator()
imageMenu.add_command(label = "축소하기", command = func_subsample)


window.mainloop()

 

728x90
반응형

'python > 파이썬 for Beginner' 카테고리의 다른 글

파이썬 for Beginner Chapter 11  (4) 2019.05.17
파이썬 for Beginner Chapter 09  (2) 2019.04.28
파이썬 for Beginner Chapter 08  (4) 2019.04.28
파이썬 for Beginner Chapter 07  (15) 2019.04.15
파이썬 for Beginner Chapter 06  (0) 2019.04.15
댓글