전체코딩
# import tkinter
from tkinter import *
from tkinter import messagebox
from tkinter.filedialog import *
from tkinter.simpledialog import *
## 함수
def btnClick():
messagebox.showinfo("제목", '요기가 내용~~~~')
def openFile():
global image, ROW, COL, filename
filename = askopenfilename(parent=window,
filetypes=(("RAW 파일", "*.raw"), ("모든파일", "*.*")))
# 1-1 메모리 할당
image = [[0 for _ in range(COL)] for _ in range(ROW)]
# 1-2. 불러오기 (대신 랜덤)
rfp = open(filename, 'rb')
for i in range(ROW):
for k in range(COL):
image[i][k] = ord(rfp.read(1))
rfp.close()
printImage()
def printImage():
global image, ROW, COL, filename
for i in range(ROW):
for k in range(COL):
r = g = b = image[i][k]
paper.put("#%02x%02x%02x" % (r, g, b), (k, i))
def copyData():
value = askinteger("제목", "설명~~~~", minvalue=0, maxvalue=255)
label1.configure(text=str(value))
## 변수
filename = ""
window, canvas, paper = None, None, None
ROW, COL = 256, 256
image = []
## 메인
window = Tk() # 벽
window.title("요기 제목")
window.geometry('300x400')
## 캔버스 + 페이퍼
canvas = Canvas(window, height=256, width=256)
paper = PhotoImage(width=256, height=256)
canvas.create_image((256 / 2, 256 / 2), image=paper, state='normal')
## 메뉴
mainMenu = Menu(window) # 메뉴의 틀
window.config(menu=mainMenu)
fileMenu = Menu(mainMenu) # 상위 메뉴(파일)
mainMenu.add_cascade(label='파일', menu=fileMenu)
fileMenu.add_command(label='열기', command=openFile)
fileMenu.add_command(label='저장')
fileMenu.add_separator()
fileMenu.add_command(label='종료')
editMenu = Menu(mainMenu) # 상위 메뉴(편집)
mainMenu.add_cascade(label='편집', menu=editMenu)
editMenu.add_command(label='복사', command=copyData)
editMenu.add_command(label='잘라내기')
editMenu.add_separator()
editMenu.add_command(label='붙여넣기')
# 위젯 == 컨트롤
label1 = Label(window, text="나는 글자다", font=("궁서체", 20))
button1 = Button(window, text="This is Button", fg='red', bg='yellow',
font=("Lucida Fax", 20), command=btnClick)
label1.pack(side=TOP)
button1.pack(side=TOP)
canvas.pack()
# label1.place(x=100, y=30)
# button1.place(x=50, y=230)
window.mainloop()
라이브러리
# import tkinter
from tkinter import *
from tkinter import messagebox
from tkinter.filedialog import *
from tkinter.simpledialog import *
- 파이썬으로 윈도우 창을 띄우기 위해 사용
함수부분_btnClick()
def btnClick():
messagebox.showinfo("제목", '요기가 내용~~~~')
- 메세지 박스를 띄움
제목 : 상단바
요기가 내용 : 가운데 메세지
함수부분_openFile()
def openFile():
global image, ROW, COL, filename
filename = askopenfilename(parent=window,
filetypes=(("RAW 파일", "*.raw"), ("모든파일", "*.*")))
- global : 파이썬은 전역변수가 때문에 global을 이용해 전역변수로 선언해줌
- askopenfilename을 사용하면 다음과 같은 화면이 뜸

- filtypes는 파일 종류를 설정 가능

image = [[0 for _ in range(COL)] for _ in range(ROW)]
- ROW x COL 값만큼의 image배열 준비, 초기값 0
rfp = open(filename, 'rb')
for i in range(ROW):
for k in range(COL):
image[i][k] = ord(rfp.read(1))
rfp.close()
printImage()
- 파일을 불러온 뒤 ROW x COL 배열에 대입
- rfp파일 닫음
- printImage 함수로 출력
함수부분_printImage()
def printImage():
global image, ROW, COL, filename
for i in range(ROW):
for k in range(COL):
r = g = b = image[i][k]
paper.put("#%02x%02x%02x" % (r, g, b), (k, i))
- global : 파이썬은 전역변수가 때문에 global을 이용해 전역변수로 선언해줌
- 그레이 스케일을 불러올거기 때문에 r = g = b 를 (i , k)에 넣음
- 화면에 출력
함수부분_copyData()
def copyData():
value = askinteger("제목", "설명~~~~", minvalue=0, maxvalue=255)
label1.configure(text=str(value))
- askinteger를 사용하면 값을 대입하는 입력창이 뜸
- 최댓값 최솟값 설정가능

- 입력한 값은 문자로 변환되어 label1에 입력됨
전역변수
filename = ""
window, canvas, paper = None, None, None
ROW, COL = 256, 256
image = []
메인함수_윈도우창 설정
window = Tk() # 벽
window.title("요기 제목")
window.geometry('300x400')
- title은 맨위 바
- geometry는 윈도우창의 크기
메인함수_윈도우창 화면 안쪽
canvas = Canvas(window, height=256, width=256)
paper = PhotoImage(width=256, height=256)
canvas.create_image((256 / 2, 256 / 2), image=paper, state='normal')
- 윈도우창 안쪽 canvas의 크기 설정
- 이미지가 나타날 paper 크기 설정
- create_image로 이미지 생성
- paper 중심을 기준으로 paper가 나타날 곳을 (x , y)로 표시
메인함수_메뉴 생성
mainMenu = Menu(window) # 메뉴의 틀
window.config(menu=mainMenu)
- 윈도우창 menu, Menu(master)
- config는 바아래 부분, menu는 mainMenu로 받음
fileMenu = Menu(mainMenu) # 상위 메뉴(파일)
mainMenu.add_cascade(label='파일', menu=fileMenu)
fileMenu.add_command(label='열기', command=openFile)
fileMenu.add_command(label='저장')
fileMenu.add_separator()
fileMenu.add_command(label='종료')
editMenu = Menu(mainMenu) # 상위 메뉴(편집)
mainMenu.add_cascade(label='편집', menu=editMenu)
editMenu.add_command(label='복사', command=copyData)
editMenu.add_command(label='잘라내기')
editMenu.add_separator()
editMenu.add_command(label='붙여넣기')
- add_cascade는 메뉴에 점선으로 표시됨
- separator은 실선으로 표시됨
- command는 label 이름으로 표시됨
- 메뉴중 하나를 클릭시 거기에 해당하는 함수가 작동함
메인함수_위젯 컨트롤
label1 = Label(window, text="나는 글자다", font=("궁서체", 20))
button1 = Button(window, text="This is Button", fg='red', bg='yellow',
font=("Lucida Fax", 20), command=btnClick)
label1.pack(side=TOP)
button1.pack(side=TOP)
canvas.pack()
# label1.place(x=100, y=30)
# button1.place(x=50, y=230)
window.mainloop()
- Label은 글자를 생성함
- Button은 버튼을 생성함, command로 눌렀을 때 동작될 함수를 지정
- .pack()은 위치를 조절함, (side=TOP)은 위치를 맨 위로 지정
- window.mainloop()로 루프를 만들어 window 창안에서 계속해서 동작하도록 함
'프로그래밍 > Python' 카테고리의 다른 글
| Gray Scale 영상처리 : 반전 이미지 (0) | 2022.02.18 |
|---|---|
| Gray Scale 영상처리 : 이미지 불러오기 (0) | 2022.02.18 |
| 바이너리 파일처리 (0) | 2022.02.17 |
| 파일 처리 (0) | 2022.02.17 |
| 임의의 이미지값 출력 (0) | 2022.02.17 |