Задать вопрос
  • При добавлении пользователя в таблицу в поле ID ставиться none, хотя я сделал проверку, пользователю присваивается ID. Что не так?

    Vindicar
    @Vindicar
    RTFM!
    Ты эту БД давно используешь? Просто новички часто споыткаются о простой факт. Запросы вида CREATE TABLE IF NOT EXISTS создадут отсутствующую таблицу, но не изменят таблицу, если она уже существует. Даже если структура таблицы отличается от заданной. Скажем, если ты добавил автоинкремент в запрос CREATE позднее, то в реальной таблице его не будет.
    В таком случае проще всего снести файл базы, чтобы она пересоздалась, и снова наполнить его данными.

    Также можешь попробовать узнать реальную структуру твоей таблицы так:
    SELECT sql FROM sqlite_schema WHERE type = 'table' AND name = 'customers'
    Ответ написан
    Комментировать
  • Как можно сделать метод класса сразу статическим и динамическим?

    Vindicar
    @Vindicar
    RTFM!
    По-хорошему должен быть только один способ работать с твоим классом. Выбери что-то одно и придерживайся этого подхода.

    Если очень хочется выстрелить себе в ногу, сделай метод статическим - это обеспечит его вызов и на классе, и на экземпляре - а внутри методла получай доступ к синглтон-экземпляру и работай с ним.

    Ну и да, я надеюсь что логгер ты пишешь только как упражнение, а не потому что не знаешь о модуле logging. =)
    Ответ написан
    Комментировать
  • Что за странная ошибка python? почему?

    Vindicar
    @Vindicar
    RTFM!
    Слишком много метаклассов используешь. Лучше максимум один во всей иерархии наследования твоего класса.
    Подозреваю, что у QMainWindow свой метакласс, у View свой, а потому не стоит наследоваться от них обоих.
    Да собственно, и вопрос - на кой тебе наследоваться от них обоих?
    Ответ написан
    Комментировать
  • Как выполнить функцию в другом файле и получить return без импорта?

    Vindicar
    @Vindicar
    RTFM!
    fastapi или flask хороший вариант если хочешь API на базе HTTP.
    Ответ написан
    Комментировать
  • Проблема с кириллицей, как ее решить?

    Vindicar
    @Vindicar
    RTFM!
    Разберись, в какой кодировке приходят символы от клавиатуры (под виндой вариантов немного: для кириллицы windows-1251 или ucs-2), и в какой кодировке ты их пишешь в файл.
    Ответ написан
    3 комментария
  • Как реализовать поиск координат пересечения трех окружностей, если даны координаты радиусов этих окружностей и их радиус?

    Vindicar
    @Vindicar
    RTFM!
    Сначала решить систему уравнений чтобы найти точки пересечения двух окружностей. Примем xi, yi за центр, а Ri за радиус. Тогда получим:
    (x - xA)^2 + (y - yA)^2 = RA^2
    (x - xB)^2 + (y - yB)^2 = RB^2
    Раскрываем скобки, вычитаем первое уравнение из второго, получаем квадратное уравнение. 2 корня - 2 точки пересечения, 1 корень - одна точка касания, нет корней - окружности не пересекаются.
    Потом эти точки (1 или 2) проверить на принадлежность третьей окружности, т.е. убедиться что выполняется условие (x - xС)^2 + (y - yС)^2 = RС^2. Проверку выполнения нужно проводить с некоторой точностью, т.е. сравнение делать не a == b, а скорее в духе abs(a - b) < 0.000001.
    Вот и всё.

    Если можно использовать sympy, то можешь попробовать сразу задать систему из трёх уравнений в нём.
    Ответ написан
    8 комментариев
  • Как запустить пользовательского бота Pyrogram в Docker?

    Vindicar
    @Vindicar
    RTFM!
    Как уже написали в комментариях, файловая система контейнера неизменяема. Всё, что нужно изменять (типа БД, логов и т.п.) нужно выносить в отдельный(-ые) каталог(-и) и монтировать их как volume..
    Ответ написан
    1 комментарий
  • Почему тг бот неправильно принимает сообщение?

    Vindicar
    @Vindicar
    RTFM!
    @bot.message_handler(content_types='text')
                def us(message):
                    bot.send_message(message.chat.id, 'проверка')

    Не надо объявдять обработчики событий по ходу дела, это не будет работать так, как ты ожидаешь.
    Ищи другие средства, какие - зависит от библиотеки. В случае telebot это register_next_step_handler(), в репозитории либы есть пример.
    Ответ написан
    Комментировать
  • Как импортировать переменную в python IDLE из другого модуля?

    Vindicar
    @Vindicar
    RTFM!
    Модуль при импорте всегда выполняется целиком, за исключением частей, накрытых if __name__ == '__main__':. Если ты уверен, что это не так - пример кода в студию.
    Ответ написан
  • Как пофиксить ошибку с missing 1 required positional argument: 'event'?

    Vindicar
    @Vindicar
    RTFM!
    Ну так а ты что хотел?
    @client.on(events.NewMessage(chats=url))
    async def main(event):

    Ты объявил, что у тебя main() требует один аргумент, а потом вызываешь без аргументов.
    Собственно, возникает вопрос: ты вообще понимаешь, что делаешь, или пытаешься слепить код наугад, авось заработает?
    Ответ написан
    Комментировать
  • Python как импортировать функцию из файла находящегося в другой папке?

    Vindicar
    @Vindicar
    RTFM!
    Уровни выше есть?
    Потому что если нет, то from folder_1.name import func
    Ответ написан
    5 комментариев
  • Не запускается код скомпилированный с помощью pyinstaller на другом компе, что делать?

    Vindicar
    @Vindicar
    RTFM!
    Код написан чат гпт4, я не программист

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

    Но да, вполне может быть, что проблема в этом:
    # Привязываем сокет к определенному адресу и порту
    server_address = ('192.168.1.32', 12345)
    server_socket.bind(server_address)

    Ты пытаешься слушать и принимать соединения на этот адрес из диапазона локальных сетей. Т.е. ты не коннектишься к серверу на этом адресе, а ожидаешь, что к тебе будут коннектиться. Но что, если у целевого компа другой адрес? Почему вообще твоя программа ведёт себя как сервер? В таких случаях обычно сервер расположен где-то на машине, доступной из Сети, а софт, запускаемый на компе клиента уже к нему коннектится. У тебя наоборот.

    сделать программу для получения информации от клиента и записи ее в txt файл

    Что за информация? Как она получается? Критично ли именно в txt файл?
    В простейшем случае может хватить и гугл-формы.

    Короче, вывод: нехрен полагаться на гпт, вообще ни в чём. Там нужно в два раза лучше разбираться, чтобы понять, оно дело сделало, или фигню наворотило.
    Ответ написан
    1 комментарий
  • Почему subprocess выдает непонятные символы?

    Vindicar
    @Vindicar
    RTFM!
    subprocess.run() совмещает стандартный вывод твоего скрипта и вызываемого тобой процесса. Если они используют разные кодировки, чей-то вывод превратится в кашу.
    Используй capture_output, тогда ты получишь вывод скрипта в виде строки, которую сможешь сам декодировать, если надо.
    Ответ написан
    Комментировать
  • Почему бот перестал отвечать после добавления клавиатуры?

    Vindicar
    @Vindicar
    RTFM!
    У тебя две функции отмечены как
    @bot.message_handler(content_types=['text'])
    telebot в случае подобного конфликта (две функции готовы обслужить одно и то же событие) всегда вызывает первую из них.
    Тебе придётся объединить логику этих функций в одной функции.
    Ответ написан
    Комментировать
  • Требуется захват вывода команды в subproccess python в реальном времени как реализовать?

    Vindicar
    @Vindicar
    RTFM!
    Используешь Popen(), перехватываешь ввод-вывод (stdin, stdout и stderr, передаёшь туда константу PIPE). Дальше используешь свойства stdin, stdout, stderr - это файлоподобные объекты (пайпы).
    Тут есть ряд подводных камней. Обычно чтение из файла - блокирующая операция, т.е. пока дочерний процесс не напишет что-то в пайп - твоя программа будет висеть и не реагировать на действия пользователя. В питоне неблокирующее чтение из пайпа доступно только под unix, а под виндой - только начиная с 3.12. Если нужна поддержка винды, будет практичнее запустить отдельный поток, который читает данные из процесса. Например, так:

    import collections
    import signal
    import subprocess
    import threading
    import time
    
    
    class ChildProcessReader(threading.Thread):
        def __init__(self, args: list[str], *, encoding: str | None = None, errors: str = 'ignore', exit_timeout: float = 1.0):
            super().__init__(name=f'Monitor {args!r}', daemon=True)
            self._encoding = encoding
            self._errors = errors
            self._exit_timeout = exit_timeout
            self._queue = collections.deque()
            self._child = subprocess.Popen(args,
                stdin=subprocess.DEVNULL,  # стандартный вход отключен
                stdout=subprocess.PIPE,  # перехватываем стандартный вывод
                stderr=subprocess.STDOUT,  # стандартный вывод ошибок направляем на стандартый вывод
            )
            self.start()
        
        @property
        def running(self) -> bool:
            '''Возвращает True, если процесс ещё жив.'''
            return self._child is not None
        
        @property
        def output(self) -> collections.deque:
            '''Очередь, в которую будут складываться получаемые от процесса строки.'''
            return self._queue 
        
        def stop(self) -> None:
            '''Останавливает процесс - сначала "по хорошему", потом принудительно.'''
            if self._child is None:
                return
            try:
                self._child.send_signal(signal.CTRL_C_EVENT)
                self._child.wait(self._exit_timeout)
            except subprocess.TimeoutExpired:
                self._child.terminate()
            except KeyboardInterrupt:
                pass
            finally:
                self._child = None
        
        def run(self) -> None:
            '''Тело потока.'''
            try:
                while self._child.poll() is None:  # рабочий цикл крутится, пока дочерний процесс жив.
                    stdout_data = self._child.stdout.read1()
                    if self._encoding is not None:
                        stdout_data = stdout_data.decode(self._encoding, errors=self._errors)
                    self._queue.append(stdout_data)
            except KeyboardInterrupt:
                pass
            finally:  # по выходу из цикла завершаем процесс
                self.stop()
    
    
    if __name__ == '__main__':
        child = ChildProcessReader(
            # выполняемая команда
            ['ping', '-t', '127.0.0.1'],
            # кодировка, в которой отдаёт данные твой процесс. None - отдавать байты как есть.
            encoding='cp866', errors='ignore',
            # сколько ждать завершения процесса
            exit_timeout=1.0
        )
        # процесс (и поток) стартуют немедленно по созданию экземпляра класса
        try:
            while child.running:
                # вместо просто цикла тебе лучше периодически выполнять код ниже иным способом
                # например, если у тебя GUI на tkinter, используй метод .after()
                try:  # пытаемся получить очередную строку от процесса
                    data = child.output.popleft()
                except IndexError:  # ничего нет, буфер пуст
                    # это просто реакция на отсутствие текста. Можно вообще ничего не делать.
                    print('.', end='', flush=True)
                    time.sleep(0.1)  # 
                else:  # получили строку, обрабатываем
                    print(f'\n> {data!r}')
        except KeyboardInterrupt:
            print('\nStopping')
        finally:  # в итоге надо будет прибить дочерний процесс
            child.stop()
    Ответ написан
    Комментировать
  • Как сделать выбор монитора для полноэкранного приложения python arcade?

    Vindicar
    @Vindicar
    RTFM!
    window.set_fullscreen()?
    screen – Which screen should we display on? See get_screens()

    Т.е. при вызове метода set_fullscreen() передаёшь в параметр screen элемент из списка get_screens().
    Ответ написан
  • Как привязать телеграм бота к программе на C#?

    Vindicar
    @Vindicar
    RTFM!
    Я подозреваю, что для работы бота требуется запустить его рабочий цикл. Без него методы бота работать не будут. Подробнее читай в доках на используемую тобой библиотеку (которую ты не потрудился указать).
    А вообще, API телеги - это просто HTTP запросы, ты можешь попробовать сделать запрос вручную.
    Например, послать POST запрос на адрес
    https://api.telegram.org/botТОКЕН_ТВОЕГО_БОТА/sendMessage
    с телом
    chat_id=ID_получателя&text=текст_сообщения_в_url_кодировке
    Ответ написан
    Комментировать
  • Почему возникает ошибка "got an unexpected keyword argument 'use_context'"?

    Vindicar
    @Vindicar
    RTFM!
    Ты уверен, что туториал, по которому ты писал бота, рассчитан на ту же версию, что и используемая тобой?
    Может, у тебя либа сильно новее, чем та, на которую код рассчитан?
    Ответ написан
    Комментировать
  • Как заполнить sql таблицу на Python SQLAlchemy?

    Vindicar
    @Vindicar
    RTFM!
    Ответ написан
    Комментировать