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

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

  • автор:

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("") self.ButtonCancel.setObjectName("ButtonCancel") #. self.ButtonCancel.clicked.connect(self.push_button_cancel) self.ButtonApply.clicked.connect(self.push_button_apply) def push_button_cancel(self): print('cancel') form_main.show() self.hide() 

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

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

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

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

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

В качестве примера по нажатию кнопки Закрыть выведем стандартное диалоговое окно с запросом подтверждения закрытия окна. Если пользователь нажимает кнопку Yes , закроем окно, а если щелкает кнопку No или просто закрывает диалоговое окно, то прервем закрытие окна.

# -*- coding: utf-8 -*- from PyQt5 import QtWidgets class MyWindow(QtWidgets.QWidget): def __init__ (self, parent = None): QtWidgets.QWidget.__init__(self, parent) self.resize(300, 100) def closeEvent(self, e): result = QtWidgets.QMessageBox.question(self, "Подтверждение закрытия окна", "Вы действительно хотите закрыть окно?", QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No) if result == QtWidgets.QMessageBox.Yes: e.accept() QtWidgets.QWidget.closeEvent(self, e) else: e.ignore() if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) window = MyWindow() window.show() sys.exit(app.exec_())

Архив с файлом можно взять здесь.

Результат работы приложения изображен на рисунке 1.

Рис.1. Результат работы приложения

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

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

Author24 — интернет-сервис помощи студентам

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

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".

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

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

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