파트 13-1. 파이썬과 mysql 응용 - 함수, 윈도 프로그래밍

1.기본 윈도 창의 구성


파이썬은 대소문자를 구분하므로 주의하자.

# gui 관련 무듈을 제공해주는 표준 윈도 라이브러리
# 윈도우 창이 필요할 경우 import
from tkinter import *
window =Tk() # TK는 기본이 되는 윈도를 반환

# 이 부분에서 화면을 구성하고 처리


window.mainloop() # 윈도 창에 키보드 누르기, 마우스 클릭 등의 다양한 이벤트 처리를 위해 필요

실행하면 윈도우 창이 뜬다. 이 뼈대를 가지고 응용해 나가면 된다.


그림1

from tkinter import *
window =Tk()
window.title("윈도창 연습") # 화면 창 이름
window.geometry("400x100") # 화면 창 크기
window.resizable(width=False, height=False) # 화면 창 수정 불가능

window.mainloop()


2. 라벨


그림2

라벨은 문자를 표현할 수 있는 위젯이다. Label(부모윈도,옵션)으로 사용하고 pack을 통해 라벨을 화면에 표시한다.

from tkinter import *
window =Tk()

label1 = Label(window,text="this is mysql")
# 폰트, 글자색상
label2 = Label(window,text="this is mysql",font=("궁서체",30),fg="blue") 
# 백경색상, 배경크기, 글자위치(south east)
label3 = Label(window,text="this is mysql",bg="magenta",width=20,height=5,anchor=SE)

# 만들 레이블을 pack을 통해 화면에 출력
label1.pack()
label2.pack()
label3.pack()

window.mainloop()


3. 버튼


그림3

Button은 마우스로 클릭하면 눌리는 효과와 함께 지정한 작업이 실행되도록 사용되는 위젯이다. 형식은 Button(부모윈도, 옵션)으로 사용하면 된다. 라벨과 달리 버튼을 눌렀을 때 어떤 작업을 해 줘야 한다. command 옵션은 버튼을 눌렀을 때 지정한 작업을 처리할 수 있다. 보통 command=함수 로 사용하는데 뒤에 괄호 붙으면 안된다.

from tkinter import *
from tkinter import messagebox # 메시지박스 사용을 위함

def clickButton():
    # 화면에 창 나타내기
    # messagebox.showinfo(윈도창이름,출력내용)
    messagebox.showinfo('버튼 클릭','버튼을 클릭했습니다.')
    
window =Tk()
window.geometry("200x200") # 윈도우 창 크기 지

# 변수 button1에 버튼 정보 대입
button1 = Button(window,text="클릭",fg='red',bg='yellow',command=clickButton)
# 대입한 정보 pack으로 화면에 출력, expand=1은 화면 정중앙을 의미
button1.pack(expand=1)

window.mainloop()


4. 위젯의 정렬, 여백


그림4 pack()함수의 옵션 중에서 수평으로 정렬하는 방법은 side=LEFT,RIGHT 방식이 있다. 수직으로 정렬하는 방법은 side=TOP,BOTTOM 방식이 있다.

from tkinter import *
    
window =Tk()

button1 = Button(window, text="버튼1")
button2 = Button(window, text="버튼2")
button3 = Button(window, text="버튼3")

# side=LEFT 왼쪽부터 순서대로 만들어 진다. padx,pady으로 여백
button1.pack(side=LEFT,padx =10, pady = 10)
button2.pack(side=LEFT)
button3.pack(side=LEFT)


window.mainloop()


5. 프레임, 엔트리, 리스트박스


  • 프레임 : 화면의 구역을 나눌 때 사용한다.
  • 엔트리 : 입력 상자를 표현한다.
  • 리스트박스 : 목룍을 표현한다

그림5

from tkinter import *

window = Tk()
window.geometry("200x200")

# 윈도 창을 2개로 나눔
upframe = Frame(window)
downframe = Frame(window)

# 나눈 창 화면에 표시
upframe.pack()
downframe.pack()

# 나눈창 upframe에 폭10 배경 그린으로 입력상자 만들기
editbox = Entry(upframe,width =10, bg='green')
editbox.pack(padx =20, pady=20) # 화면에 표시

# 나눈 창에 배경은 노란색에 목록창 만들기
listbox = Listbox(downframe, bg='yellow')
listbox.pack() # 화면에 표시

# END는 데이터를 제일 뒤에 첨부하라는 뜻
listbox.insert(END,'하나')
listbox.insert(END,'둘')
window.mainloop()


6. 메뉴


메뉴를 선택하면 그 아래 하위 메뉴가 나오고, 하위 메뉴 중 하나를 선택하면 비로소 어떤 작업이 실행된다. 예를 들면, 파일 > 열기 > 대화상자 나오는 상황이랑 같다.

# 형식
메뉴자체 = Menu(부모윈도) # 클릭하면 열리는 그 메뉴 자체를 만듦
부모윈도.config(menu=메뉴자체) # 메뉴자체를 윈도 창의 메뉴로 지정

# 상위메뉴를 생성
상위메뉴 = Menu(메뉴자체)
# 상위메뉴를 메뉴자체에 부착, 메뉴를 누르면 확장되어야하므로 add_cascade함수 사용
메뉴자체.add_cascade(label="상위메뉴텍스트, menu=상위메뉴)
# 상위메뉴 안에 있는 하위메뉴 만들기
# 하위 메뉴를 누르면 동작해야하므로 add_command함수 사용
상위메뉴.add_command(label="하위메뉴1", command=함수1)
상위메뉴.add_command(label="하위메뉴2", command=함수2)

대부분의 메뉴는 위와 같은 형태로 구성된다.
[파일] 메뉴 아래에 [열기]와 [종료]가 있는 코드를 만들어보자. 그림6

from tkinter import *
from tkinter import messagebox

def func_open():
    messagebox.showinfo("네뮤선택","열기 메뉴를 선택함")

def func_exit():
    # 윈도 창 닫기
    window.quit()
    window.destroy()

window = Tk()

mainMenu = Menu() # 메뉴자체 생성
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)


# 형태 그대로 변수,라벨이름,작동 함수만 바꾸면 된다.
editMenu = Menu(mainMenu) # 상위메뉴 생성
mainMenu.add_cascade(label="편집",menu=editMenu) # 메뉴자체에 부착
editMenu.add_command(label="복사",command=func_open)
editMenu.add_separator() # 하위메뉴사이에 구분선
editMenu.add_command(label="붙여넣기",command=func_exit)

window.mainloop()


7. 대화상자


파이썬은 몇 가지의 대화상자를 제공한다. 앞서 보았던 messagebox.showinfo 외에도 숫자나 문자를 입력 받기 위해서 tkinter.simpledialog 모듈을 임포트한 후, askinteger(), askstrinig(),askfloat() 등을 사용할 수 있다. 그림7

from tkinter import *
from tkinter.simpledialog import *

window = Tk()
window.geometry("400x100")

label1 = Label(window,text="입력된 값")
label1.pack()

# askinteger(창이름,내용,옵션)
# 범위를 벗어나면 경고창 + 입력되지 않음
value = askinteger("확대배수","주사위 1~6값 입력하세요",minvalue=1,maxvalue=6)

# value를 라벨로 사용
label1.configure(text=str(value))

window.mainloop()


8. 캔버스


Tk()로 생성한 윈도 창에는 선, 면, 글자 등의 그림을 그릴 수 없다. 그래서 캔버스를 윈도 창에 부착한 후에 캔버스에 선, 면, 글자 등을 표현한다. 그림8

from tkinter import *
from tkinter.simpledialog import *

window = Tk()
# 캔버스를 윈도창에 부착
canvas = Canvas(window,height=300,width=300)
canvas.pack() # 화면 출력

# fill은 색상
canvas.create_line([[0,0],[70,70],[30,170]],fill="blue",width=3)
canvas.create_polygon([[100,100],[100,150],[150,150],[150,100]],fill=
'red')
canvas.create_text([200,200],text="this is mysql",font=("굴림",15))
window.mainloop()



본 포스팅은 ‘이것이 MySQL이다’를 읽고 공부한 내용을 바탕으로 작성하였습니다.


© 2021. By Backtony