Как сделать выход из программы python tkinter

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

from Tkinter import * def quit(): # code to exit root = Tk() Button(root, text=»Quit», command=quit).pack() root.mainloop()

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

user10577 21 сен ’08 в 12:40 2008-09-21 12:40
2008-09-21 12:40

27 ответов

Вы должны использовать 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() , Пример:

Python — Tkinter GUI onclick function #python #programming #coding


from Tkinter import * def quit(): global root root.quit() root = Tk() while True: Button(root, text=»Quit», command=quit).pack() root.mainloop() #do something
user2142721 22 мар ’13 в 18:39 2013-03-22 18:39
2013-03-22 18:39
def quit() global root root.quit()
def quit() global root root.destroy()
user10577 21 сен ’08 в 12:44 2008-09-21 12:44
2008-09-21 12:44

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()
16 ноя ’08 в 18:36 2008-11-16 18:36
2008-11-16 18:36

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

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

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

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

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

user6763094 26 авг ’16 в 21:22 2016-08-26 21:22
2016-08-26 21:22

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

sys.exit()

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

raise SystemExit

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

user3002 21 сен ’08 в 13:24 2008-09-21 13:24
2008-09-21 13:24

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

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

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

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

Читайте также:
Как запустить показ слайдов презентации программы powerpoint с текущего слайда

Create a simple GUI using Python and Tkinter 🤩 #shorts

user2788026 17 сен ’13 в 14:41 2013-09-17 14:41
2013-09-17 14:41

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

master = Tk() master.title(«Python») def close(event): sys.exit() master.bind(»,close) master.mainloop()
user10324360 29 окт ’18 в 08:42 2018-10-29 08:42
2018-10-29 08:42

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

root.destroy()

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

user10686694 05 апр ’19 в 13:05 2019-04-05 13:05
2019-04-05 13:05

Самый простой способ — нажать на красную кнопку (крайняя слева в 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()
user9612362 24 июл ’18 в 09:56 2018-07-24 09:56
2018-07-24 09:56

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

from Tkinter import * root = Tk() Button(root, text=»Quit», command=root.destroy).pack() root.mainloop()
28 июл ’21 в 17:58 2021-07-28 17:58
2021-07-28 17:58

Вот что вам нужно сделать, чтобы уничтожить окно:

user14672478 31 авг ’21 в 00:40 2021-08-31 00:40
2021-08-31 00:40

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

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

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

user5153622 22 май ’17 в 21:11 2017-05-22 21:11
2017-05-22 21:11

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

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

user7751707 04 апр ’18 в 20:01 2018-04-04 20:01
2018-04-04 20:01

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

root.destroy()
root.quit()

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

import tkinter main = Tk() main.destroy() main.mainloop
user4917235 07 окт ’17 в 23:10 2017-10-07 23:10
2017-10-07 23:10

Читайте также:
Смартломбард отзывы о программе

Обычно я использую tkinter quit по умолчанию, но вы можете сделать это самостоятельно, например:

from tkinter import * from tkinter.ttk import * window = Tk() window.geometry(‘700×700’) # 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()
user16516820 26 июл ’21 в 17:03 2021-07-26 17:03
2021-07-26 17:03

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

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

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

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

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

user4520574 18 сен ’19 в 12:35 2019-09-18 12:35
2019-09-18 12:35

Конечно, вы можете назначить команду кнопке следующим образом, однако, если вы создаете пользовательский интерфейс, рекомендуется назначить ту же команду кнопке «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 ()
user13010024 14 фев ’21 в 21:27 2021-02-14 21:27
2021-02-14 21:27

Я использую ниже коды для выхода из окна Tkinter:

from tkinter import* root=Tk() root.bind(«»,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()
user11007580 02 май ’19 в 17:32 2019-05-02 17:32
2019-05-02 17:32
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()
user10784099 13 дек ’18 в 04:33 2018-12-13 04:33
2018-12-13 04:33
def quit1(): root.destroy() Button(root, text=»Quit», command=quit1).pack() root.mainloop()
user9093127 17 янв ’18 в 12:16 2018-01-17 12:16
2018-01-17 12:16
Button(root, text=»Quit», command=lambda:root.destroy()).pack()
user14815570 21 мар ’21 в 09:27 2021-03-21 09:27
2021-03-21 09:27
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()
27 дек ’20 в 09:38 2020-12-27 09:38
2020-12-27 09:38

root.destroy будет работать.
root.quit тоже будет работать.

В моем случае у меня было

quitButton = Button(frame, text = «Quit», command = root.destroy)

Надеюсь, это поможет.

user12354026 11 ноя ’19 в 10:22 2019-11-11 10:22
2019-11-11 10:22

Есть простой однострочный ответ:

Напишите — exit() в команде

user13298841 21 апр ’20 в 07:01 2020-04-21 07:01
2020-04-21 07:01

raise SystemExit

это сработало с первой попытки, где

Читайте также:
Программа электрик описание основные возможности

self.destroy() root.destroy()
user12232151 06 фев ’20 в 20:29 2020-02-06 20:29
2020-02-06 20:29
from Tkinter import * import sys def exitApp(): sys.exit() root = Tk() Button(root, text=»Quit», command=exitApp).pack() root.mainloop()
user6486666 05 сен ’16 в 18:38 2016-09-05 18:38
2016-09-05 18:38
self.parent.destroy() self.parent.quit()

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

Источник: stackru.com

Как реализовать выход из программы с выводом сообщения об ошибке в Tkinter?

Добрый всем вечер. Недавно задали реализовать программу с графическим интерфейсом. Для этого мною была использована библиотека Tkinter. Для полноценной работы хотел сделать нормальную реакцию программы на разные ошибки, т.е. если происходит какая-то ошибка, то об этом выводится сообщение на экран, а далее программа закрывается. Реализовал я это таким образом:

if (summToPay >= maxPayment): log.after(0, print_error(‘You have exceeded the maximum payment amountn’)) root.after(5000, exit())

Но при таком раскладе программа просто завершается по истечению 5 секунд и ничего более, если же заменить exit на quit, то не происходит ничего.
Подскажите, что можно с этим сделать?

  • Вопрос задан более трёх лет назад
  • 1681 просмотр

2 комментария

Оценить 2 комментария

Источник: qna.habr.com

Tkinter. Всплывающие окна

Работа со всплывающими окнами – неотъемлемая составляющая работы с любым приложением. В некоторых ситуациях нет никакой необходимости в том, чтобы информационные блоки изменяли окно. Значительно проще воспользоваться отдельным окном, предназначенным для этой задачи. В том числе, сюда входит создание дополнительного окна, а также ряд других операций, которые мы рассмотрим более подробно.

Открытие дополнительного окна

Элемент Tk , как вы, возможно, знаете, являет собой основное окно. Если его уничтожить, программа попросту закрывается.

А что если необходимо создать дополнительные окна? Какой класс используется для них? Для этого применяется элемент Toplevel . С помощью этого класса возможно отображение самых разных окон, в том числе, и сложных.

Tkinter. Всплывающие окна

Давайте для начала попробуем создать простое окошко, которое открывается по факту нажатия человеком кнопки в основном окне. В свою очередь, дополнительное окно будет закрываться по нажатию соответствующей кнопки. Выглядеть программа будет следующим образом.

Эта задача реализуется с помощью следующего кода.

import tkinter as tk class About(tk.Toplevel): def __init__(self, parent): super().__init__(parent) self.label = tk.Label(self, text=»Это всплывающее окно») self.button = tk.Button(self, text=»Закрыть», command=self.destroy) self.label.pack(padx=20, pady=20) self.button.pack(pady=5, ipadx=2, ipady=2) class App(tk.Tk): def __init__(self): super().__init__() self.btn = tk.Button(self, text=»Открыть новое окно», command=self.open_window) self.btn.pack(padx=50, pady=20) def open_window(self): about = About(self) about.grab_set() if __name__ == «__main__»: app = App() app.mainloop()

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru