아래 이미지 파일을 다운로드 & 소스와 같은 폴더에 복사후 실행하기 바랍니다.
protocol() 함수는 이벤트와 함수를 연결하는 기능을 하며 아래 코드에는 위도우 창 닫기 이벤트(WM_DELETE_WINDOW)와 on_closing() 함수를 연결하여, 윈도우 창을 닫을 때 on_closing() 함수를 호출합니다.
from tkinter import *
class StageCanvas:
def __init__(self,window):
self.window = window
self.canvas=Canvas(self.window, bg ="white") # game scene canvas
self.canvas.create_text(320,300,font="Times 15 italic bold",text="Backspace 키 메뉴로 돌아가기")
self.canvas.create_text(320,360,font="Times 15 italic bold",text="Stage Scene")
def display(self):
pass
def pack(self):
self.canvas.pack(expand=True, fill=BOTH)
def unpack(self):
self.canvas.pack_forget()
def keyReleaseHandler(self, event):
if event.keycode == 8:
return 0
else:
return -1
def destroy(self):
self.canvas.destroy()
class MenuCanvas:
def __init__(self,window):
self.window = window
self.menu_idx = 0
self.canvas=Canvas(self.window, bg ="white")# menu canvas
self.canvas.create_text(320,360,font="Times 15 italic bold",text="Scene Change")
self.canvas.create_text(320,160,font="Times 15 italic bold",text="Start")
self.canvas.create_text(320,200,font="Times 15 italic bold",text="Option")
self.canvas.create_text(320,240,font="Times 15 italic bold",text="Exit")
self.arrowimg = PhotoImage(file="arrow.png").subsample(20)
self.arrow = self.canvas.create_image(250,160, image = self.arrowimg,tags="arrow")
def display(self):
pass
def pack(self):
self.canvas.pack(expand=True, fill=BOTH)
def unpack(self):
self.canvas.pack_forget()
def keyReleaseHandler(self, event):
if event.keycode == 38 and self.menu_idx > 0: # up direction key
self.menu_idx = self.menu_idx - 1
self.canvas.move(self.arrow, 0, -40)
return -1
elif event.keycode == 40 and self.menu_idx < 2: # down direction key
self.menu_idx = self.menu_idx + 1
self.canvas.move(self.arrow, 0, 40)
return -1
elif event.keycode == 32:
return self.menu_idx
def destroy(self):
self.canvas.destroy()
class SceneChange:
def __init__(self):
self.window = Tk()
self.window.title("장면전환")
self.window.geometry("640x480")
self.window.protocol("WM_DELETE_WINDOW", self.on_closing)
self.scene_idx = 0
self.stage = StageCanvas(self.window)
self.menu = MenuCanvas(self.window)
self.menu.pack()
self.canvas_list = []
self.canvas_list.append(self.stage)
self.canvas_list.append(self.stage)
self.window.bind("<KeyPress>",self.keyPressHandler)
self.window.bind("<KeyRelease>",self.keyReleaseHandler)
while True:
#
#
for canvas in self.canvas_list:
canvas.display()
self.window.after(33)
self.window.update()
def on_closing(self):
for canvas in self.canvas_list:
canvas.destroy()
self.window.destroy()
def keyReleaseHandler(self, event):
result = -1
if self.scene_idx == 0:
result = self.menu.keyReleaseHandler(event)
elif self.scene_idx == 1:
result = self.stage.keyReleaseHandler(event)
if self.scene_idx == 0 and result==0:
self.scene_idx = 1
self.menu.unpack()
self.stage.pack()
elif self.scene_idx==1 and result==0:
self.scene_idx = 0
self.menu.pack()#메뉴 canvas 나타남
self.stage.unpack()# Main 장면 canvas 사라짐
def keyPressHandler(self,event):
print(event.keycode)
SceneChange()
'IT > 파이썬(Python)' 카테고리의 다른 글
파이썬 네트워크 게임 서버 클라이언트 (socket, ast, json, threading) (0) | 2023.08.25 |
---|---|
파이썬 네트워크 통신 채팅 프로그램 서버 클라이언트 예제 (0) | 2023.08.25 |
파이썬 tkinter canvas GUI 메뉴 만들기 코드 (0) | 2022.04.04 |
파이썬 tkinter 마우스 이벤트 코드 예제, 이벤트 종류, bind 함수 설명, (0) | 2022.04.04 |
파이썬 움직이는 gif 이미지 읽어오기 (0) | 2022.04.04 |