Модераторы: pythonwin, Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Модальное окно, запрос закрытия-Модального окна 
V
    Опции темы
OzMod
  Дата 11.11.2016, 02:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 21.1.2014

Репутация: 1
Всего: 1



как сделать так что бы при закрытии Модального окна появлялся запрос закрытия окна?
Пример кода
Код

from PyQt4 import QtGui, QtCore
import sys

class mywindow(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent) # определяем тип окна
        self.button = QtGui.QPushButton("Открыть модальное окно") # Задаём имя кнопки
        self.button.setStyleSheet("background-color: #ff0ff0;") # Задаём цвет кнопка
        self.button.setAutoFillBackground(True) # Задаём Автоматическое обновление палитры
        self.button.setToolTip("Это всплывающая подсказка для кнопки")
        self.button.setWhatsThis("Это справка для кнопки")
        self.button.setCursor(QtGui.QCursor(QtGui.QPixmap("cursor.png"), 10, 10))
        vbox = QtGui.QVBoxLayout() # Задаем метод распределения виджеа в окне
        vbox.addWidget(self.button) # Добавляем виджеты в метод
        self.setLayout(vbox) # Присваеваем метод распределения к окну
        self.connect(self.button, QtCore.SIGNAL("clicked()"), self.show_modal_window) # Задаем обработчик нажатия кнопки

    def show_modal_window(self):
        window = QtGui.QWidget(window1, QtCore.Qt.Dialog) # привязываем модальное к окн родителя
        window.setWindowModality(QtCore.Qt.WindowModal) # ApplicationModal блокирует все окна
        #window.setWindowFlags(QtCore.Qt.Dialog | QtCore.Qt.CustomizeWindowHint) # задаём пораметры типа окна
        print(window.windowType() == QtCore.Qt.Dialog) # узнаём тип окна
        window.setWindowTitle("Модальное окно") # задаём Заголовок окна
        window.resize(300, 50) # задаём размер окна
        window.setAttribute(QtCore.Qt.WA_DeleteOnClose, True)
        window.show() # отображаем окно

    def closeEvent(self, QMesBox):
        result = QtGui.QMessageBox.question(self, "Закрытие окна", "Закрыть окно?", QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
        if result == QtGui.QMessageBox.Yes:
            print (QtGui.QMessageBox.Yes)
            QMesBox.accept()
            QtGui.QWidget.closeEvent(self, QMesBox)
        else:
            QMesBox.ignore()

if __name__== "__main__":
    app = QtGui.QApplication(sys.argv) # привязываем к переменной значение командной сроки
    window1 = mywindow()
    window1.setWindowTitle("Обычное окно") # задаём Заголовок окна
    window1.resize(300, 100) # задаём размер окна
    window1.setWindowIcon(QtGui.QIcon("Win.ico")) # Иконка для окна
    window1.setToolTip("Это всплывающая подсказка для окна")
    window1.setWhatsThis("Это справка для окна")
    pal = window1.palette() # задаем переменню для политры окна
    pal.setColor(QtGui.QPalette.Normal, QtGui.QPalette.Window, QtGui.QColor("#008800")) # ЦВЕТ ОКНА Активное состояние окна
    pal.setColor(QtGui.QPalette.Inactive, QtGui.QPalette.Window, QtGui.QColor("#ff0000")) # ЦВЕТ ОКНА Не активное состояние окна
    window1.setPalette(pal) # Применяем цвета
    window1.show() # Показать окно
    sys.exit(app.exec_()) # запускаем цикл

PM MAIL   Вверх
Romikgy
Дата 11.11.2016, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7282
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 2
Всего: 144



код полностью рабочий... вопрос в чем?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
OzMod
  Дата 11.11.2016, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 21.1.2014

Репутация: 1
Всего: 1



Romikgy, Что непонятно !
как сделать так что бы при закрытии Модального окна появлялся запрос закрытия окна, то есть вызывалась функция closeEvent
При закрытии главного окна вызываеться closeEvent а как сделать так что бы при закрытии Модального окна вызывался closeEvent ...


Это сообщение отредактировал(а) OzMod - 11.11.2016, 10:27
PM MAIL   Вверх
OzMod
  Дата 11.11.2016, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 21.1.2014

Репутация: 1
Всего: 1



Всё проблемма решина !!
Спасибо py.user.next

Код

from PyQt4 import QtGui, QtCore
import sys
 
 
class MyModalWindow(QtGui.QWidget):
 
    def closeEvent(self, QMesBox):
        result = QtGui.QMessageBox.question(self, "Закрытие модального окна", "Закрыть окно?", QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
        if result == QtGui.QMessageBox.Yes:
            print (QtGui.QMessageBox.Yes)
            QMesBox.accept()
            QtGui.QWidget.closeEvent(self, QMesBox)
        else:
            QMesBox.ignore()
 
 
class mywindow(QtGui.QWidget):
 
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent) # определяем тип окна
        self.button = QtGui.QPushButton("Открыть модальное окно") # Задаём имя кнопки
        self.button.setStyleSheet("background-color: #ff0ff0;") # Задаём цвет кнопка
        self.button.setAutoFillBackground(True) # Задаём Автоматическое обновление палитры
        self.button.setToolTip("Это всплывающая подсказка для кнопки")
        self.button.setWhatsThis("Это справка для кнопки")
        self.button.setCursor(QtGui.QCursor(QtGui.QPixmap("cursor.png"), 10, 10))
        vbox = QtGui.QVBoxLayout() # Задаем метод распределения виджеа в окне
        vbox.addWidget(self.button) # Добавляем виджеты в метод
        self.setLayout(vbox) # Присваеваем метод распределения к окну
        self.connect(self.button, QtCore.SIGNAL("clicked()"), self.show_modal_window) # Задаем обработчик нажатия кнопки
 
    def show_modal_window(self):
        window = MyModalWindow(window1, QtCore.Qt.Dialog) # привязываем модальное к окн родителя
        window.setWindowModality(QtCore.Qt.WindowModal) # ApplicationModal блокирует все окна
        #window.setWindowFlags(QtCore.Qt.Dialog | QtCore.Qt.CustomizeWindowHint) # задаём пораметры типа окна
        print(window.windowType() == QtCore.Qt.Dialog) # узнаём тип окна
        window.setWindowTitle("Модальное окно") # задаём Заголовок окна
        window.resize(300, 50) # задаём размер окна
        window.setAttribute(QtCore.Qt.WA_DeleteOnClose, True)
        window.show() # отображаем окно
 
    def closeEvent(self, QMesBox):
        result = QtGui.QMessageBox.question(self, "Закрытие окна", "Закрыть окно?", QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
        if result == QtGui.QMessageBox.Yes:
            print (QtGui.QMessageBox.Yes)
            QMesBox.accept()
            QtGui.QWidget.closeEvent(self, QMesBox)
        else:
            QMesBox.ignore()
 
 
if __name__== "__main__":
    app = QtGui.QApplication(sys.argv) # привязываем к переменной значение командной сроки
    window1 = mywindow()
    window1.setWindowTitle("Обычное окно") # задаём Заголовок окна
    window1.resize(300, 100) # задаём размер окна
    window1.setWindowIcon(QtGui.QIcon("Win.ico")) # Иконка для окна
    window1.setToolTip("Это всплывающая подсказка для окна")
    window1.setWhatsThis("Это справка для окна")
    pal = window1.palette() # задаем переменню для политры окна
    pal.setColor(QtGui.QPalette.Normal, QtGui.QPalette.Window, QtGui.QColor("#008800")) # ЦВЕТ ОКНА Активное состояние окна
    pal.setColor(QtGui.QPalette.Inactive, QtGui.QPalette.Window, QtGui.QColor("#ff0000")) # ЦВЕТ ОКНА Не активное состояние окна
    window1.setPalette(pal) # Применяем цвета
    window1.show() # Показать окно
    sys.exit(app.exec_()) # запускаем цикл

PM MAIL   Вверх
Google
  Дата 12.12.2019, 04:11 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Разработка GUI | Следующая тема »


 




[ Время генерации скрипта: 0.0601 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.