Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2025, 13:42   #1
mikkijon
Пользователь
 
Регистрация: 03.10.2019
Сообщений: 28
По умолчанию Модальное окно работает некорректно!!!

Приветствую друзья!!!
И снова обращаюсь к Вам за помощью !!!
так как уже два дня уже не могу понять где ошибок "Точка останова" никак не помогает (Видать я так и не понял как правильно им пользоваться)!!! Суть проблемы в следующем сначала почему-то появляется окно window2(на сколько я поняло это окно должно открываться лишь при нажатии на кнопку под названием: "Открыть модальное окно") .
Код:
from PyQt6 import QtCore, QtWidgets
import  sys

def show_modal_window():
    global modalWindow
    modalWindow = QtWidgets.QWidget(window1,
                                    QtCore.Qt.WindowType.Window)
    modalWindow.setWindowTitle("Модальное окно")
    modalWindow.resize(200, 50)
    modalWindow.setWindowModality(QtCore.Qt.WindowModality.Window)
    modalWindow.setAttribute(QtCore.Qt.WidgetAttribute.WA_DeleteOnClose, True)
    modalWindow.move(window1.geometry().center() -
                     modalWindow.rect().center() -
                     QtCore.QPoint(4, 30))
    modalWindow.show()

app = QtWidgets.QApplication(sys.argv)
window1 = QtWidgets.QWidget()
window1.setWindowTitle("Обычное окно")
window1.resize(300, 100)
button = QtWidgets.QPushButton("Открыть модальное окно")
button.clicked.connect(show_modal_window)
vbox = QtWidgets.QVBoxLayout()
vbox.addWidget(button)
window1.setLayout(vbox)
window1.show()

window2 = QtWidgets.QWidget()
window2.setWindowTitle("Это окно будет блокировано")
window2.resize(500, 100)
window2.show()

sys.exit(app.exec())
При нажатии на кнопку "Открыть модальное окно"... Вы ходить ошибка
Код:
Process finished with exit code -1073740791 (0xC0000409)
modalWindow.jpg
Подскажите пожалуйста где я ошибаюсь!!!
с Уважением Ким Евгений

Последний раз редактировалось mikkijon; 15.01.2025 в 13:45.
mikkijon вне форума Ответить с цитированием
Старый 15.01.2025, 14:08   #2
DeepFlake
Форумчанин
 
Регистрация: 16.05.2024
Сообщений: 186
По умолчанию

Почему в консоли нет сообщений об ошибках? Без них ничего не понятно.
Сначала напишите какое сообщение выдаёт интерпретатор Python.

Насколько я понял, window1 - это главное окно приложения. Зачем после его показа ещё создавать и показывать window2 ?

Почему окна, кнопки, обработчики событий - глобальные? Так обычно не делается. Надо как в вашем сообщении " Окно заставки вылетает ".

Последний раз редактировалось BDA; 16.01.2025 в 03:04.
DeepFlake вне форума Ответить с цитированием
Старый 15.01.2025, 16:38   #3
mikkijon
Пользователь
 
Регистрация: 03.10.2019
Сообщений: 28
По умолчанию

DeepFlake доброго времени суток!
На счет "сообщении об ошибках".... Я выклал скриншот своего интерпретатора... там все указано
Вы правы Windows1 - это главное окно... При запуске программы, это должно выходить первым но почему-то windows2 - выходит первым
Н счет глобальных переменных.... Так сказано листинге из книги по которой я учусь. Книга называется "PyQt6 и Python Разработка приложений"

Я думаю сами авторы что-то перепутали, или что-то упустили

moduleWin.rar
с Уважением Ким Евгений

Последний раз редактировалось BDA; 16.01.2025 в 03:05.
mikkijon вне форума Ответить с цитированием
Старый 15.01.2025, 19:02   #4
DeepFlake
Форумчанин
 
Регистрация: 16.05.2024
Сообщений: 186
По умолчанию

На картинке только надпись "Process finished with exit code -1073740791 (0xC0000409)" - это же не сообщение об ошибке. Сообщение об ошибке - когда трассировка стека и указание конкретной ошибки.
Например на моём компьютере попытка запуска вашей программы такая:
Код:
[cmu@fldmak pyt-kim]$ python3 moduleWin.py 
Traceback (most recent call last):
  File "/home/cmu/work/progforum/pyt-kim/moduleWin.py", line 1, in <module>
    from PyQt6 import QtCore, QtWidgets
ModuleNotFoundError: No module named 'PyQt6'
Видите? конкретно сообщается что нет модуля PyQt6. И на вашем компьютере тоже должна высвечиваться конкретное сообщение.
DeepFlake вне форума Ответить с цитированием
Старый 15.01.2025, 19:08   #5
DeepFlake
Форумчанин
 
Регистрация: 16.05.2024
Сообщений: 186
По умолчанию

window2 показывается первым, потому что метод show() для него вызывается последним.

Для архивов лучше использовать форматы zip или в крайнем случае 7-zip.

Если что-то написано в книге - это не значит что так оно и есть. Ваш компьютер лучше знает как правильно. И он вам говорит что приме из книги - ерунда. Бросьте его и разбирайтесь в правильной структуре графических программ.
И потом, вы так уверены что Qt 6 и PyQt 6 так уж безошибочны? Они же ещё в разработке, вполне возможно что ошибка не в вашей программе, а в Qt 6. Для изучения лучше используйте уже отлаженную версию ( Qt 5 )
DeepFlake вне форума Ответить с цитированием
Старый 15.01.2025, 19:25   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,427
По умолчанию

Нужно исправить WindowModality.Window на WindowModality.WindowModal. Создаются два окна, чтобы показать, что модальное окно заблокирует только одно из них.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 15.01.2025, 19:48   #7
mikkijon
Пользователь
 
Регистрация: 03.10.2019
Сообщений: 28
По умолчанию

все получилось!
Спасибо большое
с Уважением Ким Евгений
mikkijon вне форума Ответить с цитированием
Старый 16.01.2025, 05:08   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,427
По умолчанию

На будущее стоит все-таки найти, куда именно в PyCharm выводятся сообщения об ошибках, тогда проблему будет легче решить самостоятельно или нагуглить решение по тексту ошибки. Например, для данного кода сразу будет понятна строчка с ошибкой:
Код:
Traceback (most recent call last):
  File "tmp.py", line 10, in show_modal_window
    modalWindow.setWindowModality(QtCore.Qt.WindowModality.Window)
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Programs\Python311\Lib\enum.py", line 767, in __getattr__
    raise AttributeError(name) from None
AttributeError: Window
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 16.01.2025, 20:28   #9
mikkijon
Пользователь
 
Регистрация: 03.10.2019
Сообщений: 28
По умолчанию

Я так и делаю и ищу решения и примеры с листингами но видать я неправильно пишу запрос
с Уважением Ким Евгений
mikkijon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает модальное окно mikkijon Python 2 13.01.2025 19:01
Модальное окно PR0Z0N Фриланс 1 31.10.2012 19:09
Модальное окно Sprat PHP 3 28.03.2012 16:04
Модальное окно adm2010 Общие вопросы Delphi 2 28.09.2011 22:21