• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Статья Пакуем Python в EXE

Всем известно что питон это интерпретируемый, а не компилируемый язык . И в первую очередь рассчитан для работы в командной строке. Тем не менее, существует много вариантов оформления кода в GUI при необходимости. Но сегодня речь пойдёт об упаковке программы в EXE.

Зачем вообще это надо? Да по сути и не надо в большинстве случаев. Но бывает, что вы написали или скопировали какую-нибудь интересную тулзу, и хотите с ней поделиться. Конечно, если у того, кому вы отправляете прогу есть Python, то проблем нет. А бывает, что человек не шарит совсем в кодинге, и как пользователь тоже не имеет установленного питона нужной версии.

Вот тогда и выручает упаковка файла или файлов в EXE. Такой файл будет запускаться и работать по клику мышки, всё очень просто.

Для сборки файлов в экзешник есть разные приложения. Я рассмотрю самый простой, без всяких заморочек, с которым разберётся любой новичок.

Скачиваем прогу
Распаковываем архив. Внутри папки будет конвертер, запускающийся по клику мышки.

Так, нам понадобится подопытный. Для этого я сотряпал простой текстовый редактор, который открывает файл, и после редактирования сохраняет его. Ну или просто в окне можно что-то написать и сохранить.

Код редактора:

Python:
# -*- 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()

Запускаем прогу, так она выглядит
pyins.png


Выставляем следующие настройки -windowed чтобы прога запускалась без консоли, название выходного файла, onefile чтобы сборка была в один файл, noupx уже стоит по умолчанию ибо сжатие не всегда прокатывает. Ну и собственно выбираете нужный файл питоновский, который будете упаковывать. Также есть возможность выбрать иконку для exe-шника, поддерживается только ICO.

Вот что получилось
pyins2.png


Жмём Build, прога чуток поколдует, выдаст нам сообщение об успешной сборке.
pyins3.png


После этого в папке с конвертором появятся 2 папки
pyins4.png


В папке dist и будет лежать наш готовый дистрибутив в формате EXE. Переместите его куда угодно, а потом обе эти папки можно смело удалять. Теперь проверяем работоспособность выходного файла, кликнув на него.
pyins5.png


Алиллуйя, работает! :)

P.S. Редактор писался второпях, там есть косячок - при сохранении файла, расширение само не ставится, нужно вручную писать. Если кто поправит, буду признателен. Мне уже некогда, уезжаю отдыхать на 2 недели сейчас, так что на форуме меня не будет это время.
 
Последнее редактирование:
13.01.2018
26
15
BIT
0
К сожалению более сложные программы собираются некорректно. Открытку из статьи Ваяем музыкальную открытку на Python этот гуёвый пайинсталлер собирает с размером 12700КВ. При запуске выскакивает ошибка:
Screenshot_1.png

, хотя при компиляции ошибок не возникает. Если копипастить строку команды сборки в терминал, то вывод такой:
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 081
2 474
BIT
14
К сожалению более сложные программы собираются некорректно. Открытку из статьи Ваяем музыкальную открытку на 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 нужно, получится так:

Python:
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.png


Далее выбираем и скачиваем нужную версию cx_Freeze


cx1.png


Скачанный файлик кидаем в корень диска С и в cmd вводим команду:
pip install С:\cx_Freeze-5.1.1-cp36-cp36m-win32.whl (название своей версии, если оно отличается)

В каталоге с программой которую нужно скомпилировать создайте файл "setup.py" в который разместите код:

Python:
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 резало глаза

pygame.png


Ещё малость шаманских танцев с бубном и наши победили )))

Вот
Python:
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)]
)

Весь этот гемор я победил лишь из-за спортивного интереса :ROFLMAO:

Кстати открытка с переписанным кодом в Pyinstaller тоже успешно собралась без всяких танцев с бубном :)

cod.png
 
13.01.2018
26
15
BIT
0
Блестяще, просто блестяще. Спасибо, коллега, за подробную информацию и проделанную работу. Под такими упорными людьми прогнется любая система.
Какие же выводы мы можем сделать из всего этого? Главное, что напрашивается - Python все же мало пригоден в качестве компилируемого языка. Конечно он - совершенно гениальное изобретение ван Россума, с мощной и гибкой динамической типизацией, простым синтаксисом и просто гигантским набором библиотек. Язык прочно занял свою "нишу", обширную даже по сравнению с древними языками общего назначения. Но программист не должен зависеть от инструмента, а выбирать подходящий для конкретной задачи.
Примерно та же история была с Forthом. Чарльз Мур изобрел его для embedded-системы - системы управления телескопом. И Форт действительно хорош именно для встроенных систем: по сути это операционная система малого объема, которая позволяет расширить свой функционал в любом нужном направлении описанием прямо в ней новых типов и средств работы с ними. Но сколько ни пытались сделать Форт широко используемым - ничего у них не вышло. Я тоже пробовал разрабатывать на нем, но, как только добрался до механизмов манипуляции стеком возвратов, понял, что там можно сломать все копья и наломать дров, а результат будет зависеть от конкретной реализации.

PS Посмотрел тесты производительности на одном и том же железе для Java, Python и C (задача была на формирование и обсчет большой матрицы) и почти не удивился: первые два от 28 до 40 раз медленнее.
 
K

Kultiapin

Всем известно что питон это интерпретируемый, а не компилируемый язык . И в первую очередь рассчитан для работы в командной строке. Тем не менее, существует много вариантов оформления кода в GUI при необходимости. Но сегодня речь пойдёт об упаковке программы в EXE.

Зачем вообще это надо? Да по сути и не надо в большинстве случаев. Но бывает, что вы написали или скопировали какую-нибудь интересную тулзу, и хотите с ней поделиться. Конечно, если у того, кому вы отправляете прогу есть Python, то проблем нет. А бывает, что человек не шарит совсем в кодинге, и как пользователь тоже не имеет установленного питона нужной версии.

Вот тогда и выручает упаковка файла или файлов в EXE. Такой файл будет запускаться и работать по клику мышки, всё очень просто.

Для сборки файлов в экзешник есть разные приложения. Я рассмотрю самый простой, без всяких заморочек, с которым разберётся любой новичок.

Скачиваем прогу
Распаковываем архив. Внутри папки будет конвертер, запускающийся по клику мышки.

Так, нам понадобится подопытный. Для этого я сотряпал простой текстовый редактор, который открывает файл, и после редактирования сохраняет его. Ну или просто в окне можно что-то написать и сохранить.

Код редактора:

Python:
# -*- 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.

Вот что получилось
Посмотреть вложение 21796

Жмём 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'")
 

Вложения

  • Export.JPG
    Export.JPG
    16,6 КБ · Просмотры: 949

explorer

Platinum
05.08.2018
1 081
2 474
BIT
14
Первый метод является удобным и крайне интересным, однако на такую простенькую программу как у меня, создает ехе размером 340мб. Есть ли какие пути оптимизации или от такого размера никуда не деться?
Если не будете ставить галочку --noupx, то файл будет сжат.
Это самый сжатый вариант, какие-то крохи в размере можно выиграть убрав в коде комментарии. А через cx_Freeze размер будет гораздо больше. Большой размер обусловлен сбором как необходимых модулей, так и самого Python, что позволяет запускать EXE на машине без установленного питона и зависимостей.
 
S

St1fler

При запуске из папки просто закрывается файл.
 
  • Нравится
Реакции: PECNAS
К

Козак

Ребята помогите советом, совсем недавно начал самостоятельно изучать программирование, при создании ехе через cmd прописываю путь к папке ввожу pyinstaller название файла.py . Вроде бы как есть контакт захожу в созданную папку dict запускаю exe файл он открывается на пару секунд и сразу же закрывается лог сборки во вложении (Если кто знает объясните как можно доступней, новичку Заранее респект и уважуха:))
 

Вложения

  • 1.jpg
    1.jpg
    124,7 КБ · Просмотры: 652
  • 2.jpg
    2.jpg
    89,9 КБ · Просмотры: 928

explorer

Platinum
05.08.2018
1 081
2 474
BIT
14
При запуске из папки просто закрывается файл.
он открывается на пару секунд и сразу же закрывается
Парни, у вас видимо просто программа отрабатывает и поэтому закрывается. В конце исходника перед сборкой напишите input() и тогда программа закрываться будет при нажатии enter
Другой вариант:

Python:
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)
 
A

acidmikk

Ну вот я и вернулся с моря. Очень хорошо что есть баг, это заставило меня провести небольшое исследование по сборке файлов в EXE.
Для этого я прогнал разные ресурсы и выяснил по крайней мере 3 причины, по которым компилл не получается как надо.

Грабли, грабли, грабли...
В общем помогло, но моя программа сразу сворачивается? как с этим можно бороться?
- ссылка на мой проект
 

qqlpp

New member
30.08.2019
1
0
BIT
0
Ребяяят я сделал проект голосовой ассистент, хотел перевести из .py в .exe, но когда я сделал pyinstaller'ом или как писали выше у меня вылетала cmd и через секундку закрывалась, можете помочь пожалуйста а то мне его через несколько дней сдавать.


Python:
#-*-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 {font-size: 30px;}")
        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 {font-size: 15px;}")
        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 {font-size: 30px;}")
        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 {font-size: 20px;}")
        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 {font-size: 15px;}")
        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 {background-color: white;}")
        self.button_candy = QtWidgets.QPushButton(Form)
        self.button_candy.setGeometry(QtCore.QRect(130, 440, 91, 91))
        self.button_candy.setStyleSheet("QPushButton {border: None;}")
        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 {border: None;}")
        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 {border: None}")
        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 {border: None}")
        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 {border: None;}")
        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 {background-color: white;}")
        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 {border: None}")
        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 {border: None;}")
        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 {border: None;}")
        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 {border: None;}")
        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 {border: None}")
        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 {border: None}")
        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 {background-color: white;}")
        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 {background-color: #FFFFFF;\n"
        "    border: 1px solid #CCCCCC;\n"
        "    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset;\n"
        "    transition: border 0.2s linear 0s, box-shadow 0.2s linear 0s;\n"
        "        border-radius: 4px;\n"
        "    color: #555555;\n"
        "    display:block;\n"
        "        width:120px;\n"
        "        margin: 20px auto;\n"
        "    font-size: 14px;\n"
        "        text-align:center;\n"
        "    line-height: 20px;\n"
        "    margin-bottom: 10px;\n"
        "    padding: 4px 6px;\n"
        "    vertical-align: middle;\n"
        "        text-decoration:none;\n"
        "}")
        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 {font-size: 20px;}")
        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 {font-size: 20px;}")
        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{border: none;}")
        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 {border: none;}")
        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()
 

Lisenok

Green Team
02.04.2016
133
75
BIT
0
Не подскажете в чем проблема?
pyinstaller --onefile
Код:
50702 INFO: Building PKG (CArchive) PKG-00.pkg
Traceback (most recent call last):
  File "c:\python27\lib\runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "c:\python27\lib\runpy.py", line 72, in _run_code
    exec code in run_globals
  File "C:\Python27\Scripts\pyinstaller.exe\__main__.py", line 7, in <module>
  File "c:\python27\lib\site-packages\PyInstaller\__main__.py", line 111, in run

    run_build(pyi_config, spec_file, **vars(args))
  File "c:\python27\lib\site-packages\PyInstaller\__main__.py", line 63, in run_
build
    PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
  File "c:\python27\lib\site-packages\PyInstaller\building\build_main.py", line
844, in main
    build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'
))
  File "c:\python27\lib\site-packages\PyInstaller\building\build_main.py", line
791, in build
    exec(code, spec_namespace)
  File "C:\prog\prog.spec", line 33, in <module>
    console=True )
  File "c:\python27\lib\site-packages\PyInstaller\building\api.py", line 435, in
__init__
    upx_exclude=self.upx_exclude
  File "c:\python27\lib\site-packages\PyInstaller\building\api.py", line 197, in
__init__
    self.__postinit__()
  File "c:\python27\lib\site-packages\PyInstaller\building\datastruct.py", line
158, in __postinit__
    self.assemble()
  File "c:\python27\lib\site-packages\PyInstaller\building\api.py", line 262, in
assemble
    dist_nm=inm)
  File "c:\python27\lib\site-packages\PyInstaller\building\utils.py", line 219,
in checkCache
    cachedfile = os.path.join(cachedir, basenm)
  File "c:\python27\lib\ntpath.py", line 85, in join
    result_path = result_path + p_path
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc0 in position 7: ordinal
not in range(128)
 

Lisenok

Green Team
02.04.2016
133
75
BIT
0
Ночь пролетела, а казалось что и не началась...Проблему свою решил, все оказалось намного проще.. Крч незнаю все ли вместе повлияло или что то отдельное, но мои действия: поменял язык системы на английский(США), добавил обычного пользователя с именем Alex, и все скомпилировалось! Может быть кто то окажется в такой же ситуации и его выручат эти пара строк и он не будет жертвовать сладким сном:)
 
  • Нравится
Реакции: Сергей Попов

H1N1

New member
22.11.2019
3
0
BIT
0
В архиве отсутствует exe файл который запускается по клику мыши
Полностью согласен. В архиве нету exe. И как же тогда запустить компилятор?

TypeError: an integer is required (got type bytes).
Этот модуль не работает что-то
 

explorer

Platinum
05.08.2018
1 081
2 474
BIT
14
Не, новая версия стоит, все равно выдаёт эту ошибку. Так как запустить вашу собственно сделанную прогу?
Посмотрел документацию, проверил, всё работает. В общем для успешной сборки на данный момент, максимальная версия Python должна быть 3.7

ab.png


Проверяем...

aa.png


Всё работает :)

aa_.png
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!