Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.56/25: Рейтинг темы: голосов - 25, средняя оценка - 4.56
 Аватар для Telnow
10 / 10 / 1
Регистрация: 08.04.2022
Сообщений: 187
PyQt6

Работа с QMessageBox

21.07.2022, 10:43. Показов 5830. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Каким образом я могу создать объект класса Message и работать уже с ним вызывая его в нужных местах программы и изменяя текст сообщения, можете поправить мой код?


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from PyQt6 import QtWidgets
import sys
 
class Message(QtWidgets.QMessageBox):
 
    def __init__(self):
        super(Message, self).__init__()
        self.setText("Пример")
 
 
app = QtWidgets.QApplication(sys.argv)
w = Message()
w.show()
sys.exit(app.exec())
 
 
# msg = Message() - не видит созданный выше класс, невозможно создать объект класса.
Добавлено через 24 минуты
Вот что я имею ввиду, хочу реализовать тоже самое, но через классы.

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
from PyQt6 import QtWidgets
 
class Programm(QtWidgets.QMainWindow):
 
    def __init__(self):
        super().__init__()
        self.button_one = QtWidgets.QPushButton(self)
        self.button_one.setText("Сообщение 1")
        self.button_two = QtWidgets.QPushButton(self)
        self.button_two.move(50, 50)
        self.button_two.setText("Сообщение 2")
 
        self.button_one.clicked.connect(lambda: self.message("Первое сообщние"))
        self.button_two.clicked.connect(lambda: self.message("Второе сообщние"))
 
    def message(self, txt):
        msg = QtWidgets.QMessageBox(self)
        msg.setText(txt)
        msg.show()
 
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = Programm()
    window.show()
    sys.exit(app.exec())
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.07.2022, 10:43
Ответы с готовыми решениями:

QMessageBox
Нужно ввести радиус и посчитать площадь и длину, выдает ошибку. В чем проблема? { QMessageBox* msgBox = new QMessageBox; ...

QMessageBox
При выборе файла который нельзя открыть должно быть окно с ошибкой, но ошибка происходит только в еомпиляции причем вместо этой ошибки...

QMessageBox и QSS
Добрый день, надо сделать чтобы QMessageBox был обычный (без стиля, потому что он со стилем выглядит ужасно), просто я в программе...

30
290 / 205 / 68
Регистрация: 18.09.2019
Сообщений: 407
Записей в блоге: 58
03.08.2022, 12:30
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от telnofff Посмотреть сообщение
Мне очень важно увидеть вашу работу на моем примере
Продолжаете отжигать? Верите, что нам тоже важно видеть как Вы растёте над собой? Вот зачем Вы снова схватились за Qt Designer? Этот инструмент разделения труда совсем не так используется. Там целая цепочка - дизайнер ваяет интерфейс, передаёт ui-файл программеру, программер его грузит с помощью uic.loadUi() и пишет логику, плюс ещё толмач подключается, который переводит все текстовые строки на другие языки и стряпает файлы языковых ресурсов *.qm с помощью Qt Linguist. Оно Вам надо? Зачем Вы генерируете файл *.py, а затем его увечите?

Вот я, из спортивного интереса, попытался подлечить Ваш код:

файл main.py
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
#!/usr/bin/python3
# -*- coding: utf-8 -*-
from PyQt6 import QtCore, QtWidgets
import xyz
 
class Ui_MainWindow(QtWidgets.QMainWindow):
 
    def __init__(self):
        super().__init__()
        self.setupUi()
        self.pushButton.clicked.connect(self.mess_one)
        self.pushButton_2.clicked.connect(self.mess_two)
 
    def mess_one(self, v):
        xyz.msg(self, xyz.txt.MY_MESSAGE_1)
        pass
 
    def mess_two(self, v):
        xyz.msg(self, xyz.txt.MY_MESSAGE_2)
        pass
 
    def setupUi(self):
        self.setObjectName("MainWindow")
        self.resize(318, 123)
        self.centralwidget = QtWidgets.QWidget(self)
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.centralwidget)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.frame = QtWidgets.QFrame(self.centralwidget)
        self.frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
        self.frame.setObjectName("frame")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.frame)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.pushButton = QtWidgets.QPushButton(self.frame)
        self.pushButton.setObjectName("pushButton")
        self.horizontalLayout.addWidget(self.pushButton)
        self.pushButton_2 = QtWidgets.QPushButton(self.frame)
        self.pushButton_2.setObjectName("pushButton_2")
        self.horizontalLayout.addWidget(self.pushButton_2)
        self.horizontalLayout_2.addWidget(self.frame)
        self.setCentralWidget(self.centralwidget)
 
        self.retranslateUi()
        QtCore.QMetaObject.connectSlotsByName(self)
 
    def retranslateUi(self):
        _translate = QtCore.QCoreApplication.translate
        self.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "Сообщение 1"))
        self.pushButton_2.setText(_translate("MainWindow", "Сообщение 2"))
 
 
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = Ui_MainWindow()
    window.show()
    sys.exit(app.exec())
файл xyz.py
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/python3
# -*- coding: utf-8 -*-
from PyQt6 import QtWidgets
 
def msg(client, txt):
    x = QtWidgets.QMessageBox(client)
    x.setText(txt)
    x.exec_()
    x.deleteLater()
 
class txt(object):
    MY_MESSAGE_1 = "Моё сообщение номер 1"
    MY_MESSAGE_2 = "Моё сообщение номер 2"
    MY_MESSAGE_3 = "Моё сообщение номер 3"
    MY_MESSAGE_4 = "Моё сообщение номер 4"
    MY_MESSAGE_5 = "Моё сообщение номер 5"
А ведь Fudthhh примерно такое решение и предлагал Вам прямым текстом. И мотивировал его вполне конкретно. Что Вас тут не устраивает? Чего Вы хотите на самом деле? Заинтриговали до жути...
0
 Аватар для Telnow
10 / 10 / 1
Регистрация: 08.04.2022
Сообщений: 187
03.08.2022, 12:44  [ТС]
iamvic, Хочу научиться не только правильно, но и красиво писать код. Поэтому и спрашиваю все то что мне интересно и то что не могу нагуглить.

P.S: Спасибо за код.

Добавлено через 4 минуты
И нравится мне делать программы в дизайнере и добавлять к ним логику, каждому свое.
0
290 / 205 / 68
Регистрация: 18.09.2019
Сообщений: 407
Записей в блоге: 58
03.08.2022, 15:08
telnofff, прекрасно! Но Вы всё-таки определитесь. "Красивый код" в промышленном исполнении - это совсем другая песня... Инструменты надо применять правильно.

Добавлено через 10 минут
Не надо генерить и калечить код. Дизайнер потому и работает отдельно, чтобы иметь возможность изменять красивости (всё перекрасить, всё переставить местами и т.д.), не дёргая программера.

Добавлено через 1 час 8 минут
telnofff, а давайте я Вам пример подкину, чтоб какой-то выхлоп был для Вас? Он тупой, но рабочий, там всё прозрачно. И, наверное, что он под Qt5, тоже не проблема? Завалялся тут откуда-то... Может польза будет.
файл project.ui
Code
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
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>294</width>
    <height>248</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="QPushButton" name="pushButton">
    <property name="geometry">
     <rect>
      <x>60</x>
      <y>50</y>
      <width>61</width>
      <height>51</height>
     </rect>
    </property>
    <property name="text">
     <string>W</string>
    </property>
   </widget>
   <widget class="QPushButton" name="pushButton_2">
    <property name="geometry">
     <rect>
      <x>160</x>
      <y>50</y>
      <width>61</width>
      <height>51</height>
     </rect>
    </property>
    <property name="text">
     <string>PP</string>
    </property>
   </widget>
   <widget class="QPushButton" name="pushButton_3">
    <property name="geometry">
     <rect>
      <x>110</x>
      <y>120</y>
      <width>61</width>
      <height>51</height>
     </rect>
    </property>
    <property name="text">
     <string>Ex</string>
    </property>
   </widget>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>
файл ui_probe.py:
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
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
 
from PyQt5 import uic
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtWidgets import QPushButton, QWidget
from PyQt5.QtWidgets import QMessageBox
 
 
class Globali(QMainWindow, QWidget):
    def __init__(self):
        super(Globali, self).__init__()
        uic.loadUi('project.ui', self)
 
    @pyqtSlot(name = 'on_pushButton_pressed')
    @pyqtSlot(name = 'on_pushButton_2_pressed')
    @pyqtSlot(name = 'on_pushButton_3_pressed')
    def any_button_pressed(self):
        QMessageBox.information(
            self,
            '',
            'Нажата кнопка {!s}'.format(self.sender().text()))
 
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Globali()
    ex.show()
    sys.exit(app.exec_())
Добавлено через 55 минут
О, нашёл источник Код c Qt файлами, не открывает 2 окно
0
 Аватар для Telnow
10 / 10 / 1
Регистрация: 08.04.2022
Сообщений: 187
11.08.2022, 09:52  [ТС]
Цитата Сообщение от iamvic Посмотреть сообщение
Я глянул в соседних ветках, Вам там насоветовали уже разных книжек - все годные, но всё-равно без чтения оригинальной документации не обойтись https://doc.qt.io/ Там значительно подробнее всё изложено, но, правда, без понимания C/C++ будет тяжело...
Хорошие знания C/C++ обязательны при работе с фреймворком PyQt?
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
11.08.2022, 10:17
telnofff, нет, есть доки с примерами для pysdie (аналог pyqt только круче): https://doc.qt.io/qtforpython/index.html
0
 Аватар для Telnow
10 / 10 / 1
Регистрация: 08.04.2022
Сообщений: 187
11.08.2022, 10:20  [ТС]
Fudthhh, А чем PySide лучше PyQt по Вашему мнению?
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
11.08.2022, 10:26
telnofff, как минимум лицензией, т. к. давно не использую pyqt не могу сказать исправили ли они прошлые косяки, например в pyqt не содержались модули которые содержались в pyside, и т.д.
0
290 / 205 / 68
Регистрация: 18.09.2019
Сообщений: 407
Записей в блоге: 58
11.08.2022, 14:37
Цитата Сообщение от telnofff Посмотреть сообщение
Хорошие знания C/C++ обязательны при работе
Не обязательно, достаточно иметь некоторое представление о синтаксисе, чтобы понимать происходящее.

А к тому, что предложил Fudthhh, я бы добавил https://doc.qt.io/qt-6/reference-overview.html (всё-таки в C-шной документации есть некоторые плюшки, хотя бы, ссылочки List of all members, including inherited members в описании каждого класса) и, конечно, https://www.riverbankcomputing... ocs/PyQt6/
0
 Аватар для Telnow
10 / 10 / 1
Регистрация: 08.04.2022
Сообщений: 187
11.08.2022, 15:57  [ТС]
Fudthhh, iamvic,

Благодарю всех за ответы, они мне очень помогают!

Обязательно ли указывать родителя в конструкторе, даже если его нет, если да, то почему?

Python
1
2
3
4
class Message(QtWidgets.QMessageBox):
 
    def __init__(self, parent=None):
        super(Message, self).__init__(parent)
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
11.08.2022, 16:30
telnofff, если его точно не будет, можно не указывать, в целом это просто задел на будущее, если программа активно разрастается, никогда не знаешь когда твой виджет станет дочерним другого виджета.

Ну в случае QMessageBox родителя надо указывать, либо получишь иконку окна в виде дефолтной иконки.
0
290 / 205 / 68
Регистрация: 18.09.2019
Сообщений: 407
Записей в блоге: 58
11.08.2022, 20:47
telnofff, строго говоря, наличие/отсутствие родителя определяет поведенческую функцию окна. Ведь окна без родителя недаром называются специальным термином - окна верхнего уровня. Они подчиняются неким своим соглашениям о пользовательском интерфейсе. Там не только вид иконок определяется, но и местоположение этого окна во время открытия. Короче говоря, в многоэкранных системах окна верхнего уровня всегда открываются на том экране, на котором в момент открытия находится указатель мыши, а окна с родителем открываются там, где расположен родитель. Поскольку мне так и не удалось найти явной формулировки этих соглашений, то пришлось в своё время целую эпопею в блоге городить, тем более что Linux в определённой части нарушает эти соглашения (см. например, По итогам определения начального экрана при старте приложения).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.08.2022, 20:47

Класс QMessageBox
Проблемы при создании экземпляра класса QMessageBox в сопутствующем вызываемом модуле. При вызове окна предупреждения для вывода...

QMessageBox и потоки
Всем привет, в первый раз пишу на этот форум. У меня возникла проблема с уведомлениями QMessageBox и потоком. При открытии уведомления...

Класс QMessageBox
Всем привет! Возникли вопросы в написании собственного класса. Есть программа, в которой присутствуют информационные сообщения. Мне...

PyQt6 QMessageBox
Я не пойму в чем ошибка, не работает QMessageBox.Critical def results(self): if not self.is_equel: res =...

Не открывается QMessageBox
Здравствуйте! Столкнулся с такой проблемой: Написал я приложение на python, используя PySide: в общем, имею 3 класса - главное окно,...


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru