Данный раздел содержит ответы на часто возникающие вопросы по ходу прохождения курса.
Python¶
Установка пакетов (pip)¶
Необходимые дополнительные пакеты можно установить, используя утилиту pip , например (установка пакета flake8 ):
pip install flake8
Команда pip install. по умолчанию устанавливает пакет для всех пользователей системы, требуя наличия административных прав. Если Ваш пользователь обладает ограниченными правами (такое может быть, например, в компьютерном классе вуза), используйте параметр —user , например:
pip install --user flake8
После установки пакета выполните его обновление:
pip install flake8 --upgrade
IDE Geany¶
Язык интерфейса¶
Geany использует язык ОС в качестве языка интерфейса по умолчанию. Его можно изменить, используя терминал:
set lang=engeany
Выполнение практикума и самостоятельной работы¶
Заготовки заданий¶
В каждой теме для заданий разделов Практикум и Самостоятельная работа предоставляются заготовки ( -> Репозиторий) — их нужно загрузить и использовать при выполнении.
Организация файлов¶
Хранить задания рекомендуется в отдельной папке. Дерево файлов в таком случае может выглядеть следующим образом:
запустить программу и исправить ошибки (до их отсутствия);
проверить соответствие вывода на экран примеру.
настройте среду разработки ;
запустите команду для проверки и исправьте ошибки (до их отсутствия).
Задания, которые были выполнены и проверены защищаются очно, включая демонстрацию и ответы на дополнительные вопросы.
Пример выполнения решения и проверки заданий по программированию:
Последовательность и нюансы выполнения задач¶
Курс построен специальным образом так, что задачи по программированию должны выполняться с применением способов, изученных к текущей теме / разделу / подразделу и с соблюдением дополнительных ограничений, указанных в задаче.
Например, до изучения условного оператора решение задач с его использованием будет считаться неверным. Проверяющая программа укажет, если используется недопустимая команда.
Запись видео¶
Ряд тем предусматривает видеозапись работы программы в качестве одного из условий их защиты (аудио-пояснения рекомендуются, но по желанию и возможности). В качестве кроссплатформенной программы для захвата экрана (записи скринкастов) рекомендуется Open Broadcaster Software.
После установки приложения для своей операционной системы, выполните следующие настройки:
Кнопка «Настройки» (главное окно):
Вывод (вкладка):
Формат записи: mp4;
Выходное разрешение: [максимальное];
Начать запись: F9;
Остановить запись: F10.
добавьте источник Захват экрана (область Источники ->+);
отключите звук, если не собираетесь записывать пояснения (область Микшер ->Mic/Aux ->Иконка со звуком);
по желанию добавьте веб-камеру как Устройство захвата видео.
После настройки запустите демонстрируемую программу и управляйте записью, используя горячие клавиши (F9/F10).
Начало работы с Python в Windows для начинающих
Это пошаговое руководство для пользователей, начинающих работу с Python в Windows.
Настройка среды разработки
Для начинающих, которые не знакомы с Python, рекомендуется установить Python из Microsoft Store. При установке из Microsoft Store используется базовый интерпретатор Python3, но в дополнение к автоматическому обновлению также настраиваются параметры пути для текущего пользователя (без необходимости доступа администратора). Это особенно полезно, если вы работаете из среды образовательного учреждения или являетесь частью организации, которая ограничивает разрешения или административный доступ на компьютере.
Если вы используете Python в Windows для разработки веб-приложений, мы рекомендуем настроить среду разработки другим образом. Вместо установки непосредственно в Windows рекомендуется установить и использовать Python через подсистему Windows для Linux. Дополнительные сведения см. в статье «Начало работы с Python для веб-разработки в Windows». Если вы заинтересованы в автоматизации распространенных задач в операционной системе, ознакомьтесь с нашим руководством. Начало работы с Python в Windows для сценариев и автоматизации. Для некоторых сложных сценариев (например, необходимо получить доступ к установленным файлам Python или изменить файлы Python, создавать копии двоичных файлов или использовать библиотеки DLL Python напрямую), вам может потребоваться скачать конкретный выпуск Python непосредственно из python.org или рассмотреть возможность установки альтернативы, например Anaconda, Jython, PyPy, WinPython, IronPython и т. д. Мы рекомендуем использовать это только в том случае, если вы являетесь более продвинутым программистом Python с определенной причиной выбора альтернативной реализации.
установите Python;
Чтобы установить Python с помощью Microsoft Store, сделайте следующее:
Перейдите в меню Пуск (значок Windows в нижнем левом углу), введите «Microsoft Store» и щелкните ссылку, чтобы открыть магазин.
Когда магазин откроется, выберите Поиск в верхнем правом меню и введите «Python». Выберите, какую версию Python вы хотите использовать, из результатов в разделе «Приложения». Мы рекомендуем использовать самую последнюю версию, если только у вас нет причин для обратного (например, по причине согласования с версией, использованной в уже существующем проекте, над которым вы планируете работать). Определив, какую версию вы хотите установить, выберите Получить.
После того как Python завершит процесс загрузки и установки, откройте Windows PowerShell, используя меню Пуск (значок Windows в нижнем левом углу). После открытия PowerShell введите Python —version , чтобы убедиться, что Python 3 установлен на компьютере.
Установка Python из Microsoft Store содержит стандартный диспетчер пакетов pip. Pip позволяет устанавливать дополнительные пакеты, которые не входят в стандартную библиотеку Python, и управлять ими. Чтобы убедиться, что у вас есть pip, который можно использовать для установки пакетов и управления ими, введите pip —version .
Установка Visual Studio Code
При использовании VS Code в качестве текстового редактора или интегрированной среды разработки (IDE) вам доступны IntelliSense (помощь в завершении кода), анализ кода (помогает избежать ошибок в коде), поддержка отладки (помогает находить ошибки в коде после запуска), фрагменты кода (шаблоны для небольших повторно используемых блоков кода) и модульное тестирование (тестирование интерфейса кода с различными типами входных данных).
VS Code также содержит встроенный терминал, который позволяет открывать командную строку Python с помощью командной строки Windows, PowerShell или любой другой, создавая простой рабочий процесс между редактором кода и командной строкой.
Чтобы установить VS Code, скачайте VS Code для Windows: https://code.visualstudio.com.
Установив VS Code, необходимо также установить расширение Python. Для установки расширения Python можно выбрать ссылку на VS Code в Marketplace или открыть VS Code и выполнить поиск по фразе Python в меню расширений (Ctrl+Shift+X).
Python — интерпретируемый язык, и для выполнения кода Python необходимо указать VS Code, какой интерпретатор нужно использовать. Мы рекомендуем использовать самую последнюю версию Python, если у вас нет особой причины для обратного. После установки расширения Python выберите интерпретатор Python 3, открыв палитру команд (CTRL+SHIFT+P), начните вводить команду Python: выберите интерпретатор для поиска, а затем выберите команду. Вы также можете использовать параметр Select Python Environment (Выбрать среду Python) в нижней строке состояния, если она доступна (возможно, уже отображается выбранный интерпретатор). Команда предоставляет список доступных интерпретаторов, которые VS Code может найти автоматически, включая виртуальные среды. Если нужный интерпретатор не отображается, перейдите к статье о настройке сред Python.
Чтобы открыть терминал в VS Code, выберите Просмотр>Терминал или используйте клавиши CTRL+` (символ обратного апострофа). Терминалом по умолчанию является PowerShell.
В окне терминала VS Code откройте Python, просто введя команду: python
Если вы планируете совместно работать над кодом Python с другими пользователями или размещать проект на сайте с открытым исходным кодом (например, GitHub), примите во внимание, что VS Code поддерживает управление версиями с помощью Git. Вкладка системы управления версиями в VS Code отслеживает все изменения и содержит общие команды Git (добавление, фиксация, принудительная отправка, извлечение) прямо в пользовательском интерфейсе. Сначала необходимо установить Git для включения панели управления версиями.
Скачайте и установите Git для Windows с веб-сайта git-scm.
В комплект входит мастер установки, который задает вам ряд вопросов о параметрах установки Git. Рекомендуется использовать все параметры по умолчанию, если у вас нет конкретной причины изменить какой-либо из них.
Если вы никогда не использовали Git, обратитесь к руководствам по GitHub. Они помогут вам приступить к работе.
Учебник по некоторым основам работы с Python (на примере Hello World)
Python, согласно его создателю Гвидо ван Россуму, — это «язык программирования высокого уровня, и его основная философия проектирования — это удобочитаемость кода и синтаксис, позволяющий программистам выразить концепции в нескольких строках кода».
Python — интерпретируемый язык. В отличие от скомпилированных языков, в которых написанный код необходимо перевести в машинный код для выполнения процессором компьютера, код Python передается непосредственно интерпретатору и запускается напрямую. Просто введите код и запустите его. Попробуем сделать это!
Откройте командную строку PowerShell и введите python , чтобы запустить интерпретатор Python 3. (В некоторых инструкциях указано использовать команду py или python3 , которые также подойдут.) Если вы делаете все правильно,появится командная строка с тремя символами «больше, чем» >>>.
Существует несколько встроенных методов, позволяющих вносить изменения в строки в Python. Создайте переменную с помощью команды variable = ‘Hello World!’ . Нажмите клавишу ВВОД для создания новой строки.
Выведите переменную с помощью команды print(variable) . Отобразится текст «Hello World!».
Выясните, сколько символов используется для переменной строки, с помощью команды len(variable) . Будет показано, что используется 12 символов. (Обратите внимание, что пробел учитывается как символ в общей длине.)
Преобразуйте строковую переменную в буквы верхнего регистра: variable.upper() . Теперь преобразуйте строковую переменную в буквы нижнего регистра: variable.lower() .
Подсчитайте, сколько раз буква «l» используется в строковой переменной: variable.count(«l») .
Найдите определенный символ в вашей строковой переменной. Давайте найдем восклицательный знак с помощью команды variable.find(«!») . Будет показано, что восклицательный знак находится в позиции 11 строки.
Замените восклицательный знак на вопросительный знак: variable.replace(«!», «?») .
Чтобы выйти из Python, введите exit() , quit() или нажмите клавиши CTRL+Z.
Надеемся, вам понравилось использовать некоторые из встроенных в Python методов модификации строк. Теперь попробуйте создать файл программы Python и запустить его с помощью VS Code.
Учебник по использованию Python с VS Code (на примере Hello World)
Команда VS Code составила отличный учебник по началу работы с Python с пошаговым руководством по созданию программы Hello World с помощью Python, запуску программного файла, настройке и запуску отладчика, а также установке пакетов, таких как matplotlib и numpy, для создания графического изображения в виртуальной среде.
Откройте PowerShell и создайте пустую папку с именем hello, перейдите в эту папку и откройте ее в VS Code:
mkdir hello cd hello code .
Создание простой игры с помощью Pygame
Pygame — это популярный пакет Python для создания игр, который позволяет учащимся изучать программирование увлекательным способом. Pygame отображает графические изображения в новом окне, поэтому метод «только командной строки» WSL не подойдет. Но если вы установили Python с помощью Microsoft Store, как описано в этом учебнике, все получится.
После установки Python установите Pygame из командной строки (или терминала в VS Code), введя python -m pip install -U pygame —user .
Протестируйте установку, запустив пример игры: python -m pygame.examples.aliens
Если все в порядке, откроется окно игры. По завершении игры закройте окно.
Вот как начать написание кода собственной игры:
Откройте PowerShell (или командную строку Windows) и создайте пустую папку с именем bounce. Перейдите к этой папке и создайте файл с именем bounce.py. Откройте папку в VS Code:
mkdir bounce cd bounce new-item bounce.py code .
import sys, pygame pygame.init() size = width, height = 640, 480 dx = 1 dy = 1 x= 163 y = 120 black = (0,0,0) white = (255,255,255) screen = pygame.display.set_mode(size) while 1: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() x += dx y += dy if x < 0 or x >width: dx = -dx if y < 0 or y >height: dy = -dy screen.fill(black) pygame.draw.circle(screen, white, (x,y), 8) pygame.display.flip()
Сохраните его как: bounce.py .
Запустите его в терминале PowerShell, введя: python bounce.py .
Попробуйте изменить некоторые из чисел, чтобы увидеть, как они влияют на прыгающий шарик.
Дополнительные сведения о создании игр с помощью Pygame см. на сайте pygame.org.
Материалы для непрерывного обучения
Мы рекомендуем использовать следующие ресурсы, чтобы продолжить изучение разработки на Python в Windows.
Блоги разработчиков Майкрософт: Python: ознакомьтесь с последними обновлениями обо всех вещах Python в Майкрософт.
Онлайн-ресурсы для обучения Python
Введение в Python. Попробуйте интерактивную платформу Microsoft Learn и заработать точки опыта для выполнения этого модуля, охватывающего основы написания базового кода Python, объявления переменных и работы с входными и выходными данными консоли. Интерактивная среда песочницы предоставляет эту отличную возможность начать пользователям, у которых еще не настроена среда разработки Python.
Обучение Python на LinkedIn.com: базовое введение в Python.
Руководство по Python для начинающих. Полный и бесплатный учебник Python с интерактивными примерами кода (запускаемой) идеально подходит для начинающих и для тех, кто имеет предыдущий опыт.
LearnPython.org учебники. Приступая к обучению Python без необходимости устанавливать или настраивать что-либо с помощью этих бесплатных интерактивных учебников Python от людей в DataCamp.
Учебники по Python.org: впервые вводите читателя в основные понятия и функции языка Python и системы.
Работа с Python в VS Code
Редактирование Python в VS Code: узнайте больше о том, как воспользоваться преимуществами автоматической компиляции VS Code и поддержки IntelliSense для Python, включая настройку их поведения. или просто отключите их.
Linting Python: Linting — это процесс выполнения программы, которая будет анализировать код для потенциальных ошибок. Узнайте о различных формах поддержки анализа кода VS Code для Python и о том, как выполнить его настройку.
Отладка Python: отладка — это процесс выявления и удаления ошибок из компьютерной программы. В статье по этой ссылке описывается инициализация и настройка отладки для Python с помощью VS Code, установка и проверка точек останова, присоединение локального скрипта, выполнение отладки для различных типов приложений или на удаленном компьютере, а также некоторые основные способы устранения неполадок.
Модульное тестирование Python: описывает некоторые общие сведения о том, что означает модульное тестирование, пример пошагового руководства, включение платформы тестирования, создание и запуск тестов, отладка тестов и параметры конфигурации тестов.
Как поменять язык при использовании модуля datetime?
Здесь на экран выводится «Сейчас у вас October месяц.». Как можно поменять язык на русский, чтобы выводилось «Сейчас у вас октябрь месяц.».
Вопрос задан более трёх лет назад
3334 просмотра
Комментировать
Решения вопроса 2
from datetime import datetime import locale locale.setlocale( category=locale.LC_ALL, locale="Russian" # Note: do not use "de_DE" as it doesn't work ) a = datetime.today() print('Сейчас у вас', a.strftime('%B'), 'месяц.')
Ответ написан более трёх лет назад
Нравится 3 2 комментария
Azamgl @Azamgl Автор вопроса
Я гуглил если что, видимо неправильно вопрос задал. Спасибо!
datetime python language
Сергей Карбивничий @hottabxp Куратор тега Python
Сначала мы жили бедно, а потом нас обокрали..
Вариант для Linux:
from datetime import datetime import locale locale.setlocale(locale.LC_ALL, "") a = datetime.today() print('Сейчас у вас', a.strftime('%B'), 'месяц.') >>> Сейчас у вас октября месяц.
Ответ написан более трёх лет назад
Нравится 3 1 комментарий
Как менять язык всего интерфейса по команде от пользователя?
Есть два языка на выбор: русский и английский. Как реализовать так, чтобы, например, пользователь выбрал русский язык и весь интерфейс менялся на русский, если выберет английский язык, то всё менялось на английский. Как можно реализовать (приложение создано на PyQt5)? main.py
from PyQt5 import QtCore from PyQt5 import QtGui from PyQt5 import QtWidgets import window_1 import sys import ctypes import os class MainWindow(QtWidgets.QMainWindow): def __init__(self): QtWidgets.QMainWindow.__init__(self) # создание обьекта для построения меню (в другом классе) self.menuBar = QtWidgets.QMenuBar() # создание файла для сохранения натроек if os.name == "nt": # проверка на название системы self.CONFIG_FILE_NAME = 'settings\\config.ini' self.centralWidget = QtWidgets.QWidget() # создаём центральный виджет self.setCentralWidget(self.centralWidget) self.mainLayout = QtWidgets.QVBoxLayout(self.centralWidget) # settings self.setFixedSize(640, 600) self.setWindowTitle(" B U G ") self.setWindowIcon(QtGui.QIcon("settings\\bug.ico")) # делаем сборку self.widget_main = self.create_page() self.mainLayout.addWidget(self.widget_main) self.create_menuBar() self.create_toolBar() # для строки состоянии 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 create_page(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) # датчики и события self.button_1.clicked.connect(self.clicked_button_1) # сделать главным комонентом в общем return self.widget_page # возращает def create_menuBar(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_in_options_settings_1 = QtWidgets.QMenu("Настройки") # настройки строки состояния self.options_settings_status = QtWidgets.QAction("Включить панель состояния") self.options_settings_status.setCheckable(True) self.options_settings_status.setChecked(True) self.sub_menu_in_options_settings_1.addAction(self.options_settings_status) self.menu_options.addMenu(self.sub_menu_in_options_settings_1) # настройки поиска self.sub_menu_options_search = QtWidgets.QMenu("Настройки поиска") self.action_search_options_1 = QtWidgets.QAction("Искать всё") self.action_search_options_1.setCheckable(True) self.action_search_options_1.setChecked(True) self.action_search_options_2 = QtWidgets.QAction("Телефонные номера") self.action_search_options_2.setCheckable(True) self.action_search_options_3 = QtWidgets.QAction("Электронные почты и акк") self.action_search_options_3.setCheckable(True) self.group_action_1 = QtWidgets.QActionGroup(self.sub_menu_options_search) self.group_action_1.addAction(self.action_search_options_1) # добавление в groupbox self.group_action_1.addAction(self.action_search_options_2) self.group_action_1.addAction(self.action_search_options_3) self.sub_menu_options_search.addAction(self.action_search_options_1) # добавление в вложенное self.sub_menu_options_search.addAction(self.action_search_options_2) # меню self.sub_menu_options_search.addAction(self.action_search_options_3) self.menu_options.addMenu(self.sub_menu_options_search) # добавление в меню опции # настройка языка self.delimiter_2 = QtWidgets.QAction() self.delimiter_2.setSeparator(True) self.menu_options.addAction(self.delimiter_2) 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.menu_options.addMenu(self.language_menu) # настройка тем self.sub_menu_view_themes = QtWidgets.QMenu("Цветовая схема") self.view_theme_1 = QtWidgets.QAction("Тёмно-синяя тема") self.view_theme_1.setCheckable(True) self.view_theme_2 = QtWidgets.QAction("Светло-серая тема") self.view_theme_2.setCheckable(True) self.view_theme_2.setChecked(True) self.view_theme_3 = QtWidgets.QAction("Тёмно-коричневая тема") self.view_theme_3.setCheckable(True) self.group_action_5 = QtWidgets.QActionGroup(self.sub_menu_view_themes) self.group_action_5.addAction(self.view_theme_1) self.group_action_5.addAction(self.view_theme_2) self.group_action_5.addAction(self.view_theme_3) self.sub_menu_view_themes.addAction(self.view_theme_1) self.sub_menu_view_themes.addAction(self.view_theme_2) self.sub_menu_view_themes.addAction(self.view_theme_3) self.menu_view.addMenu(self.sub_menu_view_themes) # добавляем отдельное меню в главное меню self.menu.addMenu(self.menu_options) self.menu.addMenu(self.menu_view) self.menu.addMenu(self.menu_help) # датчики self.options_settings_status.triggered.connect(self.toggleMenu) # добавляем в окно self.setMenuBar(self.menu) def create_toolBar(self): self.toolBar = QtWidgets.QToolBar() self.action_back = QtWidgets.QAction("Вернуться назад") self.toolBar.addAction(self.action_back) self.addToolBar(self.toolBar) # функции для датчиков def toggleMenu(self, state): if state: self.statusBar().show() else: self.statusBar().hide() def clicked_button_1(self): widget = self.centralWidget.layout().itemAt(0).widget() self.centralWidget.layout().removeWidget(widget) widget.hide() self.window_1 = window_1.Page_find_numbers(self) self.action_back.triggered.connect(self.clicked_action_back) self.mainLayout.addWidget(self.window_1) def clicked_action_back(self): widget = self.centralWidget.layout().itemAt(0).widget() self.centralWidget.layout().removeWidget(widget) widget.hide() self.widget_main = self.create_page() self.mainLayout.addWidget(self.widget_main) if __name__ == '__main__': myappid = 'mycompany.myproduct.subproduct.version' ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid) app = QtWidgets.QApplication(sys.argv) app.setWindowIcon(QtGui.QIcon("settings\\bug.ico")) MainWindow = MainWindow() MainWindow.show() sys.exit(app.exec_())
window_1.py
Отслеживать
73.5k 110 110 золотых знаков 38 38 серебряных знаков 55 55 бронзовых знаков
задан 26 мая 2020 в 8:16
177 2 2 серебряных знака 7 7 бронзовых знаков
@Aleksandr предоставьте ваш пример, который вы хотите интернационализировать.
26 мая 2020 в 12:45
27 мая 2020 в 11:07
27 мая 2020 в 11:13
посоветуйте пожалуйста хорошие статьи, ни как не получается
27 мая 2020 в 20:00
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Я внес необходимые изменения в ваши программу и прокомментировал их.
Формирование файла ru-eng.ts . Введите: pylupdate5 main.py -ts ru-eng.ts
Эта команда означает вывод всего текста, который нужно перевести в программном коде main.py , в файл ru-eng.ts
Файл TS по сути является файлом XML . После запуска в каталоге проекта появится файл ru-eng.ts
MainWindowПерейти к поиску телефонных номеров и электронных почтОчиститьЗапустить
Использование Qt Linguist — linguist.exe Перевод выполняется в программном обеспечении Qt Linguist , которое находится в том же каталоге, что и Qt Assistant и Qt Designer . Введите: linguist.exe ru-eng.ts
Последовательность действий такая:
для каждой строки перевода выполняем 1 , 2 , 3
.
наконец, мы нажимаем Release (10) в меню File , чтобы получить сгенерированный файл ru-eng.qm , который мы используем в программе.
т.е. на выходе у нас бинарный файл ru-eng.qm и заполненный ru-eng.ts , который мы не используем в дальнейшем.
ru-eng.ts
MainWindowПерейти к поиску телефонных номеров и электронных почтGo to phone search numbers and emailsОчиститьClearЗапуститьRun
Все запускаем программу.
main.py
from PyQt5 import QtCore from PyQt5 import QtGui from PyQt5 import QtWidgets from PyQt5.QtCore import QTranslator, QEvent # +++ from PyQt5.QtWidgets import QApplication import window_1 import sys import ctypes import os class MainWindow(QtWidgets.QMainWindow): def __init__(self): QtWidgets.QMainWindow.__init__(self) # создание обьекта для построения меню (в другом классе) self.menuBar = QtWidgets.QMenuBar() # создание файла для сохранения натроек if os.name == "nt": # проверка на название системы self.CONFIG_FILE_NAME = 'settings\\config.ini' self.centralWidget = QtWidgets.QWidget() # создаём центральный виджет self.setCentralWidget(self.centralWidget) # ++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv self.window_1 = window_1.Page_find_numbers(self) # +++ . self.trans = QTranslator(self) # +++ . # ++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ self.mainLayout = QtWidgets.QVBoxLayout(self.centralWidget) # settings self.setFixedSize(640, 600) self.setWindowTitle(" B U G ") self.setWindowIcon(QtGui.QIcon("settings\\bug.ico")) # делаем сборку self.widget_main = self.create_page() self.mainLayout.addWidget(self.widget_main) self.create_menuBar() self.create_toolBar() # для строки состоянии 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 create_page(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) # датчики и события self.button_1.clicked.connect(self.clicked_button_1) # сделать главным комонентом в общем return self.widget_page # возращает def create_menuBar(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_in_options_settings_1 = QtWidgets.QMenu("Настройки") # настройки строки состояния self.options_settings_status = QtWidgets.QAction("Включить панель состояния") self.options_settings_status.setCheckable(True) self.options_settings_status.setChecked(True) self.sub_menu_in_options_settings_1.addAction(self.options_settings_status) self.menu_options.addMenu(self.sub_menu_in_options_settings_1) # настройки поиска self.sub_menu_options_search = QtWidgets.QMenu("Настройки поиска") self.action_search_options_1 = QtWidgets.QAction("Искать всё") self.action_search_options_1.setCheckable(True) self.action_search_options_1.setChecked(True) self.action_search_options_2 = QtWidgets.QAction("Телефонные номера") self.action_search_options_2.setCheckable(True) self.action_search_options_3 = QtWidgets.QAction("Электронные почты и акк") self.action_search_options_3.setCheckable(True) self.group_action_1 = QtWidgets.QActionGroup(self.sub_menu_options_search) self.group_action_1.addAction(self.action_search_options_1) # добавление в groupbox self.group_action_1.addAction(self.action_search_options_2) self.group_action_1.addAction(self.action_search_options_3) self.sub_menu_options_search.addAction(self.action_search_options_1) # добавление в вложенное self.sub_menu_options_search.addAction(self.action_search_options_2) # меню self.sub_menu_options_search.addAction(self.action_search_options_3) self.menu_options.addMenu(self.sub_menu_options_search) # добавление в меню опции # настройка языка self.delimiter_2 = QtWidgets.QAction() self.delimiter_2.setSeparator(True) self.menu_options.addAction(self.delimiter_2) 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.group_action_6.triggered.connect(self.clicked_language) # +++ . self.language_menu.addAction(self.language_english) self.language_menu.addAction(self.language_russian) self.menu_options.addMenu(self.language_menu) # настройка тем self.sub_menu_view_themes = QtWidgets.QMenu("Цветовая схема") self.view_theme_1 = QtWidgets.QAction("Тёмно-синяя тема") self.view_theme_1.setCheckable(True) self.view_theme_2 = QtWidgets.QAction("Светло-серая тема") self.view_theme_2.setCheckable(True) self.view_theme_2.setChecked(True) self.view_theme_3 = QtWidgets.QAction("Тёмно-коричневая тема") self.view_theme_3.setCheckable(True) self.group_action_5 = QtWidgets.QActionGroup(self.sub_menu_view_themes) self.group_action_5.addAction(self.view_theme_1) self.group_action_5.addAction(self.view_theme_2) self.group_action_5.addAction(self.view_theme_3) self.sub_menu_view_themes.addAction(self.view_theme_1) self.sub_menu_view_themes.addAction(self.view_theme_2) self.sub_menu_view_themes.addAction(self.view_theme_3) self.menu_view.addMenu(self.sub_menu_view_themes) # добавляем отдельное меню в главное меню self.menu.addMenu(self.menu_options) self.menu.addMenu(self.menu_view) self.menu.addMenu(self.menu_help) # датчики self.options_settings_status.triggered.connect(self.toggleMenu) # добавляем в окно self.setMenuBar(self.menu) # +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv def clicked_language(self, lang): if lang.text() == "English (en)": # здесь мы загружаем наши переводы из файла `ru-eng.qm` self.trans.load('ru-eng') # без расширения `qm` - . _app = QApplication.instance() _app.installTranslator(self.trans) else: _app = QApplication.instance() _app.removeTranslator(self.trans) # здесь мы должны прописать все что будем иереводить! # Внимание! т.к. мы подгружаем модуль window_1 с классом Page_find_numbers # и в нем также есть текст, который надо переводить, важно правильно указать объекты. # Например: self.window_1.button_clear. def retranslateUi(self): # 1 self.button_1.setText(QApplication.translate('MainWindow', 'Перейти к поиску телефонных\nномеров и электронных почт')) # . # vvvvvvvvvvvvvvvvvvvvvvvv self.window_1.button_clear.setText(QApplication.translate('MainWindow', 'Очистить')) self.window_1.button_find.setText(QApplication.translate('MainWindow', 'Запустить')) # . # и т.д. все что надо переводить # Если что-то не знаете как правильно записать, Qt Designer вам в помощь. # Создайте там нужный виджет и посмотрите метод `def retranslateUi(self, . ):` # нам нужно переопределить функцию события changeEvent(). # Всякий раз, когда язык интерфейса программы изменяется, вызывается функция события, # и в нем вызывается метод retranslateUi() для завершения обновления интерфейса. def changeEvent(self, event): # 2 if event.type() == QEvent.LanguageChange: self.retranslateUi() # ++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ def create_toolBar(self): self.toolBar = QtWidgets.QToolBar() self.action_back = QtWidgets.QAction("Вернуться назад") self.toolBar.addAction(self.action_back) self.addToolBar(self.toolBar) # функции для датчиков def toggleMenu(self, state): if state: self.statusBar().show() else: self.statusBar().hide() def clicked_button_1(self): widget = self.centralWidget.layout().itemAt(0).widget() self.centralWidget.layout().removeWidget(widget) widget.hide() # self.window_1 = window_1.Page_find_numbers(self) # --- self.window_1.show() # +++ self.action_back.triggered.connect(self.clicked_action_back) self.mainLayout.addWidget(self.window_1) def clicked_action_back(self): widget = self.centralWidget.layout().itemAt(0).widget() self.centralWidget.layout().removeWidget(widget) widget.hide() self.widget_main = self.create_page() self.mainLayout.addWidget(self.widget_main) # +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv # это важно, т.к. мы переключаемся между окнами ! if self.language_english.isChecked(): self.language_english.trigger() else: self.language_russian.trigger() # ++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ if __name__ == '__main__': myappid = 'mycompany.myproduct.subproduct.version' ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid) app = QtWidgets.QApplication(sys.argv) app.setWindowIcon(QtGui.QIcon("settings\\bug.ico")) MainWindow = MainWindow() MainWindow.show() sys.exit(app.exec_())