Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
19 / 14 / 7
Регистрация: 03.10.2014
Сообщений: 87
1

PySide + WindowModality

25.08.2016, 06:52. Просмотров 1038. Ответов 4

Здравствуйте, уважаемые!
Имеется тестовый пример на PySide - по нажатию кнопки на родительском окне вызывается окно-потомок. В классе потомка я прописал self.setWindowModality(Qt.WindowModal). Однако, при открытом дочернем окне, я вполне себе могу порулить родительским окном, закрыть его (естественно закрыв и дочернее окно). Что это, кто виноват и что делать? Заранее благодарю.
З.Ы. Кому не сложно, поругайте код. Спасибо.
Python
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/usr/bin/python3
# -*- coding:utf-8 -*-
 
'''TestModality.py'''
 
import sys
from PySide.QtCore import *
from PySide.QtGui import *
 
class MainWindow(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.opn_search = None
        self.initUI()
 
    def initUI(self):
        self.btn_exit = QPushButton("Выход", self)
        self.btn_search = QPushButton("Жми!", self)
        self.btn_exit.move(270, 370)
        self.btn_search.move(15, 10)
        self.setWindowTitle('Родительское окно')
        self.setGeometry(400, 400, 150, 150)
        self.setMaximumSize(400, 400)
        self.setMinimumSize(400, 400)
        self.show()
 
        self.btn_exit.clicked.connect(QCoreApplication.instance().exit)
        self.btn_search.clicked.connect(self.openSearchWin)
 
    def openSearchWin(self):
        self.opn_search = SearchWindow()
        self.opn_search.show()
 
class SearchWindow(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.initUI()
 
    def initUI(self):
        btn_exit = QPushButton('Выход', self)
        btn_exit.move(270, 370)
        btn_exit.setFixedSize(120, 25)
        btn_exit.clicked.connect(self.close)
 
        self.setGeometry(400, 400, 200, 200)
        self.setWindowModality(Qt.WindowModal)
        self.setMinimumSize(400, 400)
        self.setMaximumSize(400, 400)
        self.setWindowTitle('Дочернее окно')
        self.show()
 
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.08.2016, 06:52
Ответы с готовыми решениями:

Чекбоксы в PySide
Всем привет! Вопрос следующий: создан чекбокс PySide.QtGui.QCheckBox, но умолчанию в состоянии...

PySide потоки и анимация
Пытаюсь изучить PySide немножко. Написал простенькую прилагу для работы с БД. Есть момент...

Виджет на PySide/PyQT
Подскажите пожалуйста, как может называться виджет, в котором можно создавать дерево элементов с...

PySide. Нестандартные интерфейсы
Как проще всего реализовать такой интерфейс(рис. 1)? Спустя неделю написал некоторое подобие на...

4
4130 / 1596 / 295
Регистрация: 17.03.2012
Сообщений: 8,629
Записей в блоге: 5
25.08.2016, 10:17 2
Когда-то я тоже с этим столкнулся. Для модального окна просто использую QDialog и не парюсь.
1
19 / 14 / 7
Регистрация: 03.10.2014
Сообщений: 87
25.08.2016, 12:14  [ТС] 3
Не могли бы вы кинуть сюда простой примерчик?
0
4130 / 1596 / 295
Регистрация: 17.03.2012
Сообщений: 8,629
Записей в блоге: 5
25.08.2016, 13:37 4
Зачем?
Это потомок QWidget. Для вызова - QDialog.exec_ . Есть и ещё кое-какие навороты, но я не хочу копипастить документацию.
1
2714 / 2318 / 620
Регистрация: 19.03.2012
Сообщений: 8,832
25.08.2016, 17:54 5
Лучший ответ Сообщение было отмечено axe77 как решение

Решение

axe77, все очень просто
Python
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
42
43
44
45
46
47
48
49
50
51
52
53
54
import sys
 
from PyQt4 import QtGui, QtCore
 
 
class SecondWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent, QtCore.Qt.Window)
        self.setWindowFlags(QtCore.Qt.Window)
        self.setWindowModality(QtCore.Qt.WindowModal)
        
        self.build()
 
    def build(self):
        self.mainLayout = QtGui.QVBoxLayout()
 
        self.buttons = []
        for i in range(5):
            but = QtGui.QPushButton('button {}'.format(i), self)
            self.mainLayout.addWidget(but)
            self.buttons.append(but)
 
        self.setLayout(self.mainLayout)
 
 
class MainWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.secondWin = None
        self.build()
 
    def build(self):
        self.mainLayout = QtGui.QVBoxLayout()
 
        self.lab = QtGui.QLabel('simple text', self)
        self.mainLayout.addWidget(self.lab)
 
        self.but1 = QtGui.QPushButton('open window', self)
        self.but1.clicked.connect(self.open_win)
        self.mainLayout.addWidget(self.but1)
 
        self.setLayout(self.mainLayout)
 
    def open_win(self):
        if not self.secondWin:
            self.secondWin = SecondWindow(self)
        self.secondWin.show()
 
 
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.08.2016, 17:54

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

PySide. Не применяется QShortcutContext
Всем добрый день! Разрабатываю приложение имеющее поле ввода (QLineEdit) с дефолтным значением...

PySide,PyQt и русский язык
Доброго времени суток. Начал изучать PySide. делаю простейшее приложение: #!/usr/bin/env python...

PyQt, PySide, PyGObject итд под Python 3.5
Добрый день! Подскажите пожалуйста, есть ли какие-то новости касательно того, когда выйдут привязки...

PyQt (PySide) Вывод координат курсора на форме
Есть форма, хочу выводить на ней в QLable или в QToolTip координаты курсора. Как можно реализовать?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.