Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » PyQt4 - изменение текста стандартных (Абстрактных) кнопок (QtGui.QMessageBox.Yes например) QMessageBox'а [RSS Feed]

#1 Апрель 24, 2013 09:38:20

wizard_master
Зарегистрирован: 2012-10-11
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 - изменение текста стандартных (Абстрактных) кнопок (QtGui.QMessageBox.Yes например) QMessageBox'а

Добрый день товарищи программисты!
Задался таким вопросом: Как можно изменить текст на абстрактных кнопках (QtGui.QMessageBox.Yes, QtGui.QMessageBox.No, QtGui.QMessageBox.Cancel). Хочу чтобы надписи были русскими, т.к. не все конечные пользователи знают что такое Cancel

Вот например у меня задается вопрос пользователю, соответственно окошко выдается сразу, т.е. к нему какие-либо методы применить не получается.

reply = QtGui.QMessageBox.question(self, u"Вопрос", u"Вы уверены?", QtGui.QMessageBox.Yes | QtGui.QMessageBox.No | QtGui.QMessageBox.Cancel)

Как можно изменить текст на этих абстрактных кнопках? Или только в исходниках Qt это можно сделать?

Офлайн

#2 Апрель 24, 2013 19:08:27

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2757
Репутация: +  184  -
Профиль   Отправить e-mail  

PyQt4 - изменение текста стандартных (Абстрактных) кнопок (QtGui.QMessageBox.Yes например) QMessageBox'а

Я примерно так переводил:

dirdialog = QtGui.QFileDialog(self)
dirdialog.setLabelText(dirdialog.LookIn, u"Текущий Каталог")
dirdialog.setLabelText(dirdialog.FileName, u"Каталог")
dirdialog.setLabelText(dirdialog.FileType, u"Тип Файла")
dirdialog.setLabelText(dirdialog.Accept, u"Выбрать")
dirdialog.setLabelText(dirdialog.Reject, u"Отмена")
if dirdialog.exec_():
	return os.path.abspath(unicode(dirdialog.selectedFiles()[0])).replace("//","/")+"/"
else: return ""



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Апрель 24, 2013 19:09:39)

Офлайн

#3 Апрель 24, 2013 20:02:42

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

PyQt4 - изменение текста стандартных (Абстрактных) кнопок (QtGui.QMessageBox.Yes например) QMessageBox'а

Чтобы любой текст добавить:
http://www.qtcentre.org/threads/28739-QMessageBox-Text-in-the-buttons

Если просто нужны кнопки на русском во всех стандартных диалогах, нужно добавить файл локализации
\Python\Lib\site-packages\PyQt4\translations\qt_ru.qm
и загружать его с помощью QTranslator

Офлайн

#4 Апрель 25, 2013 07:49:14

wizard_master
Зарегистрирован: 2012-10-11
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 - изменение текста стандартных (Абстрактных) кнопок (QtGui.QMessageBox.Yes например) QMessageBox'а

Rodegast
Я примерно так переводил:
Спасибо, возьму на заметку такой способ. Но помимо этих кнопок есть еще стандартные меню и т.д.


reclosedev
Чтобы любой текст добавить:http://www.qtcentre.org/threads/28739-QMessageBox-Text-in-the-buttonsЕсли просто нужны кнопки на русском во всех стандартных диалогах, нужно добавить файл локализации\Python\Lib\site-packages\PyQt4\translations\qt_ru.qmи загружать его с помощью QTranslator
А вот это уже интереснее, спасибо!
По поводу QTranslator можете поподробней написать? Где именно в коде его инициализировать и загружать файл перевода?

Офлайн

#5 Апрель 25, 2013 08:03:49

wizard_master
Зарегистрирован: 2012-10-11
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 - изменение текста стандартных (Абстрактных) кнопок (QtGui.QMessageBox.Yes например) QMessageBox'а

reclosedev
загружать его с помощью QTranslator
А, я понял походу:

if __name__ == '__main__':
	app = QtGui.QApplication(sys.argv)
	translator = QTranslator()
	translator.load(u'qt_ru', u'C:\Python27\Lib\site-packages\PyQt4\translations') #как я понял, расширение файла (.qm) Qt сам добавит?
	app.installTranslator(translator)
	
	window = MainWindow()
	window.show()
	
	sys.exit(app.exec_())
UPD:
А дальше что? Я думал он сам переведет кнопки стандартные и меню…

Отредактировано wizard_master (Апрель 25, 2013 08:22:27)

Офлайн

#6 Апрель 25, 2013 08:45:01

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

PyQt4 - изменение текста стандартных (Абстрактных) кнопок (QtGui.QMessageBox.Yes например) QMessageBox'а

Обратные слэши в путях Win до добра не доводят

In [1]: print u'C:\Python27\Lib\site-packages\PyQt4\translations'
C:\Python27\Lib\site-packages\PyQt4     ranslations
Нужно использовать или сырые строки
ur'C:\Python27\Lib\site-packages\PyQt4\translations'
или прямые слэши.

А еще лучше, скопировать qt_ru.qm к себе и использовать путь относительно главного скрипта, особенно если в дальнейшем программа будет передаваться, и особенно если в виде .exe.

Офлайн

#7 Апрель 25, 2013 08:51:47

wizard_master
Зарегистрирован: 2012-10-11
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 - изменение текста стандартных (Абстрактных) кнопок (QtGui.QMessageBox.Yes например) QMessageBox'а

reclosedev
Обратные слэши в путях Win до добра не доводят
Спасибо огромное!!! Все получилось
Вот, может кому пригодится.
Для перевода стандартных кнопок в диалогах / стандартных меню и т.п. в PyQt используем класс QTranslator и файл перевода, поставляемый с PyQt:
if __name__ == '__main__':
	app = QtGui.QApplication(sys.argv)
	translator = QTranslator()
	#скопировал qt_ru.qm себе в папку со своим скриптом в подпапку lib. В пути использовать прямые слэши!
	#qt_ru.qm брал из C:\Python27\Lib\site-packages\PyQt4\translations\
	translator.load(u'qt_ru', u'./lib/') #расширение файла (.qm) Qt сам добавит.
	app.installTranslator(translator)
	
	settingsWindow = SettingsWindow()
	settingsWindow.show()
	sys.exit(app.exec_())

P.S. как я понял он из-за обратных слэшей в пути \t воспринял как табуляцию, т.е. как ему положено) На будущее буду иметь ввиду! А то у меня везде пути с обратными слэшами

Отредактировано wizard_master (Апрель 25, 2013 08:55:55)

Офлайн

  • Начало
  • » GUI
  • » PyQt4 - изменение текста стандартных (Абстрактных) кнопок (QtGui.QMessageBox.Yes например) QMessageBox'а[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version