Подтвердить что ты не робот

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

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

from Tkinter import *

def quit():
    # code to exit

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

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

4b9b3361

Ответ 1

Вы должны использовать 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

Ответ 2

def quit()
    root.quit()

или же

def quit()
    root.destroy()

Ответ 3

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()

Ответ 4

Обычный способ выхода из программы Python:

sys.exit()

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

raise SystemExit

отлично работает в программе Tkinter.

Ответ 5

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

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

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

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

Ответ 6

Освещение в случае путаницы...

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

A) destroy() останавливает mainloop и убивает окно, но оставляет запуск python

B) exit() останавливает весь процесс

Просто, чтобы прояснить, если кто-то пропустил действие destroy(), и OP также спросил, как "закончить" программу tkinter.

Ответ 7

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

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

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

Ответ 8

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

root.destroy()

или

root.quit()

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

import tkinter

main = Tk()

main.destroy()

main.mainloop

Ответ 9

Самый простой способ - нажать на красную кнопку (крайняя слева в 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()

Ответ 10

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

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

def close(event):
    sys.exit()

master.bind('<Escape>',close)
master.mainloop()

Ответ 11

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

root.destroy()

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

Ответ 12

def quit1():
     root.destroy()

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

Ответ 13

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

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

Ответ 14

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

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()

Ответ 15

Я использую ниже коды для выхода из окна 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()

Ответ 16

Фрагмент кода ниже. Я предлагаю небольшой сценарий.

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()

Я создал здесь пустое окно & добавить опцию меню файла в том же окне (корневое окно), где я добавляю только одну опцию выхода.

Затем просто запустите mainaop для root.

Попробуйте сделать это один раз

Ответ 17

Использовать root.destroy()! Работает для меня просто отлично.

Ответ 18

Попробуйте следующее:

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

Ответ 19

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

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

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