Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/55: Рейтинг темы: голосов - 55, средняя оценка - 4.91
0 / 0 / 2
Регистрация: 26.01.2011
Сообщений: 96

PyQt5. Проверка условия перед нажатием на кнопку "ОК" в диалоговом окне

12.10.2017, 15:35. Показов 11174. Ответов 3

Студворк — интернет-сервис помощи студентам
Ситуация такая.
Из основного окна вызывается диалоговое окно. В нем вводятся данные в поле.
В диалоговом окне есть кнопки "ОК" и "Cancel".
После нажатия на кнопку "ОК" данные из диалогового окна передаются в основное окно.
Как сделать так, что бы при нажатии на кнопку "ОК" сначала проводилась бы проверка - введены ли данные в поле. Если поле заполнено, то окно закрывается и данные передаются. Если поле не заполнено, то выводится сообщение и окно НЕ закрывается (ожидается ввод данных).

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
58
59
60
61
62
# -*- coding: utf-8 -*-
from PyQt5 import QtWidgets
import sys
 
class MyDialog(QtWidgets.QDialog):
    def __init__(self, parent=None):
        QtWidgets.QDialog.__init__(self, parent)
        self.setWindowTitle("Диалоговое окно")
        self.resize(200, 70)
        
        self.mainBox = QtWidgets.QVBoxLayout()
        
        self.lineEdit = QtWidgets.QLineEdit()
        self.mainBox.addWidget(self.lineEdit)
        
        self.hbox = QtWidgets.QHBoxLayout()
        self.btnOK = QtWidgets.QPushButton("&OK")
        self.btnCancel = QtWidgets.QPushButton("&Cancel")
        self.btnCancel.setDefault(True)
        self.btnOK.clicked.connect(self.accept)
        self.btnCancel.clicked.connect(self.reject)
        self.hbox.addWidget(self.btnOK)
        self.hbox.addWidget(self.btnCancel)
        self.mainBox.addLayout(self.hbox)
        
        self.setLayout(self.mainBox)
 
def on_accepted():
    print("on_accepted")
 
def on_rejected():
    print("on_rejected")
 
def on_finished(status):
    print("on_finished", status)
 
def on_clicked():
    dialog = MyDialog(window)
    dialog.accepted.connect(on_accepted)
    dialog.rejected.connect(on_rejected)
    dialog.finished[int].connect(on_finished)
    result = dialog.exec_()
    if result == QtWidgets.QDialog.Accepted:
        print(dialog.lineEdit.text())
    else:
        print("Нажата кнопка Cancel, кнопка Закрыть или клавиша <Esc>", 
              result)
 
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QWidget()
window.setWindowTitle("Класс QDialog")
window.resize(300, 70)
 
button = QtWidgets.QPushButton("Отобразить диалоговое окно...")
button.clicked.connect(on_clicked)
 
box = QtWidgets.QVBoxLayout()
box.addWidget(button)
window.setLayout(box)
 
window.show()
sys.exit(app.exec_())
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.10.2017, 15:35
Ответы с готовыми решениями:

Нажать на кнопку в диалоговом окне
Добрый день всем. Подскажите пожалуйста, мне необходимо нажать на кнопку в окне, например &quot;Удалить файл&quot;. Пишу код на VBA и все...

Браузеры не отображают в диалоговом окне кнопку Сохранить?!
В браузерах Mozilla Firefox и IE При попытке сохранить изображение ... в диалоговом окне кнопки &quot;СОХРАНИТЬ&quot; НЕТ... баузеры...

Можно ли в диалоговом окне вывести кнопку «распахнуть» ?
По умолчанию в диалоговом окне есть только одна кнопка в заголовке – крестик «закрыть окно». А можно ли отобразить еще кнопки «распахнуть...

3
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
12.10.2017, 15:51
Doctor_Che, в чем корректно у тебя трудность? Задача простая как 2 копейки.
0
0 / 0 / 2
Регистрация: 26.01.2011
Сообщений: 96
12.10.2017, 16:05  [ТС]
Не понимаю как предотвратить закрытие окна при на жатии на "ОК", если данные не введены.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
12.10.2017, 16:21
Лучший ответ Сообщение было отмечено Doctor_Che как решение

Решение

Doctor_Che,
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
from PyQt5 import QtWidgets
import sys
 
 
class MyDialog(QtWidgets.QDialog):
    def __init__(self, parent=None):
        QtWidgets.QDialog.__init__(self, parent)
        self.setWindowTitle("Диалоговое окно")
        self.resize(200, 70)
 
        self.mainBox = QtWidgets.QVBoxLayout()
 
        self.lineEdit = QtWidgets.QLineEdit()
        self.mainBox.addWidget(self.lineEdit)
 
        self.hbox = QtWidgets.QHBoxLayout()
        self.btnOK = QtWidgets.QPushButton("&OK")
        self.btnCancel = QtWidgets.QPushButton("&Cancel")
        self.btnCancel.setDefault(True)
        self.btnOK.clicked.connect(self.accept)
        self.btnCancel.clicked.connect(self.reject)
        self.hbox.addWidget(self.btnOK)
        self.hbox.addWidget(self.btnCancel)
        self.mainBox.addLayout(self.hbox)
 
        self.setLayout(self.mainBox)
 
    def accept(self):
        # Проверяешь тут то, что хотел, если все хорошо вызываешь
        # super().accept(), если нет, не вызываешь и выводишь подсказку
        pass
 
 
def on_clicked():
    dialog = MyDialog(window)
    result = dialog.exec_()
    if result == QtWidgets.QDialog.Accepted:
        print(dialog.lineEdit.text())
    else:
        print("Нажата кнопка Cancel, кнопка Закрыть или клавиша <Esc>",
              result)
 
 
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QWidget()
window.setWindowTitle("Класс QDialog")
window.resize(300, 70)
 
button = QtWidgets.QPushButton("Отобразить диалоговое окно...")
button.clicked.connect(on_clicked)
 
box = QtWidgets.QVBoxLayout()
box.addWidget(button)
window.setLayout(box)
 
window.show()
sys.exit(app.exec_())
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.10.2017, 16:21
Помогаю со студенческими работами здесь

Проверка на ввод числа в диалоговом окне
Подскажите, пожалуйста, как проверить три числа на правильность ввода в диалоговом окне в трех полях ввода TextBox? Три числа в диапазоне...

Как создать кнопку CButton и CEdit на стандартном диалоговом окне
Пожалуйста, подскажите как создать кнопку CButton и CEdit на стандартном диалоговом окне? В MSDN написано так: CButton myButton1; ...

Проверка ввода в диалоговом окне и игнорирование кнопки ОК
Здравствуйте, у меня диалоговое окно для ввода информации о футбольном матче. Если правильно заполнить поля, то на выходе будет новый...

Как реализовать появление данных в заголовке окна и в диалоговом окне по нажатию на кнопку?
как используя таймер реализовать, чтобы при нажатии на кнопку одновременно в заголовке окна и в информационном окне (alert) появлялось...

Остановка бесконечного цикла нажатием на кнопку в окне программы
В окне программы две кнопки, одна запускает бесконечный цикл, другая должна его останавливать. Как это сделать, если после запуска...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru