Как закрыть окно tkinter?

python tkinter

193141 просмотра

17 ответа

3130 Репутация автора

Как мне завершить программу Tkinter? Допустим, у меня есть этот код:

from Tkinter import *

def quit():
    # code to exit

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

Как мне определить quitфункцию для выхода из приложения?

Автор: Matt Gregory Источник Размещён: 21.09.2008 12:40

Ответы (17)


36 плюса

3130 Репутация автора

def quit()
    root.quit()

или же

def quit()
    root.destroy()
Автор: Matt Gregory Размещён: 21.09.2008 12:44

4 плюса

53839 Репутация автора

Обычный метод для выхода из программы Python:

sys.exit()

(которому вы также можете передать статус выхода) или

raise SystemExit

будет хорошо работать в программе Tkinter.

Автор: dF. Размещён: 21.09.2008 01:24

15 плюса

0 Репутация автора

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()
Автор: kaytec Размещён: 16.11.2008 06:36

76 плюса

1017 Репутация автора

Решение

Вы должны использовать, 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()поскольку она остановит 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
Автор: aki92 Размещён: 22.03.2013 06:39

6 плюса

71 Репутация автора

Я думаю, что вы неправильно поняли функцию выхода из Tkinter. Эта функция не требует от вас определения.

Во-первых, вы должны изменить свою функцию следующим образом:

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

Затем вы должны использовать суффикс «.pyw», чтобы сохранить эти файлы, и дважды щелкнуть файл «.pyw», чтобы запустить графический интерфейс. На этот раз вы можете завершить работу с графическим интерфейсом одним нажатием кнопки, и вы также можете найти, что не будет неприятного окна DOS. (Если вы запустите файл '.py', функция выхода не будет выполнена.)

Автор: TreeDoNotSplit Размещён: 17.09.2013 02:41

-3 плюса

16 Репутация автора

попробуй это.

    self.parent.destroy() 
    self.parent.quit()

может быть, вы отправляете корень как параметр в кадр, который вы сделали. поэтому, если вы хотите закончить это, вы должны позвонить своему отцу, чтобы он мог все это закрыть, вместо того, чтобы закрывать каждого из своих детей.

Автор: Jose Pablo Castillo Размещён: 27.05.2015 11:00

3 плюса

31 Репутация автора

Подсветка в случае путаницы ...

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

A) destroy () останавливает основной цикл и убивает окно, но оставляет запущенный питон

Б) выход () останавливает весь процесс

Просто чтобы уточнить, в случае, если кто-то пропустил, что делает destroy (), и ОП также спросил, как «завершить» программу tkinter.

Автор: Martin Guiles Размещён: 26.08.2016 09:22

-2 плюса

432 Репутация автора

Попробуй это:

from Tkinter import *
import sys
def exitApp():
    sys.exit()
root = Tk()
Button(root, text="Quit", command=exitApp).pack()
root.mainloop()
Автор: Stiffy2000 Размещён: 05.09.2016 06:38

1 плюс

31 Репутация автора

В idlelib.PyShellмодуле rootпеременная типа Tkопределена как глобальная

В конце PyShell.main()функции он вызывает root.mainloop()функцию, которая представляет собой бесконечный цикл, и работает до тех пор, пока root.quit()функция не прервет цикл . Следовательно, root.quit()будет только прерывать выполнениеmainloop

Чтобы уничтожить все виджеты, относящиеся к этому окну idlelib, root.destroy()необходимо вызвать их, что является последней строкой idlelib.PyShell.main()функции.

Автор: RAD Размещён: 22.05.2017 09:11

1 плюс

13 Репутация автора

Ты можешь использовать:

root.destroy()

Или же

root.quit()

Если это не сработает, измените root на то, что когда-либо было вашей переменной в начале вашей программы

import tkinter

main = Tk()

main.destroy()

main.mainloop
Автор: JackHumphries Размещён: 07.10.2017 11:10

0 плюса

21 Репутация автора

def quit1():
     root.destroy()

Button(root, text="Quit", command=quit1).pack()
root.mainloop()
Автор: user9093127 Размещён: 17.01.2018 12:16

0 плюса

23 Репутация автора

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

Должен делать то, что вы просите.

Автор: Harrison Sills Размещён: 04.04.2018 08:01

1 плюс

11 Репутация автора

Самый простой способ - нажать красную кнопку (крайняя слева в 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()
Автор: Ian Gabaraev Размещён: 24.07.2018 09:56

1 плюс

16 Репутация автора

В случае, если кто-то хочет привязать свою кнопку Escape к закрытию всего GUI:

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

def close(event):
    sys.exit()

master.bind('<Escape>',close)
master.mainloop()
Автор: Nukyi Размещён: 29.10.2018 08:42

0 плюса

1 Репутация автора

Для строк меню:

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()
Автор: LenyaKap Размещён: 13.12.2018 04:33

1 плюс

44 Репутация автора

вам нужно всего лишь набрать это:

root.destroy()

и вам даже не нужно вызывать функцию quit (), если вы установите ее в качестве команды, то она закроет всю программу.

Автор: BE Official Размещён: 05.04.2019 01:05

0 плюса

1 Репутация автора

Я использую ниже коды для выхода из окна 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()
Автор: kourosh Размещён: 02.05.2019 05:32
Вопросы из категории :
32x32