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

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

02.06.2022, 10:48. Показов 3083. Ответов 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
1568 / 741 / 321
Регистрация: 02.05.2020
Сообщений: 1,660
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
172 / 112 / 65
Регистрация: 26.06.2020
Сообщений: 334
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
2696 / 1602 / 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
2696 / 1602 / 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
1568 / 741 / 321
Регистрация: 02.05.2020
Сообщений: 1,660
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
1568 / 741 / 321
Регистрация: 02.05.2020
Сообщений: 1,660
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
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru