|
10 / 10 / 1
Регистрация: 08.04.2022
Сообщений: 187
|
|||||||||||
PyQt6 Работа с QMessageBox21.07.2022, 10:43. Показов 5474. Ответов 30
Метки нет (Все метки)
Добрый день!
Каким образом я могу создать объект класса Message и работать уже с ним вызывая его в нужных местах программы и изменяя текст сообщения, можете поправить мой код?
Вот что я имею ввиду, хочу реализовать тоже самое, но через классы.
0
|
|||||||||||
| 21.07.2022, 10:43 | |
|
Ответы с готовыми решениями:
30
QMessageBox QMessageBox QMessageBox и QSS |
|
172 / 112 / 65
Регистрация: 26.06.2020
Сообщений: 334
|
||||||
| 21.07.2022, 14:26 | ||||||
1
|
||||||
|
10 / 10 / 1
Регистрация: 08.04.2022
Сообщений: 187
|
||||||
| 21.07.2022, 14:33 [ТС] | ||||||
|
Как мне в данном случае открыть класс внутри другого класса? Появляется окно на долю секунды и сразу исчезает.
0
|
||||||
| 21.07.2022, 14:52 | ||||||
Сообщение было отмечено telnofff как решение
Решение
telnofff, дайте ему родителя, сирота сразу загибается после show()
2
|
||||||
|
10 / 10 / 1
Регистрация: 08.04.2022
Сообщений: 187
|
||||||
| 21.07.2022, 15:09 [ТС] | ||||||
|
iamvic, Благодарю Вас! Очень доходчиво объяснили про parent=None в конструкторе я не знал, у меня еще тогда будет к Вам вопрос. Как мне в этом случае обратиться к методу другого класса, но уже без конструктора, чтобы появилось сообщение с текстом внутри, пока у меня всплывает только пустое сообщение, что я делаю не так?
0
|
||||||
| 21.07.2022, 17:36 | |||||||||||
|
Варианты-то разные.
С одной стороны можно так:
1
|
|||||||||||
| 22.07.2022, 09:57 | |||||||||||
|
С утра чего-то озарило
, что во всех предложенных решениях есть один существенный недостаток. Ведь по факту получается такая последовательность:- пользователь нажимает на кнопку в главном окне - рождается окно сообщения - пользователь закрывает его - этот отработавший виджет никуда не пропадает, он так и остаётся среди детей главного окна. И за счёт этих отработавших виджетов количество детей у главного окна неуклонно растёт в процессе работы, что грозит, наверное, перенаселением в конце концов .Если обратить внимание на происхождение класса виджета, то можно увидеть, что среди его предков числится QDialog (Message <-- QMessageBox <-- QDialog <-- и т.д.) Принимая во внимание особенности QDialog, можно предложить решить проблему утилизации отработавших виджетов следующим образом:
1
|
|||||||||||
|
10 / 10 / 1
Регистрация: 08.04.2022
Сообщений: 187
|
|
| 27.07.2022, 12:46 [ТС] | |
|
iamvic, Этот вариант больше нравится, минимум кода, получается метод exec() перехватывает весь поток. Скажите, откуда у Вас столько знаний по PyQt, посоветуйте ресурс, или книгу.
0
|
|
|
10 / 10 / 1
Регистрация: 08.04.2022
Сообщений: 187
|
||||||
| 28.07.2022, 14:10 [ТС] | ||||||
|
iamvic,
Я немного поправил Ваш код в двух местах, работает также, скажите, это не будет ошибкой?
0
|
||||||
|
Модератор
|
|
| 28.07.2022, 15:26 | |
|
telnofff, Это какое то лютое извращение по моему мнению, т. к. создавать класс QMessageBox, а в методе экземпляра создавать новый экземпляр, для чего нужно выносить QMessageBox в отдельный класс?
0
|
|
|
10 / 10 / 1
Регистрация: 08.04.2022
Сообщений: 187
|
|
| 28.07.2022, 15:31 [ТС] | |
|
Fudthhh, Хотите сказать этот код тоже неверный?
0
|
|
|
Модератор
|
||||||||||||||||
| 28.07.2022, 15:41 | ||||||||||||||||
Зачем держать QMessageBox в памяти, вызывай где его нужно и всё, если вызов повторяется много раз, то тут проблема в алгоритме, а если нет, то на крайний случай можно создать функцию, хотя я использую такой метод: Выносим все сообщения в отдельный файл:
1
|
||||||||||||||||
|
10 / 10 / 1
Регистрация: 08.04.2022
Сообщений: 187
|
||
| 28.07.2022, 15:48 [ТС] | ||
|
0
|
||
|
Модератор
|
||||||||||||
| 28.07.2022, 16:05 | ||||||||||||
|
1) Есть производный класс QMessageBox. 2) Есть метод класса, который в качестве аргумента принимает ссылку на экземпляр этого класса. 3) Этот метод, создает экземпляр этого же класса, при инициализации передавая туда аргументом ссылку на экземпляр класса откуда был вызван метод. 4) Далее вызывает его отображение, и после чего удаляет. Только ты подразумеваешь другое, в пункте два: Метод класса, принимает аргумент не экземпляр класса, откуда был вызван, а родителя, который будет далее передаваться в инициализацию нового экземпляра, этого класса. Даже написав это я раза три запутался в этой логике, учитывая что это быдло код, ты через месяц даже и не вспомнишь как это работает, и будет миллион проблем при модернизации. Добавлено через 2 минуты Чтоб было более менее правильно, это должно выглядеть так:
Но в целом это очень плохая практика. Добавлено через 3 минуты Или вот так, что более извращено:
2
|
||||||||||||
|
Модератор
|
|||||||||||
| 28.07.2022, 16:21 | |||||||||||
|
iamvic, в данном случае это создает путаницу, причем на ровном месте, если извращаться над элементарном выводе статический сообщений, то что будет твориться с динамическими QAbstractItemModel и ему подобных.
Я показал пример выше, как я реализую вывод текстовых сообщений с помощью QMessageBox, иногда у меня больше половины программы состоит только из них. Создать глобальные константы заголовка и содержимого сообщения или создать не понятный класс, с непонятным методом и очень сомнительным содержимым, выбор вроде очевиден. Добавлено через 4 минуты Даже если взять отрывок кода: Вот это:
1
|
|||||||||||
| 31.07.2022, 13:51 | ||||||||||||
|
Но как бы там ни было, вопрос-то всё равно остался - что делать, если ни одна из существующих в QMessageBox функций из набора Static Public Members не удовлетворяет требованиям задачи, а сам класс QMessageBox не очень подходит для создания собственной функции в данном конкретном случае?
Похоже, что в таком случае лучше всего использовать подкласс QDialog. Весьма надуманый пример с раздачей жёлтых и красных карточек пользователю, на которые он может только полюбоваться и закрыть нажатием на клавишу Esc, как мне кажется, позволяет понять как это можно сделать, а о применении прекрасно высказался Fudthhh,
Добавлено через 14 минут Добавлено через 1 час 46 минут Ну, блиииин!!! Вот ведь инерция мышления что творит... Тут же вообще просто функцией можно обойтись:
1
|
||||||||||||
|
10 / 10 / 1
Регистрация: 08.04.2022
Сообщений: 187
|
|
| 31.07.2022, 18:47 [ТС] | |
|
Fudthhh, допустим я хочу написать программу в которой хочу вызывать сообщения, сообщения будут находится в отдельном файле чтобы не было каши. Каким образом я могу это сделать так, чтобы выглядело правильно, как Вы считаете?
Код прикрепляю в архиве. Буду благодарен если посмотрите. Message test.rar
0
|
|
|
10 / 10 / 1
Регистрация: 08.04.2022
Сообщений: 187
|
|||||||||||
| 02.08.2022, 10:09 [ТС] | |||||||||||
|
Fudthhh, Оставлю код тут с пометкой. Мне очень важно увидеть вашу работу на моем примере, спасибо.
Первый файл:
Второй файл:
0
|
|||||||||||
| 02.08.2022, 10:09 | |
|
Помогаю со студенческими работами здесь
20
QMessageBox и потоки Класс QMessageBox PyQt6 QMessageBox Не открывается QMessageBox Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Сумматор с применением элементов трёх состояний.
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;. . .
|
|
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-text-sdl3-c. zip
finish-text-sdl3-cpp. zip
|