С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/34: Рейтинг темы: голосов - 34, средняя оценка - 4.62
3 / 3 / 0
Регистрация: 31.10.2019
Сообщений: 26

Как узнать, открыто ли диалоговое окно?

03.11.2019, 10:33. Показов 7168. Ответов 12

Студворк — интернет-сервис помощи студентам
Есть одно окно (MainWindow), которое открывает второе (QWidget), диалоговое после нажатия кнопки (btn).
После открытия диалогового окна кнопка (btn) перестает быть активной (self.btn.setEnabled(False)). А после закрытия, снова работает. Но вот в чем вопрос: как узнать, открыто окно или нет?

Сначала я пробовал узнать это с помощью флаговых переменных:

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
class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.main()
 
    def main(self):
        self.btn.clicked.connect(self.open)
        self.is_open = True
        if self.is_open:
            self.btn.setEnabled(True)
        else:
            self.btn.setEnabled(False)
 
    def open(self):            
        self.add = QWidget()
        self.add.show()
        self.is_open = False
 
 
app = QApplication(sys.argv)
ex = MainWindow()
ex.show()
sys.exit(app.exec_())
Но проблема в том, что я не могу узнать, когда пользователь закроет окно, чтобы сделать self.btn.setEnabled(True). Тогда я пробовал делать это через isVariable()

Python
1
2
3
4
if AppendTesk.isVariable():
    self.addTeskBtn.setEnabled(False)
else:
    self.addTeskBtn.setEnabled(True)
и через isHidden(), но в обоих случаях была ошибка:
Python
1
first argument of unbound method must have type 'QWidget'
Повторяю свой вопрос "как узнать, открыто окно или нет?" и дополняю к нему "Чем isHidden() отличается от isVariable()?"
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.11.2019, 10:33
Ответы с готовыми решениями:

Как по HWND узнать, открыто ли окно
Открываю консольное приложение из своей программы на Delphi. Получаю идентификатор окна (HWND). Нужна возможность узнать, не закрылось ли...

Как узнать с помощью VBA в Ассess открыто ли окно БД ?
Запрет на открытие окна БД в Access легко взломать Свойство AllowByPassKey можно перевести обратно в True из другой БД. Может можно...

При запуске Access как узнать, открыто ли окно БД ?
Запрет на открытие окна БД в Access легко взломать Свойство AllowByPassKey можно перевести обратно в True из другой БД. Может можно...

12
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,300
03.11.2019, 20:01
Лучше использовать систему сигналов-слотов, при закрытии диалогового окна отправляется сигнал, а слот в основном окне делает кнопку активной
0
3 / 3 / 0
Регистрация: 31.10.2019
Сообщений: 26
03.11.2019, 20:03  [ТС]
А каким методом отправляется сигнал? И к чему этот метод применять, я так понимаю к окну - self?
0
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,300
03.11.2019, 20:18
Лучший ответ Сообщение было отмечено StudentOfChrist как решение

Решение

Цитата Сообщение от StudentOfChrist Посмотреть сообщение
А каким методом отправляется сигнал? И к чему этот метод применять, я так понимаю к окну - self
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
import sys
from PyQt5 import QtWidgets
from PyQt5.QtCore import pyqtSignal, QObject
 
class Dialog(QtWidgets.QDialog):
    closeDialog = pyqtSignal()
 
    def __init__(self, root, **kwargs):
        super().__init__(root, **kwargs)
        self.main = root 
        label     = QtWidgets.QLabel('введите что нибудь')
        self.edit = QtWidgets.QLineEdit()
        button    = QtWidgets.QPushButton('Нажми чтобы отобразить')
 
        layout = QtWidgets.QVBoxLayout()
        layout.addWidget(label)
        layout.addWidget(self.edit)
        layout.addWidget(button)
        self.setLayout(layout)
 
    def closeEvent(self, event):
        self.closeDialog.emit()
 
 
class Main(QtWidgets.QWidget):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
 
        layout  = QtWidgets.QHBoxLayout()
        self.label_main = QtWidgets.QLabel()
        self.button = QtWidgets.QPushButton('Нажми')
   
        self.button.clicked.connect(self.button_click)
 
        self.dialog = Dialog(self)
        self.dialog.closeDialog.connect(self.dialog_signal_slot)
 
        layout.addWidget(self.label_main)
        layout.addWidget(self.button)
        self.setLayout(layout)
 
    def button_click(self):
        self.button.setEnabled(False)
        self.dialog.show()
 
    def dialog_signal_slot(self):
        self.button.setEnabled(True)
 
if __name__ == '__main__':
    app  = QtWidgets.QApplication(sys.argv)
    main = Main()  
    main.show()
    sys.exit(app.exec_())
0
3 / 3 / 0
Регистрация: 31.10.2019
Сообщений: 26
04.11.2019, 07:47  [ТС]
Цитата Сообщение от tooru Посмотреть сообщение
closeDialo
говорит, что нет такого атрибута(
0
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,300
04.11.2019, 07:55
всю ошибку приведите
0
3 / 3 / 0
Регистрация: 31.10.2019
Сообщений: 26
04.11.2019, 07:57  [ТС]
'Dialog' object has no attribute 'closeDialog'
0
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,300
04.11.2019, 08:03
Цитата Сообщение от StudentOfChrist Посмотреть сообщение
'Dialog' object has no attribute 'closeDialog'
Очень странно. Вы запускаете этот вот код или что-то дописываете от себя?
0
3 / 3 / 0
Регистрация: 31.10.2019
Сообщений: 26
04.11.2019, 08:05  [ТС]
Я применил это к своему коду
0
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,300
04.11.2019, 08:07
Цитата Сообщение от StudentOfChrist Посмотреть сообщение
Я применил это к своему коду
Вот эту строку вы класс диалога добавили?

Python
1
closeDialog = pyqtSignal()
0
3 / 3 / 0
Регистрация: 31.10.2019
Сообщений: 26
04.11.2019, 08:21  [ТС]
Сейчас добавил. Ошибка не выскакивает, но после закрытия кнопка не становится активной.

Цитата Сообщение от tooru Посмотреть сообщение
def closeEvent(self, event):
* * * * self.closeDialog.emit()
Зачем эта функция, если она нигде не вызывается?
0
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,300
04.11.2019, 08:28
А вы слот сделали?

Python
1
2
def dialog_signal_slot(self):
        self.button.setEnabled(True)
и подключили его к сигналу?

Python
1
self.dialog.closeDialog.connect(self.dialog_signal_slot)
Цитата Сообщение от StudentOfChrist Посмотреть сообщение
def closeEvent(self, event):
* * * * self.closeDialog.emit()
Эта функция вызывается pyqt при закрытии диалогового окна
0
3 / 3 / 0
Регистрация: 31.10.2019
Сообщений: 26
04.11.2019, 08:32  [ТС]
Слот я сделал, и вызвал. А вот эту функцию не создавал. Сейчас попробую с ней

Добавлено через 1 минуту
Все теперь работает! СПАСИБО
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.11.2019, 08:32
Помогаю со студенческими работами здесь

Как узнать отображается ли диалоговое окно на экране
плиз, помогите!!!Есть класс наследник от QMainWindow, у него есть член Dialog наследник QDialogx. Dialog немодальный. Нужно узнать при...

Ворд уведомляет, что "открыто диалоговое окно"
Здравствуйте. Буквально на днях началось. Система - windows XP, офис 2007. Всё лицензия корпоративная. Excel, PowerPoint, Outlook...

Как определить открыто ли окно?
Как определить видит ли пользователь окно, то есть активно ли окно?

Как проверить открыто ли окно?
Podskazite, kak proverit otkrito li okno ili net? Spasibo! Inessa

Как проверить открыто ли окно в WPF?
Как проверить открыто ли окно в WPF?


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru