• Куда всунуть аргумент self?

    Hackerman1
    @Hackerman1 Автор вопроса
    Ultra-Bad Coder, Файл json или базу данных со слловами-триггерами? Файл json пустой.
  • Куда всунуть аргумент self?

    Hackerman1
    @Hackerman1 Автор вопроса
    Ultra-Bad Coder, Сделал немного по другому.
    def main(): # Главная функция
    
        def __init__(self):
            self.settings = {}
            self.date = DateBase._getDate()
    
        speak("Здравствуй, я голосовой ассистент Юля. Версия 0.1.5.")
    
        while True: # Главный цикл
    
            request = hear() # Прослушмваем
    
            result = [key for key, val in database.items() if request in val]  # Проверяем наличие нашего запроса в базе, помещаем ответ в переменную
            result = "".join(result)  # Преобразуем список в строку
    
            if result:
    
                if result == "Открываю калькулятор":
                    openCalc()
    
                elif result == "Режим отладки":
                    debug_Mode()
    
                elif result == exit_:
                    speak(result)
                    os.system("TASKKILL /F /IM python.exe")
    
                elif result == Real_Need:
                    speak(result)
    
                elif result == Your_History:
                    speak(result)
    
                elif result == Program1:
                    global Program
                    Program1way = Program.get()
                    def save(self):
                        self.settings['Program1way'] = Program1way
                        DateBase._save(self.settings)
                        speak(result)
                    save()
    
                elif result == Program1Start:
                    os.startfile(Program1way)
                    speak(result)
    
                else:
                    speak(result)
            else:
                speak("Вы сказали: " + request)
                speak("Я не могу найти у себя ответ. Желаете найти ответ в браузере?")
                a = hear()
    
                if a == "да" or a == "конечно" or a == "найди":
                    Search(request)
                else:
                    speak("Окей, продолжим")
                    continue

    Всё равно ошибка
    Traceback (most recent call last):
    File "F:\Programming\Python3.9.2\lib\tkinter\__init__.py", line 1892, in __call__
    return self.func(*args)
    File "F:\Programming\Assistant\Yulia_0_1_5.py", line 196, in
    button.config(command=lambda: main()) # Вызов кнопкой функции main()
    File "F:\Programming\Assistant\Yulia_0_1_5.py", line 146, in main
    save()
    TypeError: save() missing 1 required positional argument: 'self'
    Ух, как же сложно однако сдерживать эмоции!
  • Куда всунуть аргумент self?

    Hackerman1
    @Hackerman1 Автор вопроса
    Ultra-Bad Coder, Извините что раньше не заметил комментарий. Думал что кто то из тех двоих.
  • Куда всунуть аргумент self?

    Hackerman1
    @Hackerman1 Автор вопроса
    Ultra-Bad Coder, Да, конечно:
    from DataBase_0_1_5 import *
    import json
    import pyttsx3
    import os
    import sys
    import speech_recognition as sr
    import time
    import datetime
    from fuzzywuzzy import fuzz
    import tkinter as tk
    from PIL import ImageTk, Image
    import webbrowser as wb
    
    filename = "settings.json"
     
    #============================================================== Функции
    
    #=============================================================Датабаза
    def _save(settings):
        with open (filename, 'w', encoding='utf-8') as f:
            json.dump(settings, f, indent = 4, ensure_ascii = False)
            f.close()       
     
    def _getDate():
        with open (filename, 'r', encoding='utf-8') as f:
            load = json.load(f)
            dates = list(load.values())
            return dates
            f.close() 
    
    #==============================================================
    def openCalc(): # Калькулятор
        cal = True
        while cal:
            speak('скажите математический пример')
            n = hear().split(' ') # Разбиваем нашу речь на слоги, получая список
    
            one, two, symbol = int(example_list[0]), int(example_list[2]), example_list[1] # Распределяем все по переменным
    
            if symbol == '+' or symbol == 'плюс':
                speak(str(one + two))
            elif symbol == '-' or symbol == 'минус':
                speak(str(one - two))
            elif symbol == 'x' or symbol == 'умножить':
                speak(str(one * two))
            elif symbol == '/' or symbol == 'разделить':
                speak(str(one / two))
            else:
                speak("Это не похоже на пример")
    
            print("повторить?") # Повторить?
            reset = hear()
            if reset == "да":
                cal = True
            else:
                speak("выход из программы")
                print("==============================")
                break
    
    def speak(what): # Сказать
        print(what)
        x = pyttsx3.init()
        x.say(what)
        x.runAndWait()
        x.stop
    
    def hear(): # Записать
        global error
        r = sr.Recognizer()
        try:
            with sr.Microphone() as source:  # Запись аудио
                r.adjust_for_ambient_noise(source, duration=0.5)  # шумоподавление
                print("Скажите что-нибудь: ")
                audio = r.listen(source)
            text = r.recognize_google(audio, language="ru-RU") # Преобразование речи в текст
            error = 0 # Возвращает 0 в ложные запросы
            return text.lower()  # Возврат
    
        except:
            return hear()
    
    def debug_Mode(): # Режим отладки
        speak("Введи ключ доступа")
        cod = input("--> ")
        if cod == "2004":
            speak("Запускаю режим отладки")
            print("=" * 40)
            mod = True
        else:
            speak("Ошибка доступа")
    
        while mod == True:
            zapros = hear()
            print("[log]:" + zapros)
            if zapros == "выход":
                mod = False
                speak("закрываю режим отладки")
                print("=" * 40)
    
    def Search(zapros): # Функция поиска
        speak("Открываю в поиске: " + zapros)
        url = "https://www.google.ru/search?q=" + zapros
        wb.open_new(url)
        play = False
    
    def main(self): # Главная функция
    
        speak("Здравствуй, я голосовой ассистент Юля. Версия 0.1.5.")
    
        while True: # Главный цикл
    
            request = hear() # Прослушмваем
    
            result = [key for key, val in database.items() if request in val]  # Проверяем наличие нашего запроса в базе, помещаем ответ в переменную
            result = "".join(result)  # Преобразуем список в строку
    
            if result:
    
                if result == "Открываю калькулятор":
                    openCalc()
    
                elif result == "Режим отладки":
                    debug_Mode()
    
                elif result == exit_:
                    speak(result)
                    os.system("TASKKILL /F /IM python.exe")
    
                elif result == Real_Need:
                    speak(result)
    
                elif result == Your_History:
                    speak(result)
    
                elif result == Program1:
                    global Program
                    Program1way = Program.get()
                    self.settings['Program1way'] = Program1way
                    DateBase._save(self.settings)
                    speak(result)
    
                elif result == Program1Start:
                    os.startfile(Program1way)
                    speak(result)
    
                else:
                    speak(result)
            else:
                speak("Вы сказали: " + request)
                speak("Я не могу найти у себя ответ. Желаете найти ответ в браузере?")
                a = hear()
    
                if a == "да" or a == "конечно" or a == "найди":
                    Search(request)
                else:
                    speak("Окей, продолжим")
                    continue
    
    def _from_rgb(rgb): # Для работы TKinter
        return "#%02x%02x%02x" % rgb
    
    #=========================================================== Ход работы
    
    error = 0
    root = tk.Tk() # Задаем новое окно
    
    root.geometry('400x500') # Определяем размеры
    root.resizable(width=False, height=False) # Закрепляем размеры
    root.title("Голосовой ассистент Юля")
    
    #======= Непонятный код ======
    
    image = Image.open("Background.png")
    width = 500
    ratio = (width / float(image.size[0]))
    height = int((float(image.size[1]) * float(ratio)))
    image = image.resize((width, height), Image.ANTIALIAS)
    image = ImageTk.PhotoImage(image)
    canvas = tk.Canvas(root, width=width, height=height)
    canvas.pack(side="top", fill="both", expand="no")
    canvas.create_image(0, 0, anchor="nw", image=image)
    
    #==============================
    
    canvas.create_text(200, 25, text="Юлия 0.1.5", fill="Purple", font='Helvetica 30') # Текст
    canvas.create_text(200, 50, text="Голосовой помощник, созданный для общения", fill="Purple", font='Times 13') # Текст
    
    button = tk.Button(root, text='Запуск', font="Times 30", bg=_from_rgb((189, 223, 249))) # Настройки для кнопки
    canvas.create_window((125, 400), anchor="nw", window=button) # Вывод кнопки.
    button.config(command=lambda: main()) # Вызов кнопкой функции main()
    Program = tk.Entry(root, width=61)
    Program2 = tk.Entry(root, width=61)
    canvas.create_text(200, 75, text="Программа №1", fill="Purple", font='Times 13')
    canvas.create_window((10, 85), anchor="nw", window=Program)
    canvas.create_text(200, 115, text="Программа №2", fill="Purple", font='Times 13')
    canvas.create_window((10, 125), anchor="nw", window=Program2) 
    
    Program1way = ""
    Program2way = ""
    root = tk.mainloop() # Запуск окна
    
    #==========================================================
  • Куда всунуть аргумент self?

    Hackerman1
    @Hackerman1 Автор вопроса
    Vindicar, Но чего хочет от меня эта ошибка подробное изучение классов мне ничего не даст т.к. как минимум в этом коде их нет.
  • Куда всунуть аргумент self?

    Hackerman1
    @Hackerman1 Автор вопроса
    Я поправил вопрос. Название функции выглядит так - def main(self). Аргумент self нужен для работы базы данных.
  • Куда всунуть аргумент self?

    Hackerman1
    @Hackerman1 Автор вопроса
    Всё в смысле сам ассистент, а графическая оболочка и так работает.
  • Куда всунуть аргумент self?

    Hackerman1
    @Hackerman1 Автор вопроса
    main() - это главная функция благодаря которой работает ВСЁ.
  • Как вставить entry в код на ткинтере?

    Hackerman1
    @Hackerman1 Автор вопроса
    Мне помогли найти решение. Спасибо за помощь)
  • Как вставить entry в код на ткинтере?

    Hackerman1
    @Hackerman1 Автор вопроса
    Yupiter7575, 60b879c8402cf174080794.png Ошибки нет как и поля ввода.
  • Как вставить entry в код на ткинтере?

    Hackerman1
    @Hackerman1 Автор вопроса
    Yupiter7575, А, ок, спасибо. Щас бы мне только найти их... А как там указать расположение через координаты или низя?
  • Как вставить entry в код на ткинтере?

    Hackerman1
    @Hackerman1 Автор вопроса
    Yupiter7575, 60b7e3815f246786676344.png
    Мне вот интересно. Где он третий аргумент взял, если я дал лишь расположение по горизонтали и вертикали?
  • Как вставить entry в код на ткинтере?

    Hackerman1
    @Hackerman1 Автор вопроса
    Дело в том, что код из раздела "Непонятный код" Я взял с одного сайта. Нам с человеком удалось вставить его в основной код и мы не стали что то думать с ним - Работает и работает. Да выходит ошибка. Чтобы я не использовал pack или grid. К сожалению этот неизвестный canvas делает нормально так проблем потому что неизвестно как с ним работать. Известно лишь как работать с этого сайта https://pythonru.com/uroki/obuchenie-python-gui-ur.... Там всё описано, но из-за "Непонятного кода" мне не удается нормально использовать эти функции библиотеки.
  • Как разворачивать(разворачивать окан уже открытых) приложения с помощью Python?

    Hackerman1
    @Hackerman1 Автор вопроса
    comradeRecky, Понял. Спасибо! Поищу документацию на русском.
  • Как установить python-Levenshtein?

    Hackerman1
    @Hackerman1 Автор вопроса
    не помогло.