error = QtGui.QMessageBox(QtGui.QMessageBox.Critical, "Error", "Данный тип файла не поддерживается", buttons = QtGui.QMessageBox.Ok) error.exec_()
удобно, только вид окошка особо не изменить
error = QtGui.QMessageBox(QtGui.QMessageBox.Critical, "Error", "Данный тип файла не поддерживается", buttons = QtGui.QMessageBox.Ok) error.exec_()
# -*- coding: utf-8 -*- from PyQt4 import QtCore, QtGui class About(QtGui.QWidget): def __init__(self, parent=None): super(About, self).__init__(parent) self.setWindowFlags(QtCore.Qt.Dialog | QtCore.Qt.WindowSystemMenuHint) self.setWindowModality(QtCore.Qt.WindowModal) self.setWindowTitle("О программе") butt_hide = QtGui.QPushButton('Закрыть модальное окно') vbox = QtGui.QVBoxLayout() vbox.addWidget(butt_hide) self.setLayout(vbox) butt_hide.clicked.connect(self.close) class MainWind(QtGui.QWidget): def __init__(self, parent=None): super(MainWind, self).__init__(parent) self.setWindowTitle("Главное окно") self.resize(400, 200) error = QtGui.QMessageBox(QtGui.QMessageBox.Critical, "Error", "Данный тип файла не поддерживается", buttons = QtGui.QMessageBox.Ok) information = QtGui.QMessageBox(QtGui.QMessageBox.Information, "information", "Данный файл содержит ошибки", buttons = QtGui.QMessageBox.Ok) butt_show = QtGui.QPushButton('Показать окно о программе') butt_error = QtGui.QPushButton('Показать окно об ошибке') butt_info = QtGui.QPushButton('Показать окно information') vbox = QtGui.QVBoxLayout() vbox.addWidget(butt_show) vbox.addWidget(butt_error) vbox.addWidget(butt_info) self.setLayout(vbox) butt_show.clicked.connect(self.on_show) butt_error.clicked.connect(lambda: error.exec_()) butt_info.clicked.connect(lambda: information.exec_()) def on_show(self): win = About(self) win.resize(200, 100) # сначало отображаем окно за пределами видимости win.move(win.width()*-2,0) # обязательно отображаем, потому-что, только так frameSize() # вернет коректное значение win.show() x = self.x()+(self.frameSize().width()-win.frameSize().width())//2 y = self.y()+(self.frameSize().height()-win.frameSize().height())//2 win.move(x, y) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) window = MainWind() window.show() sys.exit(app.exec_())
from PyQt5.Qt import * class ModalWind(QWidget): def __init__(self, parent=None): super(ModalWind, self).__init__(parent) self.setWindowFlags(Qt.Dialog | Qt.WindowSystemMenuHint) self.setWindowModality(Qt.WindowModal) self.setWindowTitle("Модальное окно") self.resize(200, 50) butt_hide = QPushButton('Закрыть модальное окно') vbox = QVBoxLayout() vbox.addWidget(butt_hide) self.setLayout(vbox) butt_hide.clicked.connect(self.close) class SomeWind(QWidget): def __init__(self, parent=None): super(SomeWind, self).__init__(parent) self.setWindowFlags(Qt.Dialog | Qt.WindowSystemMenuHint) #self.setWindowModality(Qt.WindowModal) self.setWindowTitle("Обычное окно") self.resize(200, 50) butt_hide = QPushButton('Закрыть одно \n из нескольких окон') vbox = QVBoxLayout() vbox.addWidget(butt_hide) self.setLayout(vbox) butt_hide.clicked.connect(self.close) class OneWind(QWidget): def __init__(self, parent=None): super(OneWind, self).__init__(parent) self.setWindowFlags(Qt.Dialog | Qt.WindowSystemMenuHint) self.setWindowTitle("Одиночное окно") self.resize(200, 50) butt_hide = QPushButton('Закрыть окно \n не модальное \n и единственное') vbox = QVBoxLayout() vbox.addWidget(butt_hide) self.setLayout(vbox) butt_hide.clicked.connect(self.close) class MainWind(QWidget): def __init__(self, parent=None): super(MainWind, self).__init__(parent) self.setWindowTitle("Главное окно") self.resize(200, 100) butt_show1 = QPushButton('1) Показать модальное окно') butt_show2 = QPushButton('2) Показать несколько окон') butt_show3 = QPushButton('3) Показать одно окно') vbox = QVBoxLayout() vbox.addWidget(butt_show1) vbox.addWidget(butt_show2) vbox.addWidget(butt_show3) self.setLayout(vbox) butt_show1.clicked.connect(self.on_show1) butt_show2.clicked.connect(self.on_show2) butt_show3.clicked.connect(self.on_show3) def on_show1(self): win = ModalWind(self) win.show() def on_show2(self): win = SomeWind(self) win.show() def on_show3(self): win = OneWind(self) win.show() if __name__ == "__main__": import sys app = QApplication(sys.argv) window = MainWind() window.show() sys.exit(app.exec_())
from PyQt4.QtGui import * from PyQt4.QtCore import Qt class ModalWind(QWidget): def __init__(self, parent=None): super(ModalWind, self).__init__(parent) self.setWindowFlags(Qt.Dialog | Qt.WindowSystemMenuHint) self.setWindowModality(Qt.WindowModal) self.setWindowTitle("Модальное окно") self.resize(200, 50) butt_hide = QPushButton('Закрыть модальное окно') vbox = QVBoxLayout() vbox.addWidget(butt_hide) self.setLayout(vbox) butt_hide.clicked.connect(self.close) class SomeWind(QWidget): def __init__(self, parent=None): super(SomeWind, self).__init__(parent) self.setWindowFlags(Qt.Dialog | Qt.WindowSystemMenuHint) #self.setWindowModality(Qt.WindowModal) self.setWindowTitle("Обычное окно") self.resize(200, 50) butt_hide = QPushButton('Закрыть одно \n из нескольких окон') vbox = QVBoxLayout() vbox.addWidget(butt_hide) self.setLayout(vbox) butt_hide.clicked.connect(self.close) class OneWind(QWidget): def __init__(self, parent=None): super(OneWind, self).__init__(parent) self.setWindowFlags(Qt.Dialog | Qt.WindowSystemMenuHint) self.setWindowTitle("Одиночное окно") self.resize(200, 50) butt_hide = QPushButton('Закрыть окно \n не модальное \n и единственное') vbox = QVBoxLayout() vbox.addWidget(butt_hide) self.setLayout(vbox) butt_hide.clicked.connect(self.close) class MainWind(QWidget): def __init__(self, parent=None): super(MainWind, self).__init__(parent) self.setWindowTitle("Главное окно") self.resize(200, 100) self.oneWindow = None # тут будет храниться ссылка на наше "единственно немодальное" окно butt_show1 = QPushButton('1) Показать модальное окно') butt_show2 = QPushButton('2) Показать несколько окон') butt_show3 = QPushButton('3) Показать одно окно') vbox = QVBoxLayout() vbox.addWidget(butt_show1) vbox.addWidget(butt_show2) vbox.addWidget(butt_show3) self.setLayout(vbox) butt_show1.clicked.connect(self.on_show1) butt_show2.clicked.connect(self.on_show2) butt_show3.clicked.connect(self.on_show3) def on_show1(self): win = ModalWind(self) win.show() def on_show2(self): win = SomeWind(self) win.show() def on_show3(self): if self.oneWindow: # если окно существует , прсто показываем его self.oneWindow.show() self.oneWindow.activateWindow() else: # если не существует - создаем и показываем self.oneWindow = OneWind(self) self.oneWindow.show() if __name__ == "__main__": import sys app = QApplication(sys.argv) window = MainWind() window.show() sys.exit(app.exec_())
from PyQt4.QtGui import * from PyQt4.QtCore import Qt, pyqtSignal class ModalWind(QWidget): def __init__(self, parent=None): super().__init__(parent) self.setWindowFlags(Qt.Dialog | Qt.WindowSystemMenuHint) self.setWindowModality(Qt.WindowModal) self.setWindowTitle("Модальное окно") self.resize(200, 50) butt_hide = QPushButton('Закрыть модальное окно') vbox = QVBoxLayout() vbox.addWidget(butt_hide) self.setLayout(vbox) butt_hide.clicked.connect(self.close) class SomeWind(QWidget): def __init__(self, parent=None): super(SomeWind, self).__init__(parent) self.setWindowFlags(Qt.Dialog | Qt.WindowSystemMenuHint) #self.setWindowModality(Qt.WindowModal) self.setWindowTitle("Обычное окно") self.resize(200, 50) butt_hide = QPushButton('Закрыть одно \n из нескольких окон') vbox = QVBoxLayout() vbox.addWidget(butt_hide) self.setLayout(vbox) butt_hide.clicked.connect(self.close) class OneWind(QWidget): closeWindow = pyqtSignal() # сигнал что оно закрывается def __init__(self, parent=None): super(OneWind, self).__init__(parent) self.setWindowFlags(Qt.Dialog | Qt.WindowSystemMenuHint) self.setWindowTitle("Одиночное окно") self.resize(200, 50) butt_hide = QPushButton('Закрыть окно \n не модальное \n и единственное') vbox = QVBoxLayout() vbox.addWidget(butt_hide) self.setLayout(vbox) butt_hide.clicked.connect(self.close) def closeEvent(self, e): self.closeWindow.emit() # генерируем сигнал о закрытиии окна class MainWind(QWidget): def __init__(self, parent=None): super(MainWind, self).__init__(parent) self.setWindowTitle("Главное окно") self.resize(200, 100) self.oneWindow = None # тут будет храниться ссылка на наше "единственно немодальное" окно butt_show1 = QPushButton('1) Показать модальное окно') butt_show2 = QPushButton('2) Показать несколько окон') butt_show3 = QPushButton('3) Показать одно окно') vbox = QVBoxLayout() vbox.addWidget(butt_show1) vbox.addWidget(butt_show2) vbox.addWidget(butt_show3) self.setLayout(vbox) butt_show1.clicked.connect(self.on_show1) butt_show2.clicked.connect(self.on_show2) butt_show3.clicked.connect(self.on_show3) def on_show1(self): win = ModalWind(self) win.show() def on_show2(self): win = SomeWind(self) win.show() def on_show3(self): if self.oneWindow: # если ссылка не пустая то просто активируем окно self.oneWindow.show() self.oneWindow.activateWindow() else: # иначе : self.oneWindow = OneWind(self) # создаем и показываем окно self.oneWindow.show() self.oneWindow.closeWindow.connect(self.onClose3) # соединяем сигнал закрытия окна с методом onClose3() def onClose3(self): self.oneWindow.closeWindow.disconnect(self.onClose3) # отссоединяем сигнал закрытия окна, хотя необязательно, оно само отсоединиться когда окно уничтожится. self.oneWindow = None # убираем ссылку на окно, окно "уничтожается" if __name__ == "__main__": import sys app = QApplication(sys.argv) window = MainWind() window.show() sys.exit(app.exec_())