Как закрыть окно через python
На этом шаге мы рассмотрим реализацию этой операции .
В предыдущих шагах для закрытия окна мы использовали слот quit() и метод exit([returnCode=0]) объекта приложения. Однако эти методы не только закрывают текущее окно, но и завершают выполнение всего приложения. Чтобы закрыть только текущее окно, следует воспользоваться методом close() класса QWidget . Метод возвращает значение True , если окно успешно закрыто, и False — в противном случае. Закрыть сразу все окна приложения позволяет слот closeAllWindows() класса QApplication .
Если для окна атрибут WA_DeleteOnClose из класса QtCore.Qt установлен в значение True , то после закрытия окна объект окна будет автоматически удален, в противном случае окно просто скрывается. Значение атрибута можно изменить с помощью метода setAttribute() :
window.setAttribute(QtCore.Qt.WA_DeleteOnClose, True)
После вызова метода close() или нажатия кнопки Закрыть в заголовке окна генерируется событие QEvent.Close . Если внутри класса определить метод с предопределенным названием closeEvent() , то это событие можно перехватить и обработать. В качестве параметра метод принимает объект класса QCloseEvent , который содержит методы accept() (позволяет закрыть окно) и ignore() (запрещает закрытие окна). Вызывая эти методы, можно контролировать процесс закрытия окна.
В качестве примера закроем окно по нажатию кнопки.
# -*- coding: utf-8 -*- from PyQt5 import QtCore, QtWidgets import sys app = QtWidgets.QApplication(sys.argv) window = QtWidgets.QWidget(flags=QtCore.Qt.Dialog) window.setWindowTitle("Закрытие окна из программы") window.resize(300, 70) button = QtWidgets.QPushButton("Закрыть окно", window) button.setFixedSize(150, 30) button.move(75, 20) button.clicked.connect(window.close) window.show() sys.exit(app.exec_())
Архив с файлом можно взять здесь.
Внешний вид приложения изображен на рисунке 1.
Рис.1. Внешний вид приложения
Примечание . Закрыв последнее окно приложения, мы тем самым автоматически завершим и само приложение. Не забывайте об этом.
Со следующего шага мы начнем рассматривать обработку сигналов и событий .
Python-сообщество
- Начало
- » GUI
- » Закрыть окно при потере фокуса pyqt5
#1 Март 25, 2022 03:14:24
almax Зарегистрирован: 2018-09-21 Сообщения: 9 Репутация: 0 Профиль Отправить e-mail
Закрыть окно при потере фокуса pyqt5
Если взять простое окно, как сделать так, что бы при потере фокуса оно закрывалось?
import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QLabel class Example(QWidget): def __init__(self): super().__init__() self.setWindowFlag(Qt.FramelessWindowHint) self.setWindowTitle('no title') self.setGeometry(1030, 0, 300, 200) self.label = QLabel(self) self.label.setText('text') app = QApplication(sys.argv) w = Example() w.show() sys.exit(app.exec_())
#2 Март 25, 2022 13:03:41
Rodegast От: Пятигорск Зарегистрирован: 2007-12-28 Сообщения: 2640 Репутация: 179 Профиль Отправить e-mail
Закрыть окно при потере фокуса pyqt5
Зачем тебе это нужно?
С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.
Окна
По умолчанию приложение Tkinter имеет одно главное окно, которое представляет класс tkinter.Tk . Запуск приложение приводит к запуску главного окно, в рамках которого помещаются все виджеты. Закрытие главного окна приводит к завершению работы приложения. Однако в рамках главного окна также можно запускать вторичные, неглавные окна. Например, октроем новое окно по нажатию на кнопку:
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") def click(): window = Tk() window.title("Новое окно") window.geometry("250x200") button = ttk.Button(text="Создать окно", command=click) button.pack(anchor=CENTER, expand=1) root.mainloop()
Здесь по нажатию на кнопку создается новый объект window, у него устанавливается заголовок и размеры.

Стоит отметить, что приложение завершит работу, когда будут закрыты все его окна.
Как и главное окно, вторичные окна могут иметь виджеты. Например, определим на новом окне метку:
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") def click(): window = Tk() window.title("Новое окно") window.geometry("250x200") label=ttk.Label(window, text="Принципиально новое окно") label.pack(anchor=CENTER, expand=1) button = ttk.Button(text="Создать окно", command=click) button.pack(anchor=CENTER, expand=1) root.mainloop()
Единственное не надо забывать у добавляемых виджетов устанавливать окно в качестве родительского контейнера

Удаление окна
Для удаления окна применяется меnод destroy()
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") def click(): window = Tk() window.title("Новое окно") window.geometry("250x200") close_button = ttk.Button(window, text="Закрыть окно", command=lambda: window.destroy()) close_button.pack(anchor="center", expand=1) open_button = ttk.Button(text="Создать окно", command=click) open_button.pack(anchor="center", expand=1) root.mainloop()
В данном случае в новом окне по нажатию на кнопку close_button срабатывает метод window.destroy() , который закрывает окно и по сути аналогичен нажатию на крестик в верхнем правом углу окна.
Определение окна в объектно-ориентированном стиле
В примере выше новое окно, его параметры и вложенные виджеты определялись внутри функции, однако это приводит к разбуханию кода функции. И гораздо проще вынести определение окна в отдельный класс:
from tkinter import * from tkinter import ttk class Window(Tk): def __init__(self): super().__init__() # конфигурация окна self.title("Новое окно") self.geometry("250x200") # определение кнопки self.button = ttk.Button(self, text="закрыть") self.button["command"] = self.button_clicked self.button.pack(anchor="center", expand=1) def button_clicked(self): self.destroy() root = Tk() root.title("METANIT.COM") root.geometry("250x200") def click(): window = Window() open_button = ttk.Button(text="Создать окно", command=click) open_button.pack(anchor="center", expand=1) root.mainloop()
Здесь определение окна вынесено в отдельный класс Window, который наследуется от класса tkinter.Tk. Благодаря этому мы можем вынести весь код определения окна в отдельную структурную единицу — класс, что позволит упростить управление кодом.
Окно поверх других окон
Для создания диалогового окна, которое располагается поверх главного окна, применяется класс Toplevel :
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") def dismiss(window): window.grab_release() window.destroy() def click(): window = Toplevel() window.title("Новое окно") window.geometry("250x200") window.protocol("WM_DELETE_WINDOW", lambda: dismiss(window)) # перехватываем нажатие на крестик close_button = ttk.Button(window, text="Закрыть окно", command=lambda: dismiss(window)) close_button.pack(anchor="center", expand=1) window.grab_set() # захватываем пользовательский ввод open_button = ttk.Button(text="Создать окно", command=click) open_button.pack(anchor="center", expand=1) root.mainloop()
Toplevel по сути то же самое окно Tk, которое располагается поверх других окон. В примере выше оно также имеет кнопку. Но кроме того, чтобы пользователь не мог перейти обратно к главному окну пока не закроет это диалоговое окно, применяется ряд методов. Прежде всего захватываем весь пользовательский ввод с помощью метода grab_set() :
window.grab_set()
В функции dismiss() , которая закрывает окно, освобождаем ввод с помощью метода grab_release()
window.grab_release()
Как закрыть окно в питоне? Простой способ и полезные советы
В этом примере мы создаем главное окно с помощью `tkinter.Tk()` и добавляем кнопку с текстом «Закрыть окно». Затем мы связываем функцию `close_window()` со событием нажатия на кнопку с помощью параметра `command`. Когда кнопка будет нажата, функция `close_window()` вызывается, и вызывается метод `destroy()` для закрытия окна.
Надеюсь, это поможет вам закрыть окно в Питоне! Если у вас возникнут еще вопросы, не стесняйтесь задавать. Удачи в изучении программирования!
Детальный ответ
Как закрыть окно в питоне? Когда вы работаете с графическими интерфейсами в Python, такими как Tkinter или PyQt, одной из наиболее частых задач является закрытие окна программы после завершения работы. Существует несколько способов закрыть окно в питоне, и в этой статье мы рассмотрим несколько из них. Метод 1: Используйте метод destroy() Первый способ закрыть окно — использовать метод destroy() . Этот метод доступен в Tkinter и позволяет закрыть окно и завершить программу.
import tkinter as tk def close_window(): root.destroy() root = tk.Tk() button = tk.Button(root, text="Закрыть окно", command=close_window) button.pack() root.mainloop()
Здесь мы создаем главное окно с помощью Tk() и добавляем кнопку, которая будет вызывать функцию close_window() при нажатии. В функции close_window() мы используем метод destroy() для закрытия окна. Метод 2: Используйте метод exit() Второй способ закрыть окно — использовать метод exit() . Этот метод доступен в модуле sys и позволяет завершить программу.
import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton def close_window(): sys.exit() app = QApplication([]) window = QMainWindow() button = QPushButton("Закрыть окно", window) button.clicked.connect(close_window) window.show() app.exec_()
Здесь мы используем PyQt5 для создания главного окна и кнопки. При нажатии на кнопку вызывается функция close_window() , в которой мы используем метод exit() для завершения программы. Метод 3: Используйте метод close() Третий способ закрыть окно — использовать метод close() . Этот метод доступен в некоторых графических библиотеках, таких как PyQt.
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton def close_window(): window.close() app = QApplication([]) window = QMainWindow() button = QPushButton("Закрыть окно", window) button.clicked.connect(close_window) window.show() app.exec_()
Здесь мы снова используем PyQt5 для создания главного окна и кнопки. При нажатии на кнопку вызывается функция close_window() , в которой мы используем метод close() для закрытия окна. Заключение Теперь у вас есть несколько способов закрыть окно в питоне. Вы можете выбрать тот, который лучше всего подходит для вашей ситуации и использовать его в своих программах. Надеюсь, этот материал оказался полезным для вас. Удачи в изучении Python!
