programing

틴터 창을 닫으려면 어떻게 해야 합니까?

newstyles 2023. 7. 23. 14:07

틴터 창을 닫으려면 어떻게 해야 합니까?

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 * 
#use tkinter instead of Tkinter (small, not capital T) if it doesn't work
#as it was changed to tkinter in newer Python versions

root = Tk()
Button(root, text="Quit", command=root.destroy).pack() #button to close the window
root.mainloop()

설명:

root.quit()

위의 라인은 단지 다음을 우회합니다.root.mainloop(),예.,root.mainloop()다음과 같은 경우에도 백그라운드에서 실행됩니다.quit()명령이 실행됩니다.

root.destroy()

하는 동안에destroy()지휘권이 사라지다root.mainloop(),예.,root.mainloop()정지합니다.<window>.destroy() 창을 완전히 파괴하고 닫습니다.

따라서 프로그램을 종료하고 완전히 닫으려면 다음을 사용해야 합니다.root.destroy()그것이 멈추면,mainloop()창과 모든 위젯을 파괴할 수 있습니다.

하지만 무한 루프를 실행하고 싶고 Tkinter 창을 파괴하고 싶지 않고 다음 이후에 코드를 실행하고 싶다면,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

root.destroy()와 root.quit()차이점은 무엇입니까?를 참조하십시오.

def quit()
    root.quit()

또는

def quit()
    root.destroy()
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()

혼동 시 조명...

def quit(self):
    self.destroy()
    exit()

destroy(파괴)는 메인 루프를 중지하고 창을 죽이지만 파이썬은 실행 상태로 둡니다.

exit(종료)는 전체 프로세스를 중지합니다.

누군가 destroy()가 무엇을 하고 있는지, OP가 tkinter 프로그램을 "끝내는 방법"을 물었을 때를 대비해 명확히 하기 위해서입니다.

당신이 Tkinter의 종료 기능을 잘못 이해한 것 같습니다.이 함수는 정의할 필요가 없습니다.

먼저 다음과 같이 기능을 수정해야 합니다.

from Tkinter import *
root = Tk()
Button(root, text="Quit", command=root.quit).pack()
root.mainloop()

그런 다음 접미사 '.pyw'를 사용하여 이 파일을 저장하고 '.pyw' 파일을 두 번 클릭하여 GUI를 실행해야 합니다. 이번에는 버튼을 클릭하여 GUI를 종료하면 불쾌한 DOS 창이 없다는 것을 알 수 있습니다.('.py' 파일을 실행하면 종료 기능이 실패합니다.)

파이썬 프로그램을 종료하는 일반적인 방법:

sys.exit()

(종료 상태를 전달할 수도 있음) 또는

raise SystemExit

Tkinter 프로그램에서 잘 작동할 것입니다.

전체 GUI를 닫기 위해 이스케이프 버튼을 바인딩하려는 경우:

master = Tk()
master.title("Python")

def close(event):
    sys.exit()

master.bind('<Escape>',close)
master.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()

다음만 입력하면 됩니다.

root.destroy()

명령으로 설정하면 전체 프로그램이 종료되므로 종료 기능도 필요하지 않습니다.

더 복잡한 작업을 수행하지 않는 한 창을 닫기 위해 기능을 열 필요가 없습니다.

from Tkinter import *

root = Tk()
Button(root, text="Quit", command=root.destroy).pack()
root.mainloop()

idlelib.PyShell 모듈,,root 변수Tk 됩니다.

에의 PyShell.main()를 이것부르기능는라고 합니다.root.mainloop()가 중단될 입니다.root.quit()기능.이런 이유로,root.quit() 의실을 뿐다입니방할의 입니다.mainloop

해당 idlelib 창과 관련된 모든 위젯을 삭제하려면,root.destroy(), 은 의마막줄필호다요니합의 .idlelib.PyShell.main()기능.

▁theinter▁default▁tk다inter▁i를 사용합니다.quit기능은 사용할 수 있지만 다음과 같이 사용할 수 있습니다.

from tkinter import *
from tkinter.ttk import *

window = Tk()
window.geometry('700x700') # 700p x 700p screen

def quit(self):
    proceed = messagebox.askyesno('Quit', 'Quit?')
    proceed = bool(proceed) # So it is a bool

    if proceed:
        window.quit()
    else:
        # You don't really need to do this
        pass

btn1 = Button(window, text='Quit', command=lambda: quit(None))

window.mainloop()

메뉴 모음의 경우:

def quit():
    root.destroy()

menubar = Menu(root)
filemenu = Menu(menubar, tearoff=0)

filemenu.add_separator()

filemenu.add_command(label="Exit", command=quit)
menubar.add_cascade(label="menubarname", menu=filemenu)
root.config(menu=menubar)
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()

여기에 빈 창 & 파일 추가 메뉴 옵션을 동일한 창(루트 창)에 만들었습니다. 여기서 옵션 종료를 하나만 추가합니다.

그런 다음 루트에 대해 메인 루프를 실행합니다.

한 번 해보세요.

물론 다음과 같이 버튼에 명령을 할당할 수 있지만 UI를 만드는 경우 "X" 버튼에 동일한 명령을 할당하는 것이 좋습니다.

def quit(self): # Your exit routine
   self.root.destroy()

self.root.protocol("WM_DELETE_WINDOW", self.quit) # Sets the command for the "X" button 

Button(text="Quit", command=self.quit) # No ()

간단한 한 줄 답변이 있습니다.

- 기쓰 -exit()지휘권을 가지고 있는

바로 그거야!

언급URL : https://stackoverflow.com/questions/110923/how-do-i-close-a-tkinter-window