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

Работа с QMessageBox

21.07.2022, 10:43. Показов 5470. Ответов 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
2695 / 1601 / 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
2695 / 1601 / 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
2695 / 1601 / 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
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
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, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru