Tkinter 프로그램을 종료하려면 어떻게합니까? 이 코드가 있다고 가정 해 봅시다.
from Tkinter import *
def quit():
# code to exit
root = Tk()
Button(root, text="Quit", command=quit).pack()
root.mainloop()
quit
내 응용 프로그램을 종료 하는 기능을 어떻게 정의해야 합니까?
답변:
destroy()
tkinter 창을 닫으려면를 사용해야 합니다.
from Tkinter import *
root = Tk()
Button(root, text="Quit", command=root.destroy).pack()
root.mainloop()
설명:
root.quit()
위의 라인은 우회root.mainloop()
즉,이 root.mainloop()
경우 여전히 백그라운드에서 실행됩니다 quit()
명령이 실행됩니다.
root.destroy()
destroy()
명령이 사라지는 동안 root.mainloop()
즉 root.mainloop()
중지합니다.
그냥 프로그램을 종료 할대로 사용해야하므로 그래서 root.destroy()
같이 IT는 중지됩니다 mainloop()
.
그러나 무한 루프를 실행하고 Tk 창을 파괴하고 싶지 않고 root.mainloop()
줄마다 코드를 실행하고 싶다면 root.quit()
. 전의:
from Tkinter import *
def quit():
global root
root.quit()
root = Tk()
while True:
Button(root, text="Quit", command=quit).pack()
root.mainloop()
#do something
quit
하면 모든 위젯이 파괴됩니다. 위젯이 파괴 mainloop
되면 종료됩니다.
def quit()
root.quit()
또는
def quit()
root.destroy()
root.destroy()
메인 프로그램 루프를 종료하므로 사용하는 것이 좋습니다 . 참조 : http://www.daniweb.com/software-development/python/threads/66698
import Tkinter as tk
def quit(root):
root.destroy()
root = tk.Tk()
tk.Button(root, text="Quit", command=lambda root=root:quit(root)).pack()
root.mainloop()
나는 당신이 Tkinter의 종료 기능을 잘못 이해했다고 생각합니다. 이 함수는 정의 할 필요가 없습니다.
먼저 다음과 같이 함수를 수정해야합니다.
from Tkinter import *
root = Tk()
Button(root, text="Quit", command=root.quit).pack()
root.mainloop()
그런 다음 '.pyw'접미사를 사용하여이 파일을 저장하고 '.pyw'파일을 두 번 클릭하여 GUI를 실행해야합니다. 이번에는 버튼을 클릭하여 GUI를 종료 할 수도 있습니다. 불쾌한 DOS 창이 없습니다. ( '.py'파일을 실행하면 종료 기능이 실패합니다.)
혼란시 조명 ...
def quit(self):
self.destroy()
exit()
A) destroy ()는 메인 루프를 중지하고 창을 죽이지 만 파이썬은 계속 실행됩니다.
B) exit ()는 전체 프로세스를 중지합니다
누군가 destroy ()가하는 일을 놓친 경우를 명확히하기 위해 OP는 또한 tkinter 프로그램을 "종료"하는 방법을 물었습니다.
당신이 사용할 수있는:
root.destroy()
또는
root.quit()
그래도 작동하지 않으면 루트를 프로그램 시작 부분의 변수로 변경하십시오.
import tkinter
main = Tk()
main.destroy()
main.mainloop
가장 쉬운 방법은 빨간색 버튼을 클릭하는 것입니다 (macOS에서는 가장 왼쪽, Windows에서는 가장 오른쪽). 특정 기능을 버튼 위젯에 바인딩하려면 다음과 같이 할 수 있습니다.
class App:
def __init__(self, master)
frame = Tkinter.Frame(master)
frame.pack()
self.quit_button = Tkinter.Button(frame, text = 'Quit', command = frame.quit)
self.quit_button.pack()
또는 좀 더 복잡하게 만들려면 프로토콜 처리기와 destroy()
메서드를 사용하십시오.
import tkMessageBox
def confirmExit():
if tkMessageBox.askokcancel('Quit', 'Are you sure you want to exit?'):
root.destroy()
root = Tk()
root.protocol('WM_DELETE_WINDOW', confirmExit)
root.mainloop()
def quit1():
root.destroy()
Button(root, text="Quit", command=quit1).pack()
root.mainloop()
import sys
from Tkinter import *
def quit():
sys.exit()
root = Tk()
Button(root, text="Quit", command=quit).pack()
root.mainloop()
당신이 요구하는 것을해야합니다.
Tkinter 창을 종료하려면 아래 코드를 사용합니다.
from tkinter import*
root=Tk()
root.bind("<Escape>",lambda q:root.destroy())
root.mainloop()
또는
from tkinter import*
root=Tk()
Button(root,text="exit",command=root.destroy).pack()
root.mainloop()
또는
from tkinter import*
root=Tk()
Button(root,text="quit",command=quit).pack()
root.mainloop()
또는
from tkinter import*
root=Tk()
Button(root,text="exit",command=exit).pack()
root.mainloop()
아래 코드 스 니펫. 저는 작은 시나리오를 제공하고 있습니다.
import tkinter as tk
from tkinter import *
root = Tk()
def exit():
if askokcancel("Quit", "Do you really want to quit?"):
root.destroy()
menubar = Menu(root, background='#000099', foreground='white',
activebackground='#004c99', activeforeground='white')
fileMenu = Menu(menubar, tearoff=0, background="grey", foreground='black',
activebackground='#004c99', activeforeground='white')
menubar.add_cascade(label='File', menu=fileMenu)
fileMenu.add_command(label='Exit', command=exit)
root.config(bg='#2A2C2B',menu=menubar)
if __name__ == '__main__':
root.mainloop()
나는 빈 창을 여기에 만든 & I는 하나의 옵션 추가 같은 창 (루트 창)에 파일 메뉴 옵션을 추가 한 종료 .
그런 다음 간단히 mainloop 를 실행하십시오. root에 대해 를 .
한번 해봐
from tkinter import *
def quit(root):
root.close()
root = Tk()
root.title("Quit Window")
def quit(root):
root.close()
button = Button(root, text="Quit", command=quit.pack()
root.mainloop()
)
당신 button
과 당신의 함수를 잘못 호출하고 있습니다.
raise SystemExit
이것은 첫 번째 시도에서 작동했습니다.
self.destroy()
root.destroy()
하지 않았다
이 시도.
self.parent.destroy()
self.parent.quit()
아마도 당신은 당신이 한 프레임에 루트와 같은 매개 변수를 보낼 수 있습니다. 그래서 당신이 그것을 끝내고 싶다면 당신은 당신의 아버지에게 전화를해서 그의 아이들을 각각 닫는 대신 모든 것을 닫을 수 있도록해야합니다.