Локализация виджета класс QTabWidget
Пытаюсь локализировать виджет класса QTabWidget и мне выдаёт ошибку:
TypeError: translate(str, str, disambiguation: str = None, n: int = -1): argument 2 has unexpected type 'int'
Я пишу через метод setTabText (я пометил в файле options.py крестиками строку, где ошибка) я вроде всё правильно указал индекс и название вкладки, но ошибка. Буду очень благодарен
файл main.py:
from PyQt5.QtWidgets import QApplication
from PyQt5 import QtCore
from PyQt5 import QtGui
from PyQt5 import QtWidgets
from options import LocalizationMainWindow
import sys
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
QtWidgets.QMainWindow.__init__(self)
self.UserWindowSettings = UserWindowSettings()
self.centralWidget = QtWidgets.QWidget() # создаём центральный виджет
self.setCentralWidget(self.centralWidget)
self.mainLayout = QtWidgets.QVBoxLayout(self.centralWidget)
# для локализации интерфейса
self.translator = QtCore.QTranslator(self)
self.LocalizationMainWindow = LocalizationMainWindow(self)
# settings
self.setFixedSize(600, 640)
self.setWindowTitle(" B U G ")
# делаем сборку
self.widget_main = self.createPage()
self.mainLayout.addWidget(self.widget_main)
self.createMenuBar()
self.createToolBar()
# условия для локализация
if self.language_english.isChecked():
self.language_english.trigger()
else:
self.language_russian.trigger()
# вывод информации на строку состояния
self.label_1 = QtWidgets.QLabel("v 1.0")
self.label_1.setStyleSheet("font-size: 18px; color: black;")
self.status_1.addPermanentWidget(self.label_1)
self.status_1.showMessage("Добро пожаловать", msecs = 4000)
self.setStatusBar(self.status_1)
def createPage(self):
# создание страницы в основном окне
self.widget_page = QtWidgets.QWidget()
# создание обьектов
self.button_1 = QtWidgets.QPushButton("Перейти к поиску телефонных\
\nномеров и электронных почт")
self.formbox = QtWidgets.QGridLayout()
# добавление в box и в окно
self.formbox.addWidget(self.button_1)
self.formbox.setSpacing(20)
self.widget_page.setLayout(self.formbox)
return self.widget_page
def createMenuBar(self):
# создание панели-меню и строки состоянии
self.menu = QtWidgets.QMenuBar()
self.status_1 = QtWidgets.QStatusBar()
# создание категорий меню и функционал в ней
self.menu_options = QtWidgets.QMenu("Опции")
self.menu_view = QtWidgets.QMenu('Вид')
self.menu_help = QtWidgets.QMenu("Справка")
# просто настройки
self.sub_menu_options = QtWidgets.QMenu("Настройки")
self.clear_page = QtWidgets.QAction("Очистка страницы после выхода")
self.clear_page.setCheckable(True)
self.user_settings = QtWidgets.QAction("Пользовательские настройки")
self.sub_menu_options.addAction(self.clear_page)
self.sub_menu_options.addAction(self.user_settings)
self.menu_options.addMenu(self.sub_menu_options)
# настройка языка
self.delimiter_1 = QtWidgets.QAction()
self.delimiter_1.setSeparator(True)
self.menu_options.addAction(self.delimiter_1)
self.language_menu = QtWidgets.QMenu("Язык")
self.language_russian = QtWidgets.QAction("Русcкий (ru)")
self.language_russian.setCheckable(True)
self.language_russian.setChecked(True)
self.language_english = QtWidgets.QAction("English (en)")
self.language_english.setCheckable(True)
self.group_action_6 = QtWidgets.QActionGroup(self.language_menu)
self.group_action_6.addAction(self.language_english)
self.group_action_6.addAction(self.language_russian)
self.language_menu.addAction(self.language_english)
self.language_menu.addAction(self.language_russian)
# датчик если будет изменения внутри
self.group_action_6.triggered.connect(self.clickedLanguage)
self.menu_options.addMenu(self.language_menu)
# добавляем отдельное меню в главное меню
self.menu.addMenu(self.menu_options)
self.menu.addMenu(self.menu_view)
self.menu.addMenu(self.menu_help)
# датчики
self.user_settings.triggered.connect(self.clickedActionUser)
# добавляем в окно
self.setMenuBar(self.menu)
def createToolBar(self):
self.toolBar = QtWidgets.QToolBar()
self.toolButton_back = QtWidgets.QAction("Вернуться назад")
self.toolButton_run_file = QtWidgets.QAction("Открыть файл")
self.toolButton_run_file.setEnabled(False)
self.toolBar.addAction(self.toolButton_back)
self.toolBar.addAction(self.toolButton_run_file)
self.addToolBar(self.toolBar)
def clickedActionUser(self):
self.UserWindowSettings.show()
def clickedLanguage(self, lang):
# английский язык
if lang.text() == "English (en)":
# здесь мы загружаем наши переводы из файла "ru-eng.qm"
self.translator.load('ru-eng')
app = QApplication.instance()
app.installTranslator(self.translator)
# русский язык
else:
app = QApplication.instance()
app.removeTranslator(self.translator)
def changeEvent(self, event):
# метод для локализации интерфейса
if event.type() == QtCore.QEvent.LanguageChange:
self.LocalizationMainWindow.retranslateUi()
class UserWindowSettings(QtWidgets.QDialog):
"""Класс реализующий пользовательские настройки
в виде выводящего окна, и также сохранения
настроек в файлы конфигурации """
def __init__(self, parent = None):
QtWidgets.QDialog.__init__(self, parent)
self.parent = parent
# settings
self.setFixedSize(460, 530)
self.setWindowTitle("Пользовательские настройки")
self.setWindowFlags(QtCore.Qt.Dialog)
self.setWindowModality(QtCore.Qt.ApplicationModal)
# делаем сборку
self.createPage()
def createPage(self):
self.gridBox = QtWidgets.QGridLayout()
self.hBox = QtWidgets.QHBoxLayout()
self.tabWidget = QtWidgets.QTabWidget()
self.button_save = QtWidgets.QPushButton("Применить")
self.button_save.setEnabled(False)
self.button_ok = QtWidgets.QPushButton("Ок")
self.hBox.addWidget(self.button_ok)
self.hBox.addWidget(self.button_save)
self.gridBox.addWidget(self.tabWidget, 0, 0)
self.gridBox.addItem(self.hBox, 1, 0, alignment = QtCore.Qt.AlignRight)
self.setLayout(self.gridBox)
# сборка tab-виджетов
self.createTabWidget_Search()
self.createTabWidget_Generator()
# датчики
self.button_ok.clicked.connect(self.accept)
self.button_save.clicked.connect(self.accept)
def createTabWidget_Search(self):
self.tabWidget_1 = QtWidgets.QWidget()
self.formBox_1 = QtWidgets.QFormLayout()
self.formBox_1.setVerticalSpacing(17)
self.formBox_1.setFieldGrowthPolicy(QtWidgets.QFormLayout.FieldsStayAtSizeHint)
# настройка формата файла
self.groupBoxFormatFile = QtWidgets.QGroupBox("Формат файла для сохранения данных")
self.groupBoxFormatFile.setFlat(True)
self.hBoxFormat = QtWidgets.QHBoxLayout()
self.checkFileBoxTxt = QtWidgets.QCheckBox("txt")
self.checkFileBoxTxt.setChecked(True)
self.checkFileBoxCsv = QtWidgets.QCheckBox("csv")
# состояние при котором идёт разблокировка кнопки
self.checkFileBoxTxt.stateChanged.connect(self.enableApplyButton)
self.checkFileBoxCsv.stateChanged.connect(self.enableApplyButton)
self.hBoxFormat.addWidget(self.checkFileBoxTxt)
self.hBoxFormat.addWidget(self.checkFileBoxCsv)
self.groupBoxFormatFile.setLayout(self.hBoxFormat)
self.formBox_1.addWidget(self.groupBoxFormatFile)
self.tabWidget_1.setLayout(self.formBox_1)
self.tabWidget.addTab(self.tabWidget_1, "настройки поиска")
def createTabWidget_Generator(self):
self.tabWidget_2 = QtWidgets.QWidget()
self.formBox_2 = QtWidgets.QFormLayout()
self.formBox_2.setVerticalSpacing(17)
self.formBox_2.setFieldGrowthPolicy(QtWidgets.QFormLayout.FieldsStayAtSizeHint)
# настройка длины пароля
self.groupBoxLengthPassword = QtWidgets.QGroupBox("Длина пароля (макс 19 символа)")
self.groupBoxLengthPassword.setFlat(True)
self.hBoxLength = QtWidgets.QHBoxLayout()
self.lineEdit_Length = QtWidgets.QLineEdit("10")
self.lineEdit_Length.setInputMask("b9")
self.lineEdit_Length.setClearButtonEnabled(True)
self.lineEdit_Length.textEdited.connect(self.enableApplyButton) # состояние поля
self.hBoxLength.addWidget(self.lineEdit_Length)
self.groupBoxLengthPassword.setLayout(self.hBoxLength)
self.formBox_2.addWidget(self.groupBoxLengthPassword)
self.tabWidget_2.setLayout(self.formBox_2)
self.tabWidget.addTab(self.tabWidget_2, "настройки генерации")
# методы для датчиков
def enableApplyButton(self):
# делает кнопку активной (применить)
self.button_save.setEnabled(True)
if __name__ == '__main__':
app = QApplication(sys.argv)
MainWindow = MainWindow()
MainWindow.show()
sys.exit(app.exec_())
файл options.py:
from PyQt5.QtWidgets import QApplication
from PyQt5.Qt import QSettings
from PyQt5 import QtWidgets
from PyQt5 import QtGui
class LocalizationMainWindow(QtWidgets.QWidget):
""" класс реализующий локализацию всего интерфейса приложения
на русский и английский язык """
def __init__(self, parent = None):
super().__init__(parent)
self.parent = parent
self.UserWindowSettings = parent.UserWindowSettings
def retranslateUi(self): # метод для перевода на другой язык
# основное окно, а также меню (MenuBar)
self.parent.button_1.setText(QApplication.translate('MainWindow', 'Перейти к поиску телефонных\nномеров и электронных почт'))
self.parent.toolButton_back.setText(QApplication.translate('MainWindow', 'Вернуться назад')) # на ToolBar
self.parent.toolButton_run_file.setText(QApplication.translate('MainWindow', 'Открыть файл'))
self.parent.menu_options.setTitle(QApplication.translate('MainWindow', 'Опции'))
self.parent.menu_view.setTitle(QApplication.translate('MainWindow', 'Вид'))
self.parent.menu_help.setTitle(QApplication.translate('MainWindow', 'Справка'))
self.parent.sub_menu_options.setTitle(QApplication.translate('MainWindow', 'Настройки'))
self.parent.clear_page.setText(QApplication.translate('MainWindow', 'Очистка страницы после выхода'))
self.parent.user_settings.setText(QApplication.translate('MainWindow', 'Пользовательские настройки'))
# пользовательское окно (настройки класс - UserWindowSettings)
# ++++++++++
self.UserWindowSettings.tabWidget.setTabText(QApplication.translate("MainWindow", 0, "настройки поиска"))
# ++++++++++
self.UserWindowSettings.button_save.setText(QApplication.translate("MainWindow", "Применить"))
self.UserWindowSettings.button_ok.setText(QApplication.translate("MainWindow", "Ок"))
self.UserWindowSettings.button_exit.setText(QApplication.translate("MainWindow", "Отмена"))
self.UserWindowSettings.groupBoxFormatFile.setTitle(QApplication.translate('MainWindow', "Формат файла для сохранения данных"))
self.UserWindowSettings.groupBoxRunFile.setTitle(QApplication.translate("MainWindow", "Запуск файла после сохранения"))
self.UserWindowSettings.radioRunFile_Yes.setText(QApplication.translate("MainWindow", "Да"))
self.UserWindowSettings.radioRunFile_No.setText(QApplication.translate("MainWindow", "Нет"))
self.UserWindowSettings.groupBoxPathFile.setTitle(QApplication.translate("MainWindow", "Путь, где будут храниться файлы"))
self.UserWindowSettings.groupBoxLengthPassword.setTitle(QApplication.translate("MainWindow", "Длина пароля (макс 19 символа)"))
self.UserWindowSettings.groupBoxRegisterPassword.setTitle(QApplication.translate('MainWindow', "Регистр букв"))
self.UserWindowSettings.radioRegister_1.setText(QApplication.translate("MainWindow", "Нижний"))
self.UserWindowSettings.radioRegister_2.setText(QApplication.translate("MainWindow", "Верхний"))
self.UserWindowSettings.radioRegister_3.setText(QApplication.translate("MainWindow", "Верхний и нижний"))
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
я не могу понять как пороверить ваш код, потому что он не полный, но
void QTabWidget::setTabText(int index, const QString &label)
попробуйте так:
self.UserWindowSettings.tabWidget.setTabText(0, QApplication.translate("MainWindow", "настройки поиска"))
