Уведомления

Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Ноя. 11, 2016 01:33:28

OzXaker
От:
Зарегистрирован: 2010-12-01
Сообщения: 49
Репутация: +  0  -
Профиль   Адрес электронной почты  

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

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

 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_()) # запускаем цикл



Отредактировано OzXaker (Ноя. 11, 2016 01:39:06)

Офлайн

#2 Ноя. 11, 2016 03:24:20

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 4853
Репутация: +  441  -
Профиль   Отправить e-mail  

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

Это направление только, там надо все настройки окна заносить в __init__() окна.
Также никакие ошибки не исправлял, сам исправишь.

  
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_()) # запускаем цикл



Отредактировано py.user.next (Ноя. 11, 2016 03:26:03)

Офлайн

#3 Ноя. 11, 2016 14:05:34

OzXaker
От:
Зарегистрирован: 2010-12-01
Сообщения: 49
Репутация: +  0  -
Профиль   Адрес электронной почты  

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

py.user.next Спасибо БОЛЬШОЕ !!



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version