Модальное окно

 
0
 
Python
ava
OzMod | 11.11.2016, 02:56
как сделать так что бы при закрытии Модального окна появлялся запрос закрытия окна?
Пример кода

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_()) # запускаем цикл
Kommentare (3)
ava
Romikgy | 11.11.2016, 10:06 #
код полностью рабочий... вопрос в чем?
ava
OzMod | 11.11.2016, 10:25 #
Romikgy, Что непонтно !
как сделать так что бы при закрытии Модального окна появлялся запрос закрытия окна, то есть вызывалась функция closeEvent
При закрытии главного окна вызываеться closeEvent а как сделать так что бы при закрытии Модального окна вызывался closeEvent ...
ava
OzMod | 11.11.2016, 15:09 #
Всё проблемма решина !!
Спасибо 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_()) # запускаем цикл
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
  Romikgy   OzMod
advanced
Absenden