Tkinter에서 창 닫기 이벤트를 어떻게 처리합니까?
Python Tkinter 프로그램에서 창 닫기 이벤트 (사용자가 'X'버튼을 클릭)를 어떻게 처리합니까?
Tkinter는 프로토콜 핸들러 라는 메커니즘을 지원합니다 . 여기서 프로토콜 이라는 용어 는 응용 프로그램과 창 관리자 간의 상호 작용을 나타냅니다. 가장 일반적으로 사용되는 프로토콜은라고 WM_DELETE_WINDOW
하며 사용자가 창 관리자를 사용하여 창을 명시 적으로 닫을 때 발생하는 작업을 정의하는 데 사용됩니다.
protocol
메소드를 사용 하여이 프로토콜에 대한 핸들러 를 설치할 수 있습니다 (위젯은 Tk
또는 Toplevel
위젯 이어야 함 ).
여기에 구체적인 예가 있습니다.
import tkinter as tk
from tkinter import messagebox
root = tk.Tk()
def on_closing():
if messagebox.askokcancel("Quit", "Do you want to quit?"):
root.destroy()
root.protocol("WM_DELETE_WINDOW", on_closing)
root.mainloop()
Matt는 닫기 버튼의 고전적인 수정을 보여주었습니다.
다른 하나는 닫기 버튼을 사용하여 창을 최소화하는 것입니다.
당신은 필요에 의해이 동작을 재현 할 수 있습니다 아이콘 화 방법은
수 프로토콜 메서드의 두 번째 인수.
다음은 Windows 7에서 테스트 한 작업 예제입니다.
# Python 3
import tkinter
import tkinter.scrolledtext as scrolledtext
class GUI(object):
def __init__(self):
root = self.root = tkinter.Tk()
root.title('Test')
# make the top right close button minimize (iconify) the main window
root.protocol("WM_DELETE_WINDOW", root.iconify)
# make Esc exit the program
root.bind('<Escape>', lambda e: root.destroy())
# create a menu bar with an Exit command
menubar = tkinter.Menu(root)
filemenu = tkinter.Menu(menubar, tearoff=0)
filemenu.add_command(label="Exit", command=root.destroy)
menubar.add_cascade(label="File", menu=filemenu)
root.config(menu=menubar)
# create a Text widget with a Scrollbar attached
txt = scrolledtext.ScrolledText(root, undo=True)
txt['font'] = ('consolas', '12')
txt.pack(expand=True, fill='both')
gui = GUI()
gui.root.mainloop()
이 예에서는 사용자에게 두 가지 새로운 종료 옵션,
즉 클래식 파일 메뉴-> 종료 및 Esc버튼을 제공합니다.
Depending on the Tkinter activity, end esp. when using Tkinter.after, stopping this activity with destroy()
-- even by using protocol(), a button, etc. -- will disturb this activity ("while executing" error) rather than just terminate it. The best solution in almost every case is to use a flag. Here is a simple, silly example of how to use it (although I am certain that most of you don't need it! :)
from Tkinter import *
def close_window():
global running
running = False
print "Window closed"
root = Tk()
root.protocol("WM_DELETE_WINDOW", close_window)
cv = Canvas(root, width=200, height=200); cv.pack()
running = True;
# This is an endless loop stopped only by setting 'running' to 'False'
while running:
for i in range(200):
if not running: break
cv.create_oval(i,i,i+1,i+1); root.update()
This terminates graphics activity nicely. You only need to check running
at the right place(s).
Try The Simple Version:
import tkinter
window = Tk()
closebutton = Button(window, text='X', command=window.destroy)
closebutton.pack()
window.mainloop()
Or If You Want To Add More Commands:
import tkinter
window = Tk()
def close():
window.destroy()
#More Functions
closebutton = Button(window, text='X', command=close)
closebutton.pack()
window.mainloop()
Use the closeEvent
def closeEvent(self, event):
# code to be executed
참고URL : https://stackoverflow.com/questions/111155/how-do-i-handle-the-window-close-event-in-tkinter
'programing' 카테고리의 다른 글
데이터베이스 레코드의 물리적 대 논리적 / 소프트 삭제? (0) | 2020.08.13 |
---|---|
C #에서 작은 코드 샘플을 벤치마킹하면이 구현을 개선 할 수 있습니까? (0) | 2020.08.13 |
Kotlin : 함수를 매개 변수로 다른 함수에 전달하는 방법은 무엇입니까? (0) | 2020.08.13 |
Xcode — $ (SRCROOT) 란 무엇입니까? (0) | 2020.08.13 |
여러 줄 가져 오기에 권장되는 형식이 있습니까? (0) | 2020.08.13 |