Как закрыть окно qt python
Перейти к содержимому

Как закрыть окно qt python

  • автор:

Как закрыть окно qt 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. Внешний вид приложения

Примечание . Закрыв последнее окно приложения, мы тем самым автоматически завершим и само приложение. Не забывайте об этом.

Со следующего шага мы начнем рассматривать обработку сигналов и событий .

PyQt5 закрытие окна не прерывающее скрипт

Здравствуйте! Мне нужно вывести PyQt окно подождать пока юзер нажмёт на кнопку, закрыть окно и продолжить скрипт. Кто знает как это сделать?

Отслеживать
задан 24 фев 2017 в 18:15
user235381 user235381
19 1 1 серебряный знак 6 6 бронзовых знаков

Именно так и делать — вывести окно, закрыть окно и продолжить скрипт не убивая его через sys.exit(. ) или же отловил вызванное этой функцией исключение SystemExit .

24 фев 2017 в 18:58
Можно поподробнее?
25 фев 2017 в 7:23

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Перепробовал все варианты, и понял, что лучше всего подходит метод close()

Отслеживать
ответ дан 25 фев 2017 в 11:01
user235381 user235381
19 1 1 серебряный знак 6 6 бронзовых знаков

Ну, в общем-то да, вызвать close() при нажатии на кнопку и продолжить без принудительного завершения скрипта sys.exit(. ) . Все правильно, мне добавить нечего. Думаю, пример уже не нужен?

25 фев 2017 в 21:55

А что если как-то так:

import sys from PyQt5.QtCore import QPropertyAnimation, Qt, QRectF from PyQt5.QtGui import QFontDatabase from PyQt5.QtWidgets import (QPushButton, QApplication, QStyleOptionButton, QStylePainter, QStyle) class PushButtonFont(QPushButton): LoadingText = "\uf110" def __init__(self, *args, **kwargs): super(PushButtonFont, self).__init__(*args, **kwargs) self.resize(250, 250) self.fontSize = self.font().pointSize() * 2 self._rotateAnimationStarted = False self._rotateAnimation = QPropertyAnimation(self) self._rotateAnimation.setTargetObject(self) self._rotateAnimation.setStartValue(1) self._rotateAnimation.setEndValue(12) self._rotateAnimation.setDuration(1000) self._rotateAnimation.setLoopCount(-1) # Бесконечная петля self._rotateAnimation.valueChanged.connect(self.update) self.clicked.connect(self._onClick) def paintEvent(self, _): option = QStyleOptionButton() self.initStyleOption(option) painter = QStylePainter(self) if self._rotateAnimationStarted: option.text = "" painter.drawControl(QStyle.CE_PushButton, option) if not self._rotateAnimationStarted: return painter.save() font = self.font() font.setPointSize(self.fontSize) font.setFamily("FontAwesome") painter.setFont(font) # преобразовать координаты в середину painter.translate(self.rect().center()) # поворот на 90 градусов painter.rotate(self._rotateAnimation.currentValue() * 30) fm = self.fontMetrics() # Положительный средний текст после преобразования координат w = fm.width(self.LoadingText) h = fm.height() painter.drawText( QRectF(0 - w * 2, 0 - h, w * 2 * 2, h * 2), Qt.AlignCenter, self.LoadingText) painter.restore() def _onClick(self): if self._rotateAnimationStarted: self._rotateAnimationStarted = False self._rotateAnimation.stop() return self._rotateAnimationStarted = True self._rotateAnimation.start() def update(self, _=None): super(PushButtonFont, self).update() if __name__ == "__main__": app = QApplication(sys.argv) # Загрузка шрифтов в библиотеку шрифтов QFontDatabase.addApplicationFont( "Fonts/FontAwesome/fontawesome-webfont.ttf") w = PushButtonFont("Нажмите, чтобы загрузить " "fa_spinner") w._onClick() w.show() sys.exit(app.exec_()) 

введите сюда описание изображения

Отслеживать
ответ дан 22 окт 2018 в 23:05
72.6k 105 105 золотых знаков 38 38 серебряных знаков 55 55 бронзовых знаков

  • python
  • pyqt5
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Закрыть окно при потере фокуса pyqt5

Кто нибудь, подскажите как закрыть простое окно при потере фокуса?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
#!/usr/bin/python3 import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QLabel from PyQt5 import QtCore def text(): with open("/home/al/programs/py/weather/text_file", "r") as f: return f.read() class Example(QWidget): def __init__(self): super().__init__() self.setWindowFlag(Qt.FramelessWindowHint) self.setWindowTitle('no title') self.setGeometry(1030, 0, 300, 200) self.setWindowOpacity(0.9) self.label = QLabel(self) self.label.setText(text()) self.label.setStyleSheet("background-color: none") self.label.setMargin(15) app = QApplication(sys.argv) w = Example() w.show() def change_text(): w.label.setText(text()) timer = QtCore.QTimer() timer.timeout.connect(change_text) timer.start(3000) sys.exit(app.exec_())

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Закрыть форму при потере фокуса
Простое применение Private Sub Form_LostFocus() DoCmd.Close acForm, Me.Name End Sub выдаёт.

Вычисления при потере фокуса
Как запрограммировать вычисление на потерю фокуса? Когда я нажимаю на закрытие или другие кнопки.

Задержка при потере фокуса
Добрый день! Небольшой контрол, по умолчанию выглядит примерно так: При наведении курсора.

Переход на страницу при потере фокуса
Привет всем. Подскажите пожалуйста следующее. Вот код: <form method="post".

Действие при потере фокуса окна
Всем привет. Пишу программу-тесты на С++. Для того, чтобы отвечали на вопросы честно, появилась.

Python-сообщество

[RSS Feed]

  • Начало
  • » GUI
  • » Как правильно закрыть дочернее окна и открыть главное PyQt

#1 Янв. 14, 2019 19:16:24

gtandrey Зарегистрирован: 2019-01-14 Сообщения: 2 Репутация: 0 Профиль Отправить e-mail

Как правильно закрыть дочернее окна и открыть главное PyQt

Помогите решить вопрос, уже 3 дня ищу решение
Есть Главная форма на ней кнопка, чтобы открыть второе окно с настройками и скрыть главную форму
Во втором окне есть 2 кнопки отмена и применить
соответственно они закрывают второе окно и открывают главное
но к сожалению при нажатии кнопки cancel во втором окне закрывается и главное и второе окно

import sys from form_main import * from form_day import * from PyQt5 import QtCore, QtGui, QtWidgets class FormMain(QtWidgets.QMainWindow): def __init__(self, parent=None): QtWidgets.QWidget.__init__(self, parent) self.ui = Ui_form_main() self.ui.setupUi(self) self.ui.ButtonDay.clicked.connect(self.show_form_day) def show_form_day(self): self.form_day = FormDay(self) self.form_day.show() class FormDay(QtWidgets.QMainWindow): def __init__(self, parent=None): QtWidgets.QWidget.__init__(self, parent) self.form_day = Ui_form_day() self.form_day.setupUi(self) #. настройки form_main.hide() if __name__=="__main__": app = QtWidgets.QApplication(sys.argv) form_main = FormMain() form_main.show() sys.exit(app.exec_()) 
from PyQt5 import QtCore, QtGui, QtWidgets class Ui_form_day(object): def setupUi(self, form_day): form_day.setObjectName("form_day") form_day.resize(1024, 600) self.centralwidget = QtWidgets.QWidget(form_day) self.ButtonCancel.setFont(font) self.ButtonCancel.setStyleSheet(&quot;&quot;) self.ButtonCancel.setObjectName(&quot;ButtonCancel&quot;) #. self.ButtonCancel.clicked.connect(self.push_button_cancel) self.ButtonApply.clicked.connect(self.push_button_apply) def push_button_cancel(self): print(&#039;cancel') form_main.show() self.hide() 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *