3. Установка Python 3
- Скачайте установщик Python 3 с официального сайта Python.
- Запустите установщик.
- ОБЯЗАТЕЛЬНО добавьте флажок «Добавить Python в переменную среды PATH»:
- Нажмите Install Now и ждите завершения установки.
- После установки интерпретатор должен быть доступен в системе по команде python или py -3.
4. Настройка Far Manager
Откройте Far Manager.
Настройка ассоциаций в Far
(чтобы при нажатии клавиши Enter над файлом запускалась компиляция этого файла в .exe-файл)
- В открытом окне Far нажмите на клавиатуре клавишу F9 (открыть меню), откройте вкладку Commands → File associations .
- Если (каким-то чудом!) ассоциация для файлов .cpp уже существует, можно попробовать её отредактировать. Если такой ассоциации нет, нажмтите Insert (вставить новую ассоциацию).
- В окошке для маски файла пропишите *.cpp (или *.py для Python) .
- В поле Execute command (used for Enter) нужно ввести саму команду компиляции файла. Для C++ по минимуму она должна выглядеть так: g++ -O2 -Wall -std=gnu++11 !.cpp -o !.exe , для Python всё проще: python !.py
- Убедитесь, что стоит крестик рядом с этим полем, потом нажмите OK .
- Далее нужно ОБЯЗАТЕЛЬНО сохранить изменения, иначе они обнулятся уже при закрытии Far (сохранение изменений/настроек — Shift + F9 ).
- Теперь можно убедиться, что при нажатии по Enter над любым .cpp-файлом ) происходит компиляция (или над .py-файлом происходит интерпретация), которую можно увидеть в консоли. При успешной компиляции должен появляться файлик с тем же именем, что и .cpp-файл, только с расширением .exe. При успешной интерпретации код из файла .py должен выполниться.
Настройка редактора
- F9 → Options → Editor Settings .
- Здесь можно включить довольно полезный для редактирования кода режим автоматической табуляции «Auto indent», настроить размер тябуляции, включить/отключить вертикальную полосу прокрутки справа, и многое другое.
- Нажмите ОК.
- Если внесённые изменения удовлетворительны — сохраните изменения сочетанием клавиш Shift + F9 .
5. Горячие клавиши
F9 — открыть настройки
Tab — переключаться между правой и левой панелями
Alt + F1 — выбрать устройство (диск, флешка) для левой панели; для правой надо жать F2 вместо F1
Shift + F4 — создать файл
F2 — (в редакторе файла) сохранить файл
F3 — открыть просмотр файла
F4 — открыть редактор файла (осторожно, лучше не открывать ОЧЕНЬ большие файлы вроде .exe-шников, изображений и т.п.)
F5 — скопировать файл (по умолчанию — из активной панели в директорию, открытую в неактивной панели)
F6 — переименовать файл/переместить файл
F7 — создать директорию (папку)
Ctrl + O — показать/скрыть консоль
Все горячие клавиши по ссылке
Данное руководство уходит корнями в народ КТП. Оно досталось Тане от Тимы.
Как скомпилировать python в файл .exe на Linux с pyinstaller?
Доброе время суток всем прогерам. Мне нужна помощь. Ситуация такая. Недавно начал изучать python. Если быть точнее, я сижу на Linux Mint 18 с установленными Python 2.7.12 и Python 3.5.2. Узнал такую тему, что файлы .py можно переиначивать в .exe (исполняемые файлы executable). Для этого установил себе pyinstaller. всё получается кроме одного. Вместо того, чтобы у меня получился файл блаблабла.exe у меня получается тупо файл без названия расширения, который никак не запустить. Наверное это файл ELF. Но как мне сделать настоящий EXEшник, работающий на винде?
Я использовал команду pyinstaller -F -w /путь к/файлу.py
В программе подключается tkinter
1 2 3 4 5 6 7 8 9 10 11 12
import tkinter # CONSTANTS WIDTH = 640 HEIGHT = 480 BG_COLOR = 'white' root = tkinter.Tk() root.title("Test Program") canvas = tkinter.Canvas(root, width=WIDTH, height=HEIGHT, bg=BG_COLOR) canvas.pack() root.mainloop()
Преобразование Python кода в исполняемые файлы Windows и Android

Сегодня рассмотрим способы преобразования обычного Python файла в исполняемый файл.
реклама
Исполняемый файл- это тип файла, который может быть установлен или активирован на устройстве без необходимости в дополнительном ПО или библиотеках. Преобразовав свой Python-скрипт в исполняемый файл exe/apk, вы защитите свой код от модификаций или прочтения, а также упростите работу с вашей программой.
Подготовка
Для начала я создам python скрипт для проверки его работоспособности после преобразования в исполняемый файл. Этот код рисует черный круг с помощью модуля turtle.
В исполняемый файл Windows
PyInstaller
реклама
Это один из популярных инструментов для создания исполняемых файлов из файлов Python. Он позволяет упаковать все зависимости вашего проекта в один исполняемый файл. Чтобы использовать PyInstaller, установите его с помощью команды в командной строке:
pip install pyinstaller
Теперь переходим в директорию с .py файлом
cd C:\Путь_к_папке
реклама
Наиболее часто используемые аргументы PyInstaller:
- —onefile или -F: Создает одиночный исполняемый файл, включая все зависимости.
- —onedir или -D: Создает исполняемый файл в виде набора файлов и папок, сохраняя зависимости в отдельной папке.
- —name или -n: Устанавливает имя исполняемого файла.
- —icon или -i: Устанавливает лого для исполняемого файла (должна быть в формате .ico).
- —noconsole или -w: Исполняемый файл будет запускаться без консольного окна (для скрытия консольного вывода).
- —add-data или -a: Добавляет дополнительные файлы или папки, которые должны быть включены в исполняемый файл.
- —exclude-module или -x: Исключает указанный модуль из упаковки.
- —-hidden-import или -p: Указывает модули, которые должны быть включены в упаковку, но не обнаружены автоматически.
Теперь давайте скомпилируем наш код в exe файл. Для этого прописываем команду:
pyinstaller файл.py
После завершения процесса появилось две папки: build и dist. Папка build используется программой для хранения временных данных, необходимых для сборки исполняемого файла. В папке dist хранится результат выполненной операции.
реклама
Собранный exe будет работать только в том случае, если находится в одной папке со всеми дополнительными файлами. Если его переместить или удалить доп. файлы, то он работать не будет.
Чтобы этого избежать можно использовать аргумент —onefile или -F
pyinstaller -F файл.py
PyInstaller собрал все доп. файлы в архив и теперь в папке dist находится только нужный нам exe файл. Его можно переместить, а папки build и dist удалить.
В исполняемый файл Android
Buildozer
Это инструмент, ориентированный на Linux дистрибутивы для автоматизации сборки и упаковки приложений Python для платформы Android. Если у вас Windows, то необходимо использовать WSL или другие виртуальные машины. Ваш python файл должен быть совместимым с Android. Buidozer позволяет создавать apk из файлов Python с минимальными усилиями. Для установки прописываем это в командной строке linux:
sudo apt update && sudo apt upgrade && sudo apt install -y git zip unzip openjdk-17-jdk python3-pip autoconf libtool pkg-config zlib1g-dev libncurses5-dev libncursesw5-dev libtinfo5 cmake libffi-dev libssl-dev && pip install buildozer
Теперь нужно создать .spec файл в котором будет храниться вся информация о приложении. Сначала перейдите в нужную директорию в командной строке.
buildozer init
Необходимо переименовать python файл в main.py. Открываем появивщийся buildozer.spec файл и переходим к настройке. Вот некоторые из наиболее часто используемых параметров, которые можно настроить:
- title — Название исполняемого файла.
- package.name — Имя пакета вашего исполняемого файла .
- package.domain — Доменное имя вашего приложения.
- source.dir — Путь к .py файлу.
- source.include_exts — Расширения файлов, которые должны быть включены в сборку.
- version — Версия исполняемого файла.
- requirements — Зависимости файла.
Прописываем эту команду для запуска сборки apk приложения:
buildozer android debug
В теории после сборки вы получите apk приложение. Но далеко не факт, что все получится без ошибок, с первого раза и получится вообще, ведь
Статья Пакуем Python в EXE
Всем известно что питон это интерпретируемый, а не компилируемый язык . И в первую очередь рассчитан для работы в командной строке. Тем не менее, существует много вариантов оформления кода в GUI при необходимости. Но сегодня речь пойдёт об упаковке программы в EXE.
Зачем вообще это надо? Да по сути и не надо в большинстве случаев. Но бывает, что вы написали или скопировали какую-нибудь интересную тулзу, и хотите с ней поделиться. Конечно, если у того, кому вы отправляете прогу есть Python, то проблем нет. А бывает, что человек не шарит совсем в кодинге, и как пользователь тоже не имеет установленного питона нужной версии.
Вот тогда и выручает упаковка файла или файлов в EXE. Такой файл будет запускаться и работать по клику мышки, всё очень просто.
Для сборки файлов в экзешник есть разные приложения. Я рассмотрю самый простой, без всяких заморочек, с которым разберётся любой новичок.
Convert to EXE
Ссылка скрыта от гостей
Распаковываем архив. Внутри папки будет конвертер, запускающийся по клику мышки.
Так, нам понадобится подопытный. Для этого я сотряпал простой текстовый редактор, который открывает файл, и после редактирования сохраняет его. Ну или просто в окне можно что-то написать и сохранить.
# -*- coding:utf -8 -*- __version__ = 'Version:1.0' from tkinter import * from tkinter import filedialog as fd root = Tk() root.title("Textedit " +str(__version__)) root.resizable(width=False, height=False) root.geometry("420x300+300+300") calculated_text = Text(root,height=15, width=50) def insertText(): file_name = fd.askopenfilename() f = open(file_name) s = f.read() calculated_text.insert(1.0, s) f.close() def extractText(): file_name = fd.asksaveasfilename(filetypes=(("TXT files", "*.txt"), ("HTML files", "*.html;*.htm"), ("All files", "*.*") )) f = open(file_name, 'w') s = calculated_text.get(1.0, END) f.write(s) f.close() def erase(): calculated_text.delete('1.0', END) b1 = Button(text="Открыть",command=insertText) b1.grid(row=3, column=0, sticky=E, padx=5, pady=8,) b2 = Button(text="Сохранить", command=extractText) b2.grid(row=3, column=1, sticky=E, padx=5, pady=8,) erase_button = Button(text="Очистить", command=erase) erase_button.grid(row=3, column=2, padx=35, pady=8, sticky="W") scrollb = Scrollbar(root, command=calculated_text.yview) scrollb.grid(row=4, column=4, sticky='nsew') calculated_text.grid(row=4, column=0, sticky='nsew', columnspan=3) calculated_text.configure(yscrollcommand=scrollb.set) root.mainloop()
Запускаем прогу, так она выглядит
Выставляем следующие настройки -windowed чтобы прога запускалась без консоли, название выходного файла, onefile чтобы сборка была в один файл, noupx уже стоит по умолчанию ибо сжатие не всегда прокатывает. Ну и собственно выбираете нужный файл питоновский, который будете упаковывать. Также есть возможность выбрать иконку для exe-шника, поддерживается только ICO.
Вот что получилось
Жмём Build, прога чуток поколдует, выдаст нам сообщение об успешной сборке.
После этого в папке с конвертором появятся 2 папки
В папке dist и будет лежать наш готовый дистрибутив в формате EXE. Переместите его куда угодно, а потом обе эти папки можно смело удалять. Теперь проверяем работоспособность выходного файла, кликнув на него.
P.S. Редактор писался второпях, там есть косячок — при сохранении файла, расширение само не ставится, нужно вручную писать. Если кто поправит, буду признателен. Мне уже некогда, уезжаю отдыхать на 2 недели сейчас, так что на форуме меня не будет это время.
Последнее редактирование: 03.06.2019
explorer
Pentest Group
Platinum
- Сообщения 1 093
- Реакции 2 506
товарищ Сухов
Green Team
13.01.2018 26 15
К сожалению более сложные программы собираются некорректно. Открытку из статьи Ваяем музыкальную открытку на Python этот гуёвый пайинсталлер собирает с размером 12700КВ. При запуске выскакивает ошибка:
, хотя при компиляции ошибок не возникает. Если копипастить строку команды сборки в терминал, то вывод такой:
F:\Python\Scripts>pyinstaller —clean —windowed —onefile —noupx 1.py
1333 INFO: PyInstaller: 3.4
1334 INFO: Python: 3.6.4
1334 INFO: Platform: Windows-8.1-6.3.9600-SP0
1336 INFO: wrote F:\Python\Scripts\1.spec
1338 INFO: UPX is not available.
1339 INFO: Removing temporary files and cleaning cache in C:\Users\Sergey\AppData\Roaming\pyinstall
1470 INFO: Extending PYTHONPATH with paths
[‘F:\\Python\\Scripts’, ‘F:\\Python\\Scripts’]
1471 INFO: checking Analysis
1472 INFO: Building Analysis because Analysis-00.toc is non existent
1472 INFO: Initializing module dependency graph.
1475 INFO: Initializing module graph hooks.
1499 INFO: Analyzing base_library.zip .
9180 INFO: running Analysis Analysis-00.toc
9194 INFO: Adding Microsoft.Windows.Common-Controls to dependent assemblies of final executable
required by f:\python\python.exe
10415 INFO: Caching module hooks.
10426 INFO: Analyzing F:\Python\Scripts\1.py
11850 INFO: Processing pre-find module path hook distutils
13680 INFO: Processing pre-find module path hook site
13699 INFO: site: retargeting to fake-dir ‘f:\\python\\lib\\site-packages\\PyInstaller\\fake-module
17772 INFO: Loading module hooks.
17773 INFO: Loading module hook «hook-distutils.py».
17803 INFO: Loading module hook «hook-encodings.py».
17956 INFO: Loading module hook «hook-lib2to3.py».
17966 INFO: Loading module hook «hook-pkg_resources.py».
18638 INFO: Processing pre-safe import module hook win32com
19219 INFO: Loading module hook «hook-pydoc.py».
19220 INFO: Loading module hook «hook-pygame.py».
19222 WARNING: Hidden import «pygame._view» not found!
19222 INFO: Loading module hook «hook-pythoncom.py».
19617 INFO: Loading module hook «hook-pywintypes.py».
20001 INFO: Loading module hook «hook-sysconfig.py».
20030 INFO: Loading module hook «hook-win32com.py».
21427 INFO: Loading module hook «hook-xml.dom.domreg.py».
21429 INFO: Loading module hook «hook-xml.py».
21432 INFO: Loading module hook «hook-_tkinter.py».
21722 INFO: checking Tree
21722 INFO: Building Tree because Tree-00.toc is non existent
21722 INFO: Building Tree Tree-00.toc
21812 INFO: checking Tree
21812 INFO: Building Tree because Tree-01.toc is non existent
21812 INFO: Building Tree Tree-01.toc
21870 INFO: Looking for ctypes DLLs
21905 INFO: Analyzing run-time hooks .
21916 INFO: Including run-time hook ‘pyi_rth_pkgres.py’
21933 INFO: Including run-time hook ‘pyi_rth_win32comgenpy.py’
21957 INFO: Including run-time hook ‘pyi_rth_multiprocessing.py’
21981 INFO: Including run-time hook ‘pyi_rth__tkinter.py’
21996 INFO: Looking for dynamic libraries
25243 INFO: Looking for eggs
25244 INFO: Using Python library f:\python\python36.dll
25244 INFO: Found binding redirects:
[]
25258 INFO: Warnings written to F:\Python\Scripts\build\1\warn-1.txt
25436 INFO: Graph cross-reference written to F:\Python\Scripts\build\1\xref-1.html
25594 INFO: checking PYZ
25596 INFO: Building PYZ because PYZ-00.toc is non existent
25596 INFO: Building PYZ (ZlibArchive) F:\Python\Scripts\build\1\PYZ-00.pyz
27475 INFO: Building PYZ (ZlibArchive) F:\Python\Scripts\build\1\PYZ-00.pyz completed successfully.
27499 INFO: checking PKG
27499 INFO: Building PKG because PKG-00.toc is non existent
27499 INFO: Building PKG (CArchive) PKG-00.pkg
36748 INFO: Building PKG (CArchive) PKG-00.pkg completed successfully.
36798 INFO: Bootloader f:\python\lib\site-packages\PyInstaller\bootloader\Windows-32bit\runw.exe
36798 INFO: checking EXE
36799 INFO: Building EXE because EXE-00.toc is non existent
36799 INFO: Building EXE from EXE-00.toc
36800 INFO: Appending archive to EXE F:\Python\Scripts\dist\1.exe
38017 INFO: Building EXE from EXE-00.toc completed successfully.
Размер собранного уже составляет 13827КВ. При запуске мелькает пустое окно приложения и закрывается. Файлы с картинкой и музыкой, разумеется, присутствуют.
Как же хорош мой любимый и родной С.
explorer
Platinum
05.08.2018 1 093 2 506
К сожалению более сложные программы собираются некорректно. Открытку из статьи Ваяем музыкальную открытку на Python этот гуёвый пайинсталлер собирает с размером 12700КВ. При запуске выскакивает ошибка
Ну вот я и вернулся с моря. Очень хорошо что есть баг, это заставило меня провести небольшое исследование по сборке файлов в EXE.
Для этого я прогнал разные ресурсы и выяснил по крайней мере 3 причины, по которым компилл не получается как надо.
Грабли, грабли, грабли.
1. Отсутствуют некоторые библиотеки dll в самой винде.
2. Присутствует скрытый импорт в модуле. В музыкальной открытке есть предупреждение: WARNING: Hidden import «pygame._view» not found!
Соответственно сборщик не может знать путей к нужному модулю.
3. Файл «моя программа.py» изначально не запускается двойным кликом мышки, а лишь через IDLE и т.п.
1 пункт решается просто — из лога копипастим название dll, гуглим, скачиваем нужную библиотеку и добавляем в system32.
2 пункт можно обойти заменой на схожий модуль ( а ведь всегда есть варианты), но не имеющий скрытый импорт.
3 Ну здесь даже если не будет ни одной ошибки или предупреждения, то сборка обречена на провал. И единственным выходом будет переписать код программы.
Наверняка и другие проблемы бывают, это лишь то что я увидел.
Вывод можно сделать следующий — не все программы корректно соберутся, и если какую-то программку очень нужно собрать в экзешник, придётся её перепиливать. И это может занять больше времени, чем изначальное написание.
P.S. Редактор писаласся в торопях, там есть косячок — при сохранении файла, расширение само не ставится, нужно вручную писать. Если кто поправит, буду признателен. Мне уже некогда, уезжаю отдыхать на 2 недели сейчас, так что на форуме меня не будет это время.
Так как за 2 недели никого не нашлось, кто поправил бы код, делаю это сам
Всё просто — аргумент ‘defaultextension’ не указал, всего лишь добавить его в функцию extractText нужно, получится так:
def extractText(): file_name = fd.asksaveasfilename(filetypes=(("TXT files", "*.txt"), ("HTML files", "*.html;*.htm"), ("All files", "*.*")),defaultextension='') f = open(file_name, 'w') s = calculated_text.get(1.0, END) f.write(s) f.close()
Теперь выбранное расширение подставляется к имени файла.
К сожалению более сложные программы собираются некорректно.
Более сложные программы можно собрать через другие тулзы. Правда работать чуток посложнее, больше телодвижений. Одна из программ cx_Freeze.
Сначала нужно установить wheel. В cmd вводим pip install wheel или pip3 install wheel
Ссылка скрыта от гостей
выбираем и скачиваем нужную версию cx_Freeze
Скачанный файлик кидаем в корень диска С и в cmd вводим команду:
pip install С:\cx_Freeze-5.1.1-cp36-cp36m-win32.whl (название своей версии, если оно отличается)
В каталоге с программой которую нужно скомпилировать создайте файл «setup.py» в который разместите код:
from cx_Freeze import setup, Executable setup( name = "название проги", version = "1.0", description = "описание - необязательно", executables = [Executable("free.py")] )
Последний этап — переходим в cmd в папку с программой, которую нужно упаковать и вводим команду python.exe setup.py build
При успешной сборке появится папка build, в которой и будет наш EXE.
К сожалению, в отличии от pyinstaller, сборка не будет в один файл, а будет куча библиотек и прочего, без которых экзешник работать не будет. По сути мы получим портабл версию. В этом минус. Плюс заключается в том, что настройки гибкие, и даже очень упрямые программы можно собрать этим инструментом.
Попробовал собрать открытку из темы Ваяем музыкальную открытку на Python со стандартным файлом setup.py ничего не получилось. Пришлось колдовать часа 1,5 чтобы решить все вопросы.
Сначала cx_Freeze ругалась на модуль tkinter, так как не могла найти пути к tcl8.6 и tk8.6. Вручную прописал, на этом трудности не закончились. Дальше захотелось ей dll-ок, тоже добавил. Вдоволь поизвращавшись, прога успешно собралась.
Однако бесячее окно с надписью от модуля pygame резало глаза
Ещё малость шаманских танцев с бубном и наши победили )))
import os from cx_Freeze import setup, Executable import sys os.environ['TCL_LIBRARY'] = 'c:/python36/tcl/tcl8.6' os.environ['TK_LIBRARY'] = 'c:/python36/tcl/tk8.6' buildOptions = dict( packages = [], excludes = [], include_files=['c:/python36/DLLs/tcl86t.dll', 'c:/python36/DLLs/tk86t.dll'] ) base = None if (sys.platform == "win32"): base = "Win32GUI" setup( name='codeby', version = '1.0', description = '', options = dict(build_exe = buildOptions),executables = [Executable("new 1.py", base=base)] )
Весь этот гемор я победил лишь из-за спортивного интереса
Кстати открытка с переписанным кодом в Pyinstaller тоже успешно собралась без всяких танцев с бубном
товарищ Сухов
Green Team
13.01.2018 26 15
Блестяще, просто блестяще. Спасибо, коллега, за подробную информацию и проделанную работу. Под такими упорными людьми прогнется любая система.
Какие же выводы мы можем сделать из всего этого? Главное, что напрашивается — Python все же мало пригоден в качестве компилируемого языка. Конечно он — совершенно гениальное изобретение ван Россума, с мощной и гибкой динамической типизацией, простым синтаксисом и просто гигантским набором библиотек. Язык прочно занял свою «нишу», обширную даже по сравнению с древними языками общего назначения. Но программист не должен зависеть от инструмента, а выбирать подходящий для конкретной задачи.
Примерно та же история была с Forthом. Чарльз Мур изобрел его для embedded-системы — системы управления телескопом. И Форт действительно хорош именно для встроенных систем: по сути это операционная система малого объема, которая позволяет расширить свой функционал в любом нужном направлении описанием прямо в ней новых типов и средств работы с ними. Но сколько ни пытались сделать Форт широко используемым — ничего у них не вышло. Я тоже пробовал разрабатывать на нем, но, как только добрался до механизмов манипуляции стеком возвратов, понял, что там можно сломать все копья и наломать дров, а результат будет зависеть от конкретной реализации.
PS Посмотрел тесты производительности на одном и том же железе для Java, Python и C (задача была на формирование и обсчет большой матрицы) и почти не удивился: первые два от 28 до 40 раз медленнее.
Kultiapin
Всем известно что питон это интерпретируемый, а не компилируемый язык . И в первую очередь рассчитан для работы в командной строке. Тем не менее, существует много вариантов оформления кода в GUI при необходимости. Но сегодня речь пойдёт об упаковке программы в EXE.
Зачем вообще это надо? Да по сути и не надо в большинстве случаев. Но бывает, что вы написали или скопировали какую-нибудь интересную тулзу, и хотите с ней поделиться. Конечно, если у того, кому вы отправляете прогу есть Python, то проблем нет. А бывает, что человек не шарит совсем в кодинге, и как пользователь тоже не имеет установленного питона нужной версии.
Вот тогда и выручает упаковка файла или файлов в EXE. Такой файл будет запускаться и работать по клику мышки, всё очень просто.
Для сборки файлов в экзешник есть разные приложения. Я рассмотрю самый простой, без всяких заморочек, с которым разберётся любой новичок.
Convert to EXE
Ссылка скрыта от гостей
Распаковываем архив. Внутри папки будет конвертер, запускающийся по клику мышки.
Так, нам понадобится подопытный. Для этого я сотряпал простой текстовый редактор, который открывает файл, и после редактирования сохраняет его. Ну или просто в окне можно что-то написать и сохранить.
# -*- coding:utf -8 -*- __version__ = 'Version:1.0' from tkinter import * from tkinter import filedialog as fd root = Tk() root.title("Textedit " +str(__version__)) root.resizable(width=False, height=False) root.geometry("420x300+300+300") calculated_text = Text(root,height=15, width=50) def insertText(): file_name = fd.askopenfilename() f = open(file_name) s = f.read() calculated_text.insert(1.0, s) f.close() def extractText(): file_name = fd.asksaveasfilename(filetypes=(("TXT files", "*.txt"), ("HTML files", "*.html;*.htm"), ("All files", "*.*") )) f = open(file_name, 'w') s = calculated_text.get(1.0, END) f.write(s) f.close() def erase(): calculated_text.delete('1.0', END) b1 = Button(text="Открыть",command=insertText) b1.grid(row=3, column=0, sticky=E, padx=5, pady=8,) b2 = Button(text="Сохранить", command=extractText) b2.grid(row=3, column=1, sticky=E, padx=5, pady=8,) erase_button = Button(text="Очистить", command=erase) erase_button.grid(row=3, column=2, padx=35, pady=8, sticky="W") scrollb = Scrollbar(root, command=calculated_text.yview) scrollb.grid(row=4, column=4, sticky='nsew') calculated_text.grid(row=4, column=0, sticky='nsew', columnspan=3) calculated_text.configure(yscrollcommand=scrollb.set) root.mainloop()
Запускаем прогу, так она выглядит
Посмотреть вложение 21795
Выставляем следующие настройки -windowed чтобы прога запускалась без консоли, название выходного файла, onefile чтобы сборка была в один файл, noupx уже стоит по умолчанию ибо сжатие не всегда прокатывает. Ну и собственно выбираете нужный файл питоновский, который будете упаковывать. Также есть возможность выбрать иконку для exe-шника, поддерживается только ICO.
Жмём Build, прога чуток поколдует, выдаст нам сообщение об успешной сборке.
Посмотреть вложение 21797
После этого в папке с конвертором появятся 2 папки
Посмотреть вложение 21798
В папке dist и будет лежать наш готовый дистрибутив в формате EXE. Переместите его куда угодно, а потом обе эти папки можно смело удалять. Теперь проверяем работоспособность выходного файла, кликнув на него.
Посмотреть вложение 21799
P.S. Редактор писаласся в торопях, там есть косячок — при сохранении файла, расширение само не ставится, нужно вручную писать. Если кто поправит, буду признателен. Мне уже некогда, уезжаю отдыхать на 2 недели сейчас, так что на форуме меня не будет это время.
Доброго времени суток!
Первый метод является удобным и крайне интересным, однако на такую простенькую программу как у меня, создает ехе размером 340мб. Есть ли какие пути оптимизации или от такого размера никуда не деться?
Заранее спасибо за ответ.
import pandas as pd import numpy as np if __name__ == '__main__': # read the data from excel file data = pd.read_excel('geology_specs.xlsx') # remember the values of the second row (part of header, which is not # recognized as header) in order to write it to the final .xlsx file second_row = data.iloc[0, :].values # drop the second row, because in the way that we have it (not being # the part of the header), it will impede further data processing data.drop(0, axis=0, inplace=True) # modify the column names (the header) in order to substitute "Unnamed" # values (which occurred because of the merged cells in the original file) # with the names of corresponding wellbores columns = data.columns columns_new = [] for i in range(len(columns)): col_name = columns[i] if col_name.split()[0] == 'Unnamed:': col_name = columns[i - 1] columns_new.append(col_name) data.columns = columns_new # write the resulting table to file data.to_excel('geology_specs_modified.xlsx', index=False) print("results are saved to file 'geology_specs_modified.xlsx'")
Вложения
16,6 КБ · Просмотры: 933
explorer
Platinum
05.08.2018 1 093 2 506
Первый метод является удобным и крайне интересным, однако на такую простенькую программу как у меня, создает ехе размером 340мб. Есть ли какие пути оптимизации или от такого размера никуда не деться?
Если не будете ставить галочку —noupx, то файл будет сжат.
Это самый сжатый вариант, какие-то крохи в размере можно выиграть убрав в коде комментарии. А через cx_Freeze размер будет гораздо больше. Большой размер обусловлен сбором как необходимых модулей, так и самого Python, что позволяет запускать EXE на машине без установленного питона и зависимостей.
St1fler
При запуске из папки просто закрывается файл.
Козак
Ребята помогите советом, совсем недавно начал самостоятельно изучать программирование, при создании ехе через cmd прописываю путь к папке ввожу pyinstaller название файла.py . Вроде бы как есть контакт захожу в созданную папку dict запускаю exe файл он открывается на пару секунд и сразу же закрывается лог сборки во вложении (Если кто знает объясните как можно доступней, новичку Заранее респект и уважуха)
Вложения
124,7 КБ · Просмотры: 640
89,9 КБ · Просмотры: 902
explorer
Platinum
05.08.2018 1 093 2 506
При запуске из папки просто закрывается файл.
он открывается на пару секунд и сразу же закрывается
Парни, у вас видимо просто программа отрабатывает и поэтому закрывается. В конце исходника перед сборкой напишите input() и тогда программа закрываться будет при нажатии enter
Другой вариант:
import time delay = 10 #время задержки в секундах; # ваш код time.sleep(delay)
Козак
если собираю так pyinstaller -F (имя).py
то при запуске окно открывается но просто черный квадрат, но по таймингу открыто столько сколько прописано в коде программы (10 секунд).
Если pyinstaller (имя).py
Всё также открылся прогнал какие то строки , закрылся (1-2 секунды)
Сама программа ни в первом ни во втором случаи не работает.
import time delay = 10 from tkinter import * import pyglet # Музыка(плеер) player = pyglet.media.Player() sound = pyglet.media.load('123.wav') player.queue(sound) # keep playing for as long as the app is running (or you tell it to stop): player.eos_action = pyglet.media.SourceGroup.loop player.play() # Расчет тотал как общего так и личного по командам def clicked(): tot = float(edit.get()) tot1 = float(edit1.get()) tot2 = float(edit2.get()) tot3 = float(edit3.get()) tot4 = float(edit4.get()) total1_team = (tot + tot1 + tot2 + tot3 + tot4) / 5 tot5 = float(edit5.get()) tot6 = float(edit6.get()) tot7 = float(edit7.get()) tot8 = float(edit8.get()) tot9 = float(edit9.get()) total2_team = (tot5 + tot6 + tot7 + tot8 + tot9) / 5 sum = (total1_team + total2_team) lb4.config(text='Тотал команды №1 \n равен %.2f очков' %(total1_team)) lb5.config(text='Тотал команды №2 \n равен %.2f очков' %(total2_team)) lb6.config(text='Средний тотал \n равен %.2f очков' %(sum)) window = Tk() window.title('Total Pro') window.geometry('600x400') window.resizable(False, False) lb1 = Label(window, text='Введите показания личных встреч', fg='black') lb1.config(font=('Verdana', 16)) lb1.pack() wallpaper = PhotoImage(file='aff.gif') l = Label(window, image=wallpaper) l.pack() lb2 = Label(window, text='Команда №1', fg='green') lb2.config(font=('Verdana', 12)) lb2.place(x=60, y=50) lb3 = Label(window, text='Команда №2', fg='green') lb3.config(font=('Verdana', 12)) lb3.place(x=430, y=50) edit = Entry(window, width=7) edit.place(relx=.20, rely=.25, anchor='c',bordermode=OUTSIDE) edit1 = Entry(window, width=7) edit1.place(relx=.20, rely=.35, anchor='c',bordermode=OUTSIDE) edit2 = Entry(window, width=7) edit2.place(relx=.20, rely=.45, anchor='c',bordermode=OUTSIDE) edit3 = Entry(window, width=7) edit3.place(relx=.20, rely=.55, anchor='c',bordermode=OUTSIDE) edit4 = Entry(window, width=7) edit4.place(relx=.20, rely=.65, anchor='c',bordermode=OUTSIDE) edit5 = Entry(window, width=7) edit5.place(relx=.82, rely=.25, anchor='c',bordermode=OUTSIDE) edit6 = Entry(window, width=7) edit6.place(relx=.82, rely=.35, anchor='c',bordermode=OUTSIDE) edit7 = Entry(window, width=7) edit7.place(relx=.82, rely=.45, anchor='c',bordermode=OUTSIDE) edit8 = Entry(window, width=7) edit8.place(relx=.82, rely=.55, anchor='c',bordermode=OUTSIDE) edit9 = Entry(window, width=7) edit9.place(relx=.82, rely=.65, anchor='c',bordermode=OUTSIDE) btn = Button(window, width=15, height=2, text='Расчитать', command=clicked) btn.place(relx=.41, rely=.75, bordermode=OUTSIDE) lb4 = Label(window, fg='green') lb4.config(font=('Verdana', 15)) lb4.place(x=16, y=300) lb5 = Label(window, fg='green') lb5.config(font=('Verdana', 15)) lb5.place(x=370, y=300) lb6 = Label(window, fg='green') lb6.config(font=('Verdana', 18)) lb6.place(x=180, y=100) window.mainloop time.sleep(delay)
acidmikk
Ну вот я и вернулся с моря. Очень хорошо что есть баг, это заставило меня провести небольшое исследование по сборке файлов в EXE.
Для этого я прогнал разные ресурсы и выяснил по крайней мере 3 причины, по которым компилл не получается как надо.
Грабли, грабли, грабли.
В общем помогло, но моя программа сразу сворачивается? как с этим можно бороться?
Ссылка скрыта от гостей
— ссылка на мой проект
Unnamed
One Level
07.03.2019 55 8
В архиве отсутствует exe файл который запускается по клику мыши
Moraes
qqlpp
New member
30.08.2019 1 0
Ребяяят я сделал проект голосовой ассистент, хотел перевести из .py в .exe, но когда я сделал pyinstaller’ом или как писали выше у меня вылетала cmd и через секундку закрывалась, можете помочь пожалуйста а то мне его через несколько дней сдавать.
#-*-coding: utf-8 -*- import sys from PyQt5.QtCore import Qt from PyQt5 import QtCore, QtGui, QtWidgets import speech_recognition as sr import os import webbrowser import sqlite3 from sqlite3 import dbapi2 as sqlite3 import pyttsx3 import time import datetime from random import choice from PyQt5.QtWidgets import QWidget, QApplication, QHBoxLayout, QLabel, QDialog from PyQt5.QtWidgets import QGraphicsScene, QGraphicsView, QGraphicsLinearLayout, QGraphicsWidget from PyQt5.QtGui import QMovie from PyQt5.QtWidgets import (QMainWindow, QCheckBox, QGridLayout, QSpacerItem, QSizePolicy, QPushButton, QLineEdit, QInputDialog) from PyQt5.QtCore import QCoreApplication, QSettings, QRect speak_engine = pyttsx3.init() candycash = 0 count_temp = 0 level = 1 message_candy = '' message_user = '' buy2 = "2000 CandyCash" interface = 0 login = "" password = "" game = "" count_candycash = 'Candycash: ' + str(candycash) def say(message): speak_engine.say( message ) speak_engine.runAndWait() speak_engine.stop() def data_base(): con = sqlite3.connect('CandyBase.db') cur = con.cursor() cur.execute('CREATE TABLE IF NOT EXISTS database(CandyCash REAL,' 'CandyLevel REAL,' 'Interface REAL)') cur.close() con.commit() class CandyMarket(QWidget): def __init__(self): super(CandyMarket, self).__init__() self.setWindowTitle('CandyMarket') self.setupUi(self) self.settings = QSettings('CandyAssistent', 'CandyCompany', self) self.loadSettings() def setupUi(self, Form): Form.setObjectName("Form") Form.resize(775, 452) Form.setStyleSheet("") self.label = QtWidgets.QLabel(Form) self.label.setGeometry(QtCore.QRect(310, 30, 261, 61)) self.label.setStyleSheet("QLabel ") self.label.setObjectName("label") self.pushButton = QtWidgets.QPushButton(Form) self.pushButton.setGeometry(QtCore.QRect(40, 140, 151, 261)) self.pushButton.setStyleSheet("") self.pushButton.setObjectName("pushButton") self.pushButton_2 = QtWidgets.QPushButton(Form) self.pushButton_2.setGeometry(QtCore.QRect(220, 140, 151, 261)) self.pushButton_2.setObjectName("pushButton_2") self.pushButton_3 = QtWidgets.QPushButton(Form) self.pushButton_3.setGeometry(QtCore.QRect(400, 140, 151, 261)) self.pushButton_3.setObjectName("pushButton_3") self.pushButton_4 = QtWidgets.QPushButton(Form) self.pushButton_4.setGeometry(QtCore.QRect(580, 140, 151, 261)) self.pushButton_4.setObjectName("pushButton_4") self.label_2 = QtWidgets.QLabel(Form) self.label_2.setGeometry(QtCore.QRect(30, 10, 731, 31)) self.label_2.setStyleSheet("QLabel ") self.label_2.setObjectName("label_2") self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "CandyMarket")) self.label.setText(_translate("Form", "CandyMarket")) self.pushButton.setText(_translate("Form", "Интерфейсы")) self.pushButton_2.setText(_translate("Form", "Голоса/Звуки")) self.pushButton_3.setText(_translate("Form", "Игры")) self.pushButton_4.setText(_translate("Form", ("CandyCash"))) self.label_2.setText(_translate("Form", "CandyCash:" + str(candycash))) self.pushButton.clicked.connect(self.interface_button) def interface_button(self): self.close() self.MI = MarketInterface() self.MI.show() def closeEvent(self, e): self.saveSettings() e.accept() def loadSettings(self): pass def saveSettings(self): global candycash global level global interface con = sqlite3.connect('CandyBase.db') cur = con.cursor() sql = "DELETE FROM database" cur.execute(sql) info_database = [str(candycash), str(level), str(interface)] cur.execute('INSERT INTO database VALUES(?, ?, ?)', info_database) con.commit() class MarketInterface(QWidget): def __init__(self): super(MarketInterface, self).__init__() self.setWindowTitle('CandyMarket') self.interfaces(self) self.settings = QSettings('CandyAssistent', 'CandyCompany', self) self.loadSettings() def interfaces(self, Form): Form.setObjectName("Form") Form.resize(773, 452) self.label = QtWidgets.QLabel(Form) self.label.setGeometry(QtCore.QRect(300, 10, 381, 101)) self.label.setStyleSheet("QLabel ") self.label.setObjectName("label") self.label_2 = QtWidgets.QLabel(Form) self.label_2.setGeometry(QtCore.QRect(330, 100, 141, 41)) self.label_2.setStyleSheet("QLabel ") self.label_2.setObjectName("label_2") self.pushButton = QtWidgets.QPushButton(Form) self.pushButton.setGeometry(QtCore.QRect(170, 180, 171, 231)) self.pushButton.setObjectName("pushButton") self.pushButton_2 = QtWidgets.QPushButton(Form) self.pushButton_2.setGeometry(QtCore.QRect(420, 180, 171, 231)) self.pushButton_2.setObjectName("pushButton_2") self.label_3 = QtWidgets.QLabel(Form) self.label_3.setGeometry(QtCore.QRect(230, 420, 131, 16)) self.label_3.setObjectName("label_3") self.label_4 = QtWidgets.QLabel(Form) self.label_4.setGeometry(QtCore.QRect(470, 420, 111, 16)) self.label_4.setObjectName("label_4") self.label_5 = QtWidgets.QLabel(Form) self.label_5.setGeometry(QtCore.QRect(30, 10, 731, 31)) self.label_5.setStyleSheet("QLabel ") self.label_5.setObjectName("label_5") self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): global candycash global buy2 _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "CandyMarket")) self.label.setText(_translate("Form", "CandyMarket")) self.label_2.setText(_translate("Form", "Интерфейсы")) self.pushButton.setText(_translate("Form", "Базовый интерфейс")) self.pushButton_2.setText(_translate("Form", "Интерфейс 1 уровня")) self.label_3.setText(_translate("Form", "КУПЛЕНО")) self.label_4.setText(_translate("Form", buy2)) self.label_5.setText(_translate("Form", "CandyCash:" + str(candycash))) self.pushButton.clicked.connect(self.interface1_button) self.pushButton_2.clicked.connect(self.interface2_button) def interface1_button(self): self.close() self.interface1 = Interface1() self.interface1.show() def interface2_button(self): global candycash global buy2 buy2 = 'КУПЛЕНО' if candycash >= 2000: candycash -= 2000 self.close() self.interface2 = Interface2() self.interface2.show() def closeEvent(self, e): self.saveSettings() e.accept() def loadSettings(self): pass def saveSettings(self): global candycash global level global interface con = sqlite3.connect('CandyBase.db') cur = con.cursor() sql = "DELETE FROM database" cur.execute(sql) info_database = [str(candycash), str(level), str(interface)] cur.execute('INSERT INTO database VALUES(?, ?, ?)', info_database) con.commit() class Interface2(QtWidgets.QMainWindow): def __init__(self): global interface global buy2 buy2 = 'КУПЛЕНО' interface = 2 super(Interface2, self).__init__() self.setWindowTitle('CandyAssistent') self.interface2_open(self) self.button_candy.clicked.connect(self.interface_operation) self.keyboard.clicked.connect(self.go_open_keyboard_interface) self.candymarket.clicked.connect(self.open_CandyMarket) self.settings = QSettings('CandyAssistent', 'CandyCompany', self) self.loadSettings() def interface2_open(self, Form): Form.setObjectName("Form") Form.resize(351, 550) Form.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor)) Form.setStyleSheet("QWidget ") self.button_candy = QtWidgets.QPushButton(Form) self.button_candy.setGeometry(QtCore.QRect(130, 440, 91, 91)) self.button_candy.setStyleSheet("QPushButton ") self.button_candy.setText("") icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap("logo_inter2.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.button_candy.setIcon(icon) self.button_candy.setIconSize(QtCore.QSize(100, 100)) self.button_candy.setObjectName("button_candy") self.pushButton_2 = QtWidgets.QPushButton(Form) self.pushButton_2.setGeometry(QtCore.QRect(10, 10, 41, 41)) self.pushButton_2.setStyleSheet("QPushButton ") self.pushButton_2.setText("") icon1 = QtGui.QIcon() icon1.addPixmap(QtGui.QPixmap("candycash_logo.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton_2.setIcon(icon1) self.pushButton_2.setIconSize(QtCore.QSize(40, 40)) self.pushButton_2.setObjectName("pushButton_2") self.keyboard = QtWidgets.QPushButton(Form) self.keyboard.setGeometry(QtCore.QRect(270, 490, 61, 51)) self.keyboard.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor)) self.keyboard.setStyleSheet("QPushButton ") self.keyboard.setText("") icon2 = QtGui.QIcon() icon2.addPixmap(QtGui.QPixmap("logo_keyboard.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.keyboard.setIcon(icon2) self.keyboard.setIconSize(QtCore.QSize(50, 50)) self.keyboard.setObjectName("keyboard") self.candymarket = QtWidgets.QPushButton(Form) self.candymarket.setGeometry(QtCore.QRect(20, 490, 61, 51)) self.candymarket.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor)) self.candymarket.setStyleSheet("QPushButton ") self.candymarket.setText("") icon3 = QtGui.QIcon() icon3.addPixmap(QtGui.QPixmap("logo_candymarket.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.candymarket.setIcon(icon3) self.candymarket.setIconSize(QtCore.QSize(50, 50)) self.candymarket.setObjectName("candymarket") self.label = QtWidgets.QLabel(Form) self.label.setGeometry(QtCore.QRect(60, 20, 101, 21)) self.label.setObjectName("label") self.pushButton_5 = QtWidgets.QPushButton(Form) self.pushButton_5.setGeometry(QtCore.QRect(180, 10, 61, 51)) self.pushButton_5.setStyleSheet("QPushButton ") self.pushButton_5.setText("") icon4 = QtGui.QIcon() icon4.addPixmap(QtGui.QPixmap("logo_lvl.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton_5.setIcon(icon4) self.pushButton_5.setIconSize(QtCore.QSize(50, 50)) self.pushButton_5.setObjectName("pushButton_5") self.label_2 = QtWidgets.QLabel(Form) self.label_2.setGeometry(QtCore.QRect(250, 20, 91, 21)) self.label_2.setObjectName("label_2") self.textEdit = QtWidgets.QTextEdit(Form) self.textEdit.setGeometry(QtCore.QRect(20, 70, 311, 361)) self.textEdit.setObjectName("textEdit") self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): global level global candycash _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "CandyAssistent")) self.label.setText(_translate("Form", str(candycash))) self.textEdit.setReadOnly(True) self.label_2.setText(_translate("Form", str(level))) def open_CandyMarket(self): global message_user message_user = "открой candy market" Program_operation.answere_candy(self, message_user) def go_open_keyboard_interface(self): self.close() self.interface2_keyboard_open = Interface2_keyboard() self.interface2_keyboard_open.show() def interface_operation(self): global count_temp global candycash global message_user global message_candy self.button_candy.setEnabled(False) self.keyboard.setEnabled(False) self.candymarket.setEnabled(False) Program_operation() self.user_message() Program_operation.answere_candy(self, message_user) self.candy_message() self.button_candy.setEnabled(True) self.keyboard.setEnabled(True) self.candymarket.setEnabled(True) if "вв" and 'код разработчика' in message_user: self.creatorCode_win() elif 'давайте поиграем' in message_user or 'давай поиграем' in message_user and ('камень ножницы бумага' in message_user or 'камень-ножницы бумага' in message_user or 'камень ножницы-бумага' in message_user or 'камень-ножницы-бумага' in message_user): self.button_candy.setEnabled(False) self.keyboard.setEnabled(False) self.candymarket.setEnabled(False) message_user = 'да' message_candy = 'Объясню вам правила: Вы выбираете либо камень, либо ножницы, либо бумагу. После этого делает выбор Candy. Ножницы сильнее бумаги, камень сильнее ножниц, а бумага сильнее камня.' self.candy_message() say(message_candy) while ('да' in message_user or 'конечно' in message_user or 'естественно' in message_user) and 'нет' not in message_user: message_candy = 'Делайте выбор.' self.candy_message() say(message_candy) Program_operation() self.user_message() choice_candy = choice(['ножницы', 'камень', 'бумага']) say("А у меня " + choice_candy + ".") message_candy = "А у меня " + choice_candy + "." self.candy_message() Program_operation.game_knb_for_lvl(self, choice_candy) self.candy_message() self.level_print() message_candy = 'Играем дальше?' self.candy_message() say(message_candy) Program_operation() if 'не' in message_user: message_candy = "Было приятно с вами играть." self.candy_message() say(message_candy) self.button_candy.setEnabled(True) self.keyboard.setEnabled(True) self.candymarket.setEnabled(True) elif ('поиграем' in message_user or "игр" in message_user or "сыграть" in message_user or "сыграем" in message_user) and (("ор" in message_user and "реш" in message_user) or ("реш" in message_user and "ор" in message_user)): self.button_candy.setEnabled(False) self.keyboard.setEnabled(False) self.candymarket.setEnabled(False) message_candy = "Вас приветствует игра орёл и решка. Вам доступно несколько режимов:" self.candy_message() say(message_candy) message_candy = "Первый: Режим новичка. За выигрыш вы получите 10 CandyCash." self.candy_message() say(message_candy) message_candy = "Второй: Режим любителя. За выигрыш вы получте 100 CandyCash, а за проигрыш вы потеряете 50 CandyCash." self.candy_message() say(message_candy) message_candy = "Третий: Режим опытного игрока. За выигрыш вы получите 300 CandyCash, а за проигрыш вы потеряете 150 CandyCash." self.candy_message() say(message_candy) message_candy = "Четвёртый: Режим эксперта. За выигрыш вы получите 500 CandyCash, а за проигрыш вы потеряете 250 CandyCash." self.candy_message() say(message_candy) say("Выбирайте.") Program_operation() self.user_message() while count_temp == 0: if "1" in message_user or "первый" in message_user or "один" in message_user or "режим новичка" in message_user or "нович" in message_user: candycashPlus = 10 self.user_message() count_temp = 1 elif "2" in message_user or "второй" in message_user or "два" in message_user or "режим любителя" in message_user or "любит" in message_user: self.user_message() candycashPlus = 100 count_temp = 1 elif "3" in message_user or "третий" in message_user or "три" in message_user or "режим опытного" in message_user or "опыт" in message_user: candycashPlus = 300 count_temp = 1 self.user_message() elif "4" in message_user or "четвёртый" in message_user or "четыре" in message_user or "режим эксперта" in message_user or "экс" in message_user: candycashPlus = 500 count_temp = 1 self.user_message() else: message_candy = "Такого режима ещё нет, если вы передумали играть то скажите прекратить игру. Для продолжения называйте режим." say(message_candy) self.candy_message() Program_operation() self.user_message() if 'прекр' in message_user and "иг" in message_user: count_temp = 2 self.button_candy.setEnabled(True) Interface2() if count_temp != 2: message_candy = "Объясню вам правила: У вас есть выбор между орлом и решкой. После этого Candy бросает монетку. Если ваш ответ совпал со стороной монетки то вы получите CandyCash, иначе вы его потеряете." self.candy_message() say(message_candy) if candycash >= (candycashPlus / 2) or candycashPlus == 10: message_user = 'да' while ('да' in message_user or 'конечно' in message_user or 'естественно' in message_user) and 'нет' not in message_user: message_candy = 'Орёл или решка?' self.candy_message() say(message_candy) Program_operation() self.user_message() if "ор" in message_user or "реш" in message_user: self.user_message() choice_candy = choice(['орёл', 'решка']) if choice_candy == "орёл": message_candy = "Выпал орёл." else: message_candy = "Выпала решка." self.candy_message() say(message_candy) Program_operation.game_orel_and_reshka_for_cc(self, candycashPlus, choice_candy) self.candy_message() self.candycash_print() message_candy = 'Играем дальше?' self.candy_message() say(message_candy) Program_operation() self.user_message() if ('да' in message_user or 'конечно' in message_user or 'естественно' in message_user) and 'нет' not in message_user: message_user = "да" else: message_candy = "Было приятно с вами играть." self.candy_message() say(message_candy) self.button_candy.setEnabled(True) self.keyboard.setEnabled(True) self.candymarket.setEnabled(True) else: message_user = "да" else: message_candy = "Что бы начать игру вам не хватает CandyCash. Вы можете купить его у разработчика (2 CandyCash = 1 рубль) в директе () или во Вконтакте (). Ну или просто сыграть в режим новичка." self.candy_message() say(message_candy) self.button_candy.setEnabled(True) self.keyboard.setEnabled(True) self.candymarket.setEnabled(True) def creatorCode_win(self): global candycash global message_user global creator global level text, ok = QInputDialog.getText(self, 'CreatorCode', 'Введите код разработчика: ') if ok: if text == 'Q5du7cc4opEQ1189': candycash = 999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 level = 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 say('Код верный!') creator = True self.candycash_print() self.level_print() else: say('Код неверный!') def candycash_print(self): global candycash self.label.setText(str(candycash)) def level_print(self): global level self.label_2.setText(str(level)) def candy_message(self): global message_candy text = 'Candy: ' + message_candy self.textEdit.append(text) def user_message(self): global message_user txt = message_user[0].upper() + message_user[1:] text = 'You: ' + txt self.textEdit.append(text) def closeEvent(self, e): self.saveSettings() e.accept() def loadSettings(self): if self.settings.contains('geometry'): self.setGeometry(self.settings.value('geometry')) def saveSettings(self): global candycash global level global interface self.settings.setValue('geometry', self.geometry()) con = sqlite3.connect('CandyBase.db') cur = con.cursor() sql = "DELETE FROM database" cur.execute(sql) info_database = [str(candycash), str(level), str(interface)] cur.execute('INSERT INTO database VALUES(?, ?, ?)', info_database) con.commit() class Interface2_keyboard(QWidget): def __init__(self): super().__init__() self.setWindowTitle('CandyAssistent') self.open_win_keyboard_interface2(self) self.button_candy.clicked.connect(self.go_open_interface) self.pushButton.clicked.connect(self.go_text) self.candymarket.clicked.connect(self.open_CandyMarket) self.settings = QSettings('CandyAssistent', 'CandyCompany', self) self.loadSettings() def open_win_keyboard_interface2(self, Form): Form.setObjectName("Form") Form.resize(351, 550) Form.setStyleSheet("QWidget ") self.candymarket = QtWidgets.QPushButton(Form) self.candymarket.setGeometry(QtCore.QRect(20, 490, 61, 51)) self.candymarket.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor)) self.candymarket.setStyleSheet("QPushButton ") self.candymarket.setText("") icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap("logo_candymarket.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.candymarket.setIcon(icon) self.candymarket.setIconSize(QtCore.QSize(50, 50)) self.candymarket.setObjectName("candymarket") self.pushButton_2 = QtWidgets.QPushButton(Form) self.pushButton_2.setGeometry(QtCore.QRect(10, 10, 41, 41)) self.pushButton_2.setStyleSheet("QPushButton ") self.pushButton_2.setText("") icon1 = QtGui.QIcon() icon1.addPixmap(QtGui.QPixmap("candycash_logo.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton_2.setIcon(icon1) self.pushButton_2.setIconSize(QtCore.QSize(40, 40)) self.pushButton_2.setObjectName("pushButton_2") self.button_candy = QtWidgets.QPushButton(Form) self.button_candy.setGeometry(QtCore.QRect(280, 490, 51, 51)) self.button_candy.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor)) self.button_candy.setStyleSheet("QPushButton ") self.button_candy.setText("") icon2 = QtGui.QIcon() icon2.addPixmap(QtGui.QPixmap("logo_inter2.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.button_candy.setIcon(icon2) self.button_candy.setIconSize(QtCore.QSize(50, 50)) self.button_candy.setObjectName("button_candy") self.label = QtWidgets.QLabel(Form) self.label.setGeometry(QtCore.QRect(60, 20, 101, 21)) self.label.setObjectName("label") self.label_2 = QtWidgets.QLabel(Form) self.label_2.setGeometry(QtCore.QRect(250, 20, 91, 21)) self.label_2.setObjectName("label_2") self.pushButton_5 = QtWidgets.QPushButton(Form) self.pushButton_5.setGeometry(QtCore.QRect(180, 10, 61, 51)) self.pushButton_5.setStyleSheet("QPushButton ") self.pushButton_5.setText("") icon3 = QtGui.QIcon() icon3.addPixmap(QtGui.QPixmap("logo_lvl.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton_5.setIcon(icon3) self.pushButton_5.setIconSize(QtCore.QSize(50, 50)) self.pushButton_5.setObjectName("pushButton_5") self.lineEdit = QtWidgets.QLineEdit(Form) self.lineEdit.setGeometry(QtCore.QRect(70, 440, 171, 31)) self.lineEdit.setStyleSheet("QLineEdit ") self.lineEdit.setObjectName("lineEdit") self.pushButton = QtWidgets.QPushButton(Form) self.pushButton.setGeometry(QtCore.QRect(250, 430, 41, 51)) self.pushButton.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor)) self.pushButton.setStyleSheet("QPushButton ") self.pushButton.setText("") icon4 = QtGui.QIcon() icon4.addPixmap(QtGui.QPixmap("logo_go_mes.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton.setIcon(icon4) self.pushButton.setIconSize(QtCore.QSize(300, 300)) self.pushButton.setObjectName("pushButton") self.line = QtWidgets.QFrame(Form) self.line.setGeometry(QtCore.QRect(60, 480, 240, 3)) self.line.setFrameShape(QtWidgets.QFrame.HLine) self.line.setFrameShadow(QtWidgets.QFrame.Sunken) self.line.setObjectName("line") self.line_3 = QtWidgets.QFrame(Form) self.line_3.setGeometry(QtCore.QRect(60, 430, 240, 3)) self.line_3.setFrameShape(QtWidgets.QFrame.HLine) self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_3.setObjectName("line_3") self.line_2 = QtWidgets.QFrame(Form) self.line_2.setGeometry(QtCore.QRect(60, 430, 3, 50)) self.line_2.setFrameShape(QtWidgets.QFrame.VLine) self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_2.setObjectName("line_2") self.line_4 = QtWidgets.QFrame(Form) self.line_4.setGeometry(QtCore.QRect(300, 430, 3, 50)) self.line_4.setFrameShape(QtWidgets.QFrame.VLine) self.line_4.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_4.setObjectName("line_4") self.line_5 = QtWidgets.QFrame(Form) self.line_5.setGeometry(QtCore.QRect(240, 430, 3, 50)) self.line_5.setFrameShape(QtWidgets.QFrame.VLine) self.line_5.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_5.setObjectName("line_5") self.textEdit = QtWidgets.QTextEdit(Form) self.textEdit.setGeometry(QtCore.QRect(20, 70, 311, 341)) self.textEdit.setObjectName("textEdit") self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): global level global candycash _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "CandyAssistent")) self.textEdit.setReadOnly(True) self.label.setText(_translate("Form", str(candycash))) self.label_2.setText(_translate("Form", str(level))) def open_CandyMarket(self): global message_user message_user = "открой candy market" Program_operation.answere_candy(self, message_user) def go_open_interface(self): self.close() self.interface2_open = Interface2() self.interface2_open.show() def go_text(self): global message_user self.button_candy.setEnabled(False) self.candymarket.setEnabled(False) self.pushButton.setEnabled(False) message_user = self.lineEdit.text() message_user = message_user.lower() self.lineEdit.setText('') self.interface_operation() def goText(self): global message_user message_user = self.lineEdit.text() message_user = message_user.lower() self.lineEdit.setText('') def interface_operation(self): global count_temp global candycash global message_user global message_candy self.user_message() Program_operation.answere_candy(self, message_user) self.candy_message() self.button_candy.setEnabled(True) self.candymarket.setEnabled(True) self.pushButton.setEnabled(True) if "вв" and 'код разработчика' in message_user: self.creatorCode_win() def creatorCode_win(self): global candycash global message_user global creator global level text, ok = QInputDialog.getText(self, 'CreatorCode', 'Введите код разработчика: ') if ok: if text == 'Q5du7cc4opEQ1189': candycash = 999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 level = 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 say('Код верный!') creator = True self.candycash_print() self.level_print() else: say('Код неверный!') def candycash_print(self): global candycash self.label.setText(str(candycash)) def level_print(self): global level self.label_2.setText(str(level)) def candy_message(self): global message_candy text = 'Candy: ' + message_candy self.textEdit.append(text) def user_message(self): global message_user txt = message_user[0].upper() + message_user[1:] text = 'You: ' + txt self.textEdit.append(text) def closeEvent(self, e): self.saveSettings() e.accept() def loadSettings(self): if self.settings.contains('geometry'): self.setGeometry(self.settings.value('geometry')) def saveSettings(self): global candycash global level global interface con = sqlite3.connect('CandyBase.db') cur = con.cursor() sql = "DELETE FROM database" cur.execute(sql) info_database = [str(candycash), str(level), str(interface)] cur.execute('INSERT INTO database VALUES(?, ?, ?)', info_database) con.commit() class Interface1(QtWidgets.QMainWindow): def __init__(self, parent=None): global candycash super().__init__() self.setupUi(self) self.candycash_print() self.level_print() self.pushButton.clicked.connect(self.interface_operation) self.settings = QSettings('CandyAssistent', 'CandyCompany', self) self.loadSettings() def setupUi(self, Form): Form.setObjectName("Form") Form.resize(331, 551) Form.setStyleSheet("QWidget ") self.label_2 = QtWidgets.QLabel(Form) self.label_2.setGeometry(QtCore.QRect(10, 0, 331, 51)) self.label_2.setObjectName("label_2") self.pushButton = QtWidgets.QPushButton(Form) self.pushButton.setGeometry(QtCore.QRect(60, 420, 221, 91)) self.pushButton.setStyleSheet("QPushButton ") self.pushButton.setObjectName("pushButton") self.line = QtWidgets.QFrame(Form) self.line.setGeometry(QtCore.QRect(-13, 510, 391, 20)) self.line.setStyleSheet("") self.line.setFrameShape(QtWidgets.QFrame.HLine) self.line.setFrameShadow(QtWidgets.QFrame.Sunken) self.line.setObjectName("line") self.line_2 = QtWidgets.QFrame(Form) self.line_2.setGeometry(QtCore.QRect(0, 40, 351, 16)) self.line_2.setFrameShape(QtWidgets.QFrame.HLine) self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_2.setObjectName("line_2") self.label_3 = QtWidgets.QLabel(Form) self.label_3.setGeometry(QtCore.QRect(150, 80, 51, 51)) self.label_3.setStyleSheet("QLabel ") self.label_3.setObjectName("label_3") self.label_4 = QtWidgets.QLabel(Form) self.label_4.setGeometry(QtCore.QRect(130, 360, 71, 31)) self.label_4.setStyleSheet("QLabel ") self.label_4.setObjectName("label_4") self.line_3 = QtWidgets.QFrame(Form) self.line_3.setGeometry(QtCore.QRect(30, 410, 271, 20)) self.line_3.setFrameShape(QtWidgets.QFrame.HLine) self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_3.setObjectName("line_3") self.label_5 = QtWidgets.QLabel(Form) self.label_5.setGeometry(QtCore.QRect(170, 230, 151, 111)) self.label_5.setText("") self.label_5.setPixmap(QtGui.QPixmap("img_message2.png")) self.label_5.setObjectName("label_5") self.label_6 = QtWidgets.QLabel(Form) self.label_6.setGeometry(QtCore.QRect(20, 140, 141, 121)) self.label_6.setText("") self.label_6.setPixmap(QtGui.QPixmap("img_message.png")) self.label_6.setObjectName("label_6") self.textBrowser = QtWidgets.QTextBrowser(Form) self.textBrowser.setGeometry(QtCore.QRect(180, 240, 121, 61)) self.textBrowser.setStyleSheet("QTextBrowser") self.textBrowser.setObjectName("textBrowser") self.textBrowser_2 = QtWidgets.QTextBrowser(Form) self.textBrowser_2.setGeometry(QtCore.QRect(30, 180, 121, 61)) self.textBrowser_2.setStyleSheet("QTextBrowser ") self.textBrowser_2.setObjectName("textBrowser_2") self.label_7 = QtWidgets.QLabel(Form) self.label_7.setGeometry(QtCore.QRect(10, 525, 331, 21)) self.label_7.setObjectName("label_7") self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "CandyAssistent")) self.label_2.setText(_translate("Form", "Candycash:")) self.pushButton.setText(_translate("Form", "CANDY")) self.label_3.setText(_translate("Form", "YOU")) self.label_4.setText(_translate("Form", "CANDY")) self.label_7.setText(_translate("Form", "Level: ")) def interface_operation(self): global count_temp global candycash global message_user global message_candy self.pushButton.setEnabled(False) Program_operation() self.user_message() Program_operation.answere_candy(self, message_user) self.candy_message() self.pushButton.setEnabled(True) if "вв" and 'код разработчика' in message_user: self.creatorCode_win() elif 'давайте поиграем' in message_user or 'давай поиграем' in message_user and ('камень ножницы бумага' in message_user or 'камень-ножницы бумага' in message_user or 'камень ножницы-бумага' in message_user or 'камень-ножницы-бумага' in message_user): self.pushButton.setEnabled(False) message_user = 'да' message_candy = 'Объясню вам правила: Вы выбираете либо камень, либо ножницы, либо бумагу. После этого делает выбор Candy. Ножницы сильнее бумаги, камень сильнее ножниц, а бумага сильнее камня.' self.candy_message() say(message_candy) while ('да' in message_user or 'конечно' in message_user or 'естественно' in message_user) and 'нет' not in message_user: message_candy = 'Делайте выбор.' self.candy_message() say(message_candy) Program_operation() self.user_message() choice_candy = choice(['ножницы', 'камень', 'бумага']) say("А у меня " + choice_candy + ".") message_candy = "А у меня " + choice_candy + "." self.candy_message() Program_operation.game_knb_for_lvl(self, choice_candy) self.candy_message() self.level_print() message_candy = 'Играем дальше?' self.candy_message() say(message_candy) Program_operation() if 'не' in message_user: message_candy = "Было приятно с вами играть." self.candy_message() say(message_candy) self.pushButton.setEnabled(True) elif ('поиграем' in message_user or "игр" in message_user or "сыграть" in message_user or "сыграем" in message_user) and (("ор" in message_user and "реш" in message_user) or ("реш" in message_user and "ор" in message_user)): self.pushButton.setEnabled(False) message_candy = "Вас приветствует игра орёл и решка. Вам доступно несколько режимов:" self.candy_message() say(message_candy) message_candy = "Первый: Режим новичка. За выигрыш вы получите 10 CandyCash." self.candy_message() say(message_candy) message_candy = "Второй: Режим любителя. За выигрыш вы получте 100 CandyCash, а за проигрыш вы потеряете 50 CandyCash." self.candy_message() say(message_candy) message_candy = "Третий: Режим опытного игрока. За выигрыш вы получите 300 CandyCash, а за проигрыш вы потеряете 150 CandyCash." self.candy_message() say(message_candy) message_candy = "Четвёртый: Режим эксперта. За выигрыш вы получите 500 CandyCash, а за проигрыш вы потеряете 250 CandyCash." self.candy_message() say(message_candy) say("Выбирайте.") Program_operation() self.user_message() while count_temp == 0: if "1" in message_user or "первый" in message_user or "один" in message_user or "режим новичка" in message_user or "нович" in message_user: candycashPlus = 10 self.user_message() count_temp = 1 elif "2" in message_user or "второй" in message_user or "два" in message_user or "режим любителя" in message_user or "любит" in message_user: self.user_message() candycashPlus = 100 count_temp = 1 elif "3" in message_user or "третий" in message_user or "три" in message_user or "режим опытного" in message_user or "опыт" in message_user: candycashPlus = 300 count_temp = 1 self.user_message() elif "4" in message_user or "четвёртый" in message_user or "четыре" in message_user or "режим эксперта" in message_user or "экс" in message_user: candycashPlus = 500 count_temp = 1 self.user_message() else: message_candy = "Такого режима ещё нет, если вы передумали играть то скажите прекратить игру. Для продолжения называйте режим." say(message_candy) self.candy_message() Program_operation() self.user_message() if 'прекр' in message_user and "иг" in message_user: count_temp = 2 self.pushButton.setEnabled(True) Interface1() if count_temp != 2: message_candy = "Объясню вам правила: У вас есть выбор между орлом и решкой. После этого Candy бросает монетку. Если ваш ответ совпал со стороной монетки то вы получите CandyCash, иначе вы его потеряете." self.candy_message() say(message_candy) if candycash >= (candycashPlus / 2) or candycashPlus == 10: message_user = 'да' while ('да' in message_user or 'конечно' in message_user or 'естественно' in message_user) and 'нет' not in message_user: message_candy = 'Орёл или решка?' self.candy_message() say(message_candy) Program_operation() self.user_message() if "ор" in message_user or "реш" in message_user: self.user_message() choice_candy = choice(['орёл', 'решка']) if choice_candy == "орёл": message_candy = "Выпал орёл." else: message_candy = "Выпала решка." self.candy_message() say(message_candy) Program_operation.game_orel_and_reshka_for_cc(self, candycashPlus, choice_candy) self.candy_message() self.candycash_print() message_candy = 'Играем дальше?' self.candy_message() say(message_candy) Program_operation() self.user_message() if ('да' in message_user or 'конечно' in message_user or 'естественно' in message_user) and 'нет' not in message_user: message_user = "да" else: message_candy = "Было приятно с вами играть." self.candy_message() say(message_candy) self.pushButton.setEnabled(True) else: message_user = "да" else: message_candy = "Что бы начать игру вам не хватает CandyCash. Вы можете купить его у разработчика (2 CandyCash = 1 рубль) в директе () или во Вконтакте (). Ну или просто сыграть в режим новичка." self.candy_message() say(message_candy) self.pushButton.setEnabled(True) def creatorCode_win(self): global candycash global message_user global creator global level text, ok = QInputDialog.getText(self, 'CreatorCode', 'Введите код разработчика: ') if ok: if text == 'Q5du7cc4opEQ1189': candycash = 999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 level = 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 say('Код верный!') creator = True self.candycash_print() self.level_print() else: say('Код неверный!') def candycash_print(self): global candycash self.label_2.setText("CandyCash: " + str(candycash)) def level_print(self): global level self.label_7.setText("CandyLevel: " + str(level)) def candy_message(self): global message_candy self.textBrowser.setText(message_candy) def user_message(self): global message_user txt = message_user[0].upper() + message_user[1:] self.textBrowser_2.setText(txt) def closeEvent(self, e): self.saveSettings() e.accept() def loadSettings(self): if self.settings.contains('geometry'): self.setGeometry(self.settings.value('geometry')) def saveSettings(self): global candycash global level global interface con = sqlite3.connect('CandyBase.db') cur = con.cursor() sql = "DELETE FROM database" cur.execute(sql) info_database = [str(candycash), str(level), str(interface)] cur.execute('INSERT INTO database VALUES(?, ?, ?)', info_database) con.commit() class Program_operation(Interface1): def __init__(self): super().__init__() self.commands_user() def game_orel_and_reshka_for_cc(self, candycashPlus, choice_candy): global candycash global message_user global message_candy if ('ор' in message_user and choice_candy == 'орёл' and "решк" not in message_user) or ('решк' in message_user and choice_candy == 'решка' and "ор" not in message_user): message_candy = 'Вы выиграли и получили' + str(candycashPlus) + 'CandyCash.' candycash += int(candycashPlus) elif ('ор' in message_user and choice_candy != 'орёл' and 'решк' not in message_user) or ('решк' in message_user and choice_candy != 'решка' and "ор" not in message_user): if candycashPlus == 10: message_candy = "Вы проиграли." else: message_candy = "Вы проиграли и потеряли " + str(int((candycashPlus / 2))) + " CandyCash." candycash -= int((candycashPlus / 2)) say(message_candy) def game_knb_for_lvl(self, choice_candy): global level global message_user global message_candy if ('ножницы' in message_user and choice_candy == 'камень') or ('камень' in message_user and choice_candy == 'бумага') or ('бумага' in message_user and choice_candy == 'ножницы'): message_candy = 'Вы проиграли и ваш уровень уменьшен на 1.' if level != 1: level -= 1 elif ('ножницы' in message_user and choice_candy == 'бумага') or ('камень' in message_user and choice_candy == 'ножницы') or ('бумага' in message_user and choice_candy == 'камень'): message_candy = 'Вы выиграли и ваш уровень увеличен на 1.' level += 1 elif ('ножницы' in message_candy and choice_candy == 'ножницы') or ('камень' in message_user and choice_candy == 'камень') or ('бумага' in message_user and choice_candy == 'бумага'): message_candy = 'Ничья.' say(message_candy) def answere_candy(self, message): global message_user global game global isaccount global message_candy if 'привет' in message_user or 'здравствйте' in message_user or 'прив' in message_user or 'салам' in message_user: if "ор" not in message_user and "реш" not in message_user: message_candy = 'Привет!' say(message_candy) elif 'как дел' in message_user: message_candy = "У меня замечательно, ведь я общаюсь с вами. А как у вас?" say(message_candy) elif 'да' in message_user: message_candy = 'Я с вами полностью согласна!' say(message_candy) elif 'любимый цвет' in message_user: message_candy = 'Мой любимый цвет красный. А какой у вас?' say(message_candy) elif 'нет' in message_user: message_candy = 'Как так-то?' say(message_candy) elif 'погод' in message_user and ('какая' in message_user or "что по" in message_user): message_candy = 'Вы можете подойти к окну и посмотреть.' say(message_candy) elif "врем" in message_user: now = datetime.datetime.now() message_candy = "Сейчас " + str(now.hour) + " часов " + str(now.minute) + " минут. " say(message_candy) elif "кого ты слушаешь" in message_user or "твой любымый исполнитель" in message_user: message_candy = choice(['ДЭМ', 'FACE', 'MORGENSHTERN', 'Gone.Fludd', 'Big Babe Tape', 'YukiHaze', 'Молодой Шерра', 'Iroh', '2Pac', 'Maryana Ro', 'Yanix', 'Lil Pump', 'Алёна Швец', 'Lizer', 'ЛСП', "Джарахов", "Oxxxymiron", "Монеточка", "Imagine Dragons", "Johnyboy", 'Cakeboy', 'Flipper Floyd', 'Markul']) say(message_candy) elif "анекд" in message_user or "шутк" in message_user or "шуток" in message_user or "шутеек" in message_user: message_candy = "На экзамене: \n – Профессор, не подскажете, который час? \n – Учить надо было! \n Ха-Ха-Ха" say(message_candy) elif "спой" in message_user or "спеть" in message_user: message_candy = "Как сердце бьется он её заметит \n И похрюкивали чтобы ненасытные утробы \n Сниму очки: мне солнце светит. \n Бабочка хотела на вершину небоскрёба." say(message_candy) elif "откр" in message_user and ("ютуб" in message_user or "youtube" in message_user): message_candy = "Открываю." say(message_candy) url = "https://www.youtube.com/" webbrowser.open(url) elif "откр" in message_user and ("вк" in message_user or "vk" in message_user or "вконтакте" in message_user): message_candy = "Открываю." say(message_candy) url = "https://www.vk.com" webbrowser.open(url) elif "откр" in message_user and ("фейсбук" in message_user or "facebook" in message_user): message_candy = "Открываю." say(message_candy) url = "https://www.facebook.com/" webbrowser.open(url) elif "откр" in message_user and ("инстаграм" in message_user or "instagram" in message_user): message_candy = "Открываю." say(message_candy) url = "https://www.instagram.com/" webbrowser.open(url) elif "откр" in message_user and ("твиттер" in message_user or "twitter" in message_user): message_candy = "Открываю." say(message_candy) url = "https://twitter.com/" webbrowser.open(url) elif "откр" in message_user and ("твитч" in message_user or "twitch" in message_user): message_candy = "Открываю." say(message_candy) url = "https://www.twitch.tv/" webbrowser.open(url) elif "откр" in message_user and ("ок" in message_user or "одноклассники" in message_user): message_candy = "Открываю." say(message_candy) url = "https://www.ok.ru" webbrowser.open(url) elif "откр" in message_user and ("я музыку" in message_user or "яндекс музыку" in message_user): message_candy = "Открываю." say(message_candy) url = "https://music.yandex.ru/" webbrowser.open(url) elif "дата" in message_user or "сегодня день" in message_user or "сегодня число" in message_user: now = datetime.datetime.now() if now.month != (10, 11, 12): month = str(0) + str(now.month) message_candy = "Сегодня " + str(now.day) + " " + str(month) + "." say(message_candy) elif 'меня зовут' in message_user or "моё имя" in message_user: message_candy = "Я - Candy. Очень приятно." say(message_candy) elif 'хорошо' == message_user: message_candy = 'И это хорошо' say(message_candy) elif 'плохо' == message_user: message_candy = 'Очень жаль.' say(message_candy) elif ('откр' in message_user and 'candy market' in message_user) or 'открыть candy market' in message_user or 'открыть кэнди market' in message_user or 'открыть кенди market' in message_user or 'открыть кэнди маркет' in message_user or 'открыть кенди маркет' in message_user or 'открой candy маркет' in message_user or 'открой candy market' in message_user or 'открой кэнди market' in message_user or 'открой кенди market' in message_user or 'открой кэнди маркет' in message_user or 'открой кенди маркет' in message_user or 'открой candy маркет' in message_user: message_candy = 'Уже открываю' say(message_candy) self.close() self.candymarket_win = CandyMarket() self.candymarket_win.show() elif 'код разработчика' in message_user or 'разработчика код' in message_user and 'ввести' in message_user: message_candy = 'Вводите:' say(message_candy) elif "ввести" in message_user and "промкод" in message_user: message_candy = "Вводите:" say(message_candy) elif 'candycash' in message_user or 'кенди кэш' in message_user or 'кэнди кэш' in message_user or 'кенди кеш' in message_user \ or 'кэнди кеш' in message_user: message_candy = str(candycash) elif 'пока' in message_user: message_candy = 'Пока' say(message_candy) sys.exit() else: message_candy = "Разработчик этого приложения не научил меня этому. Но вы можете сделать меня лучше и написать ему в директе (creator_candy_company) или во ВКонтакте (id: 310067042)" say(message_candy) def commands_user(self): global message_user r = sr.Recognizer() with sr.Microphone() as source: r.pause_threshold = 1 say('Я вас слушаю. ') r.adjust_for_ambient_noise(source, duration=2) audio = r.listen(source) try: message_user = r.recognize_google(audio, language="ru-RU").lower() except sr.UnknownValueError: say("Я вас не поняла") self.commands_user() def ProgramOperation(): data_base() global candycash global level global interface info_database = [0, 1, 1] con = sqlite3.connect('CandyBase.db') cur = con.cursor() cur.execute('SELECT [CandyCash], [CandyLevel], [Interface] FROM [database] LIMIT 500') temp = cur.fetchall() for i in temp: candycash = int(i[0]) level = int(i[1]) interface = int(i[2]) con.commit() if interface == 1: app = QtWidgets.QApplication([]) application = Interface1() application.show() sys.exit(app.exec()) elif interface == 2: app = QtWidgets.QApplication([]) application = Interface2() application.show() sys.exit(app.exec()) else: con = sqlite3.connect('CandyBase.db') cur = con.cursor() cur.execute('INSERT INTO database VALUES(?, ?, ?)', info_database) con.commit() PO = ProgramOperation()
