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

Переименовать кнопку "setDetailedText"

02.06.2022, 10:48. Показов 3006. Ответов 13

Студворк — интернет-сервис помощи студентам
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
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QMessageBox
 
class Ui_MainWindow(QtWidgets.QMainWindow):
 
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.messageExampleBtn.clicked.connect(self.example_message)
 
    def example_message(self):
        msg = QMessageBox()
        msg.setIcon(QMessageBox.Information)
        msg.setText("Вы выбрали неверное действие, повторить?")
        msg_d = msg.setDetailedText("Детальный текст") # Как переименовать эту кнопку на например "Показать детали" / "Скрыть детали"
        msg_no = msg.addButton("Нет", msg.NoRole)
        msg_yes = msg.addButton("Да", msg.YesRole)
        msg.exec_()
 
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(418, 270)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.messageExampleBtn = QtWidgets.QPushButton(self.centralwidget)
        self.messageExampleBtn.setGeometry(QtCore.QRect(130, 90, 151, 61))
        self.messageExampleBtn.setObjectName("messageExampleBtn")
        MainWindow.setCentralWidget(self.centralwidget)
 
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
 
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Всплывающие сообщения"))
        self.messageExampleBtn.setText(_translate("MainWindow", "Пример сообщения"))
 
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = Ui_MainWindow()
    window.show()
    sys.exit(app.exec_())

Доброго дня, Коллеги!

Подскажите пожалуйста, каким способом можно переименовать кнопку setDetailedText?

Спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.06.2022, 10:48
Ответы с готовыми решениями:

Переименовать кнопку
Доброго всем времени суток! Проблема у меня такая необходимо вот тут вот http://bitrix.zitcom.ru/catalog/sofas/crad/ переименовать кнопку...

Как переименовать кнопку
Есть два кода, тут особо ничего не происходит: using System; using System.Collections.Generic; using System.ComponentModel; using...

Переименовать кнопку из другого питонфайла
Всем привет. Пролистал до 8й страницы, не нашел ответа. У меня есть два python файла: one.py two.py one.py: import two ...

13
 Аватар для Telnow
10 / 10 / 1
Регистрация: 08.04.2022
Сообщений: 187
06.06.2022, 07:17  [ТС]
Нет ни у кого идей?
0
 Аватар для kapbepucm
1566 / 739 / 321
Регистрация: 02.05.2020
Сообщений: 1,654
06.06.2022, 11:53
Лучший ответ Сообщение было отмечено telnofff как решение

Решение

вроде как, просто поменять неполучится, прибито гвоздями в классе DetailButton, который живёт в qmessagebox.cpp:
C++ (Qt)
1
2
QString label(DetailButtonLabel label) const
{ return label == ShowLabel ? QMessageBox::tr("Show Details...") : QMessageBox::tr("Hide Details..."); }
1
171 / 111 / 65
Регистрация: 26.06.2020
Сообщений: 331
06.06.2022, 13:17
Лучший ответ Сообщение было отмечено telnofff как решение

Решение

Ничего лучше не придумывается:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def example_message(self):
        msg = QMessageBox()
        msg.setIcon(QMessageBox.Information)
        msg.setText("Вы выбрали неверное действие, повторить?")
        #msg_d = msg.setDetailedText("Детальный текст") # Как переименовать эту кнопку на например "Показать детали" / "Скрыть детали"
        msg_no = msg.addButton("Нет", msg.NoRole)
        msg_yes = msg.addButton("Да", msg.YesRole)
        msg_d = msg.addButton("Показать детали", msg.HelpRole)
        msg_d.clicked.connect(self.detail)
        
        msg.exec_()
 
def detail(self):
        msg = QMessageBox()
        msg.setIcon(QMessageBox.Information)
        msg.setText("Детальный текст")
        msg.exec_()
1
 Аватар для Telnow
10 / 10 / 1
Регистрация: 08.04.2022
Сообщений: 187
06.06.2022, 13:23  [ТС]
kapbepucm, ll45,

Благодарю за помощь!
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
06.06.2022, 13:56
telnofff, ll45, немного заофтоплю, но по делу, всегда передавайте родителя в виджеты, поможет при кастомизации, поиске и прочих вещах, к этому лучше привыкать сразу.
0
 Аватар для Telnow
10 / 10 / 1
Регистрация: 08.04.2022
Сообщений: 187
06.06.2022, 13:57  [ТС]
Fudthhh,

Можете показать это на примере моего кода, если не сложно с комментариями, буду очень благодарен!
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
06.06.2022, 14:22
Лучший ответ Сообщение было отмечено telnofff как решение

Решение

telnofff, Вот у тебя функция, внутри класса виджета:
Python
1
2
def example_message(self):
        msg = QMessageBox()
т.к. ты вызываешь у него метод exec который перехватывает главный поток ты видишь сообщение нормально (так же будет работать с диалогами), но допустим тебе надо показать это сообщение и чтоб пользователь мог дальше использовать твою программу (с сообщениями это звучит глупо, поэтому я упомянул диалоговые окна), то есть тебе придется вызвать у виджета не exec метод, а show, если ты используешь на своем примере то твое окно появится на миллисекунду и исчезнет, т.к. будет уничтожено после выхода с функции, но если ты добавишь родителя:

Python
1
2
def example_message(self):
        msg = QMessageBox(self)
то оно будет жить, пока ты его не закроешь.

Добавлено через 36 секунд
P.S. Так же все дочерние окна, берут стиль от родителя, иконку окна тоже и прочие мелочи.
1
 Аватар для Telnow
10 / 10 / 1
Регистрация: 08.04.2022
Сообщений: 187
06.06.2022, 14:47  [ТС]
Fudthhh,
Благодарю! доходчиво объяснил!
0
 Аватар для kapbepucm
1566 / 739 / 321
Регистрация: 02.05.2020
Сообщений: 1,654
06.06.2022, 16:19
Было интересно разобрать, какоето решение получилось
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
from PyQt5.QtWidgets import QMessageBox, QApplication
from PyQt5.QtCore import QTimer
 
class MessageBox(QMessageBox):
  def __init__(self, parent=None):
    super().__init__(parent)
    self.setIcon(QMessageBox.Information)
    self.setText("Вы выбрали неверное действие, повторить?")
    self.setDetailedText("Детальный текст")
    for button in self.buttons():
      if self.buttonRole(button) == self.ActionRole:
        self.enableDetails = False
        self.details = button
        self.detailsClicked(button)
        button.clicked.connect(self.detailsClicked)
        break
    self.addButton("Нет", self.NoRole)
    self.addButton("Да", self.YesRole)
 
  def detailsClicked(self, button):
    self.enableDetails = not self.enableDetails
    #Прямо тут надпись изменить не выйдет,
    #какото следом идущий слот перетирает изменения;
    #поэтому, задействуем таймер, комфортный интервал подбирайте сами :)
    QTimer.singleShot(70, self.changeLabel)
 
  def changeLabel(self):
    if self.enableDetails:
      self.details.setText("Показать детали")
    else:
      self.details.setText("Скрыть детали") 
 
if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    mb = MessageBox()
    mb.exec_()
    #sys.exit(app.exec_())
1
 Аватар для Telnow
10 / 10 / 1
Регистрация: 08.04.2022
Сообщений: 187
06.06.2022, 18:02  [ТС]
kapbepucm,

Оригинально! Спасибо!

Я вот думаю, может быть текст на кнопке можно изменить если заглянуть под капот виджета QMessageBox?
0
290 / 205 / 68
Регистрация: 18.09.2019
Сообщений: 407
Записей в блоге: 58
06.06.2022, 23:40
telnofff, а попробуйте вот так:
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
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QMessageBox
 
class Ui_MainWindow(QtWidgets.QMainWindow):
 
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.messageExampleBtn.clicked.connect(self.example_message)
 
    def example_message(self):
        msg = QMessageBox()
        msg.setIcon(QMessageBox.Information)
        msg.setText("Вы выбрали неверное действие, повторить?")
        msg_d = msg.setDetailedText("Детальный текст") # Как переименовать эту кнопку на например "Показать детали" / "Скрыть детали"
        msg_no = msg.addButton("Нет", msg.NoRole)
        msg_yes = msg.addButton("Да", msg.YesRole)
        msg.exec_()
 
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(418, 270)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.messageExampleBtn = QtWidgets.QPushButton(self.centralwidget)
        self.messageExampleBtn.setGeometry(QtCore.QRect(130, 90, 151, 61))
        self.messageExampleBtn.setObjectName("messageExampleBtn")
        MainWindow.setCentralWidget(self.centralwidget)
 
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
 
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Всплывающие сообщения"))
        self.messageExampleBtn.setText(_translate("MainWindow", "Пример сообщения"))
 
if __name__ == "__main__":
    import sys, os
    app = QtWidgets.QApplication(sys.argv)
 
    qtrn = QtCore.QTranslator()
    # без этого в некоторых системах часть виджетов не русифицируется
    if QtCore.QLocale().name()[0:2] != 'en':
        qtrn.load('qtbase_' + QtCore.QLocale().name()[0:2],
                  QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.TranslationsPath))
        app.installTranslator(qtrn)
 
    window = Ui_MainWindow()
    window.show()
    sys.exit(app.exec_())
2
 Аватар для kapbepucm
1566 / 739 / 321
Регистрация: 02.05.2020
Сообщений: 1,654
07.06.2022, 09:15
Цитата Сообщение от telnofff Посмотреть сообщение
Я вот думаю, может быть текст на кнопке можно изменить если заглянуть под капот виджета QMessageBox?
Я полагаю, правкой кода python это сделать не выйдет, pyqt5 это всего лишь прослойка между между библиотекой, написанной на c++. Править, соответственно, придётся те строки, которые я в первом посте приводил из qmessagebox.cpp

IMHO, через translator, как показывает iamvic- самое грамотное решение
0
 Аватар для Telnow
10 / 10 / 1
Регистрация: 08.04.2022
Сообщений: 187
07.06.2022, 09:16  [ТС]
iamvic,

Годный пример, спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.06.2022, 09:16
Помогаю со студенческими работами здесь

Как переименовать и переместить кнопку Пуск в Windows 8.1?
Господа, такое вот обычное задание, но как его реализовать в Windows 8.1, поскажите, пожалуйста.Находил примеры для XP.

При нажатии на кнопку "Всем привет" вывести сообщение `alert("привет")` кнопку удалить и добавить новую кнопку.
как сделать чтобы при нажатие на кнопку всем привет выводилось сообщение alert("привет") кнопка всем привет удалялась и...

Как оставив кнопку minimize удалить кнопку maximize в Windows Form?
Всем здравствуйте. Устанавливаю: FormBorderStyle = Fixed Single MaximizeBox = False MinimizeBox = True В этом случае MaximizeBox...

Как скрыть кнопку на form2, нажав на кнопку которая находится на form1
Как скрыть кнопку на form2, нажав на кнопку которая находится на form1? т.е. нажав на кнопку OpenFrm2, открывается форма Form2, и кнопка...

При наведении курсора на кнопку вывести эту кнопку на передний план
Можно ли сделать так что при наведении курсора на Button в запущенном проекте он бы вставал а передний план, если да то как


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru