• QSS. Как изменить верхнюю панель?

    xzripper
    @xzripper
    0xC0000005
    Это невозможно, либо отказаться от такой идеи, либо сделать окно вообще без границ и верхней панели (QtCore.Qt.FramelessWindowHint), и сделать свою верхнюю панель.
    Ответ написан
    Комментировать
  • Какие видеопроигрыватели для Web есть под заданные критерии?

    @rPman
    С гарантией можно все это делать только если стримить видео с сервера, и соответственно управлять тем что проигрывается на серверной стороне. Самый простой стриминг можно реализовать с помощью ffmpeg или vlc, готовые комбайны. Недостаток подхода - высокая нагрузка на сервер (стриминг не кешируется в обычном смысле).

    Можно обмануть большинство сценариев обхода видео, если формировать m3u8 файл плейлист кусков видео, генерируя каждый раз новые ссылки на видео, где доступ к ним на сервере контролировать по таймингам (придется тестировать кучу девайсов, так как кешируют они немного по разному) и отдавать редиректом на настоящие куски видео, оформленные нормально статичным контентом (т.е. будут кешироваться), правда хз зачем тебе это, мне кажется тебе нужно принудить рекламу смотреть а не буквально требовать скачивать куски видео в определенном порядке.

    Если тебе хватит пользовательского интерфейса (т.е. не защитит от продвинутых пользователей и продвинутых блокировщиков рекламы) то пользуйся штатным video (не понимаю почему все пилят какие то плееры, html5 video тег отличный вариант).

    достаточно удалить control атрибут, чтобы не было интерфейса управления в т.ч. с клавиатуры, а чтобы исключить управление из меню (правая кнопка мыши) добавь к стилям pointer-events: none;
    Ответ написан
    4 комментария
  • Как работает @property.getter?

    shabelski89
    @shabelski89
    engineer
    Так делать нельзя, но можно переопределять значение атрибута и в зависимости от его типа вернуть с постобработкой для указанного типа.
    class TestClass:
        def __init__(self, number: (int, str)):
            self._number = number
    
        @property
        def number(self):
            if isinstance(self._number, int):
                return self.__int_number()
            elif isinstance(self._number, str):
                return self.__str_number()
            else:
                return self._number
    
        @number.setter
        def number(self, value):
            self._number = value
    
        def __int_number(self):
            return self._number * 100
    
        def __str_number(self):
            return f'Hello world - {self._number}'
    
    
    value_int = 150
    testInstance = TestClass(value_int)
    print(testInstance.number)
    
    value_str = '0MG'
    testInstance.number = value_str
    print(testInstance.number)
    
    value_another_type = ['one', 'two']
    testInstance.number = value_another_type
    print(testInstance.number)
    Ответ написан
    Комментировать
  • OpenCV. Почему отдельные кадры из видео весят больше чем видео?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Потому что кадры в массивах хранятся в несжатом виде, а исходный видео-ролик сжат кодеком.
    Кодеки сейчас довольно сложные, у них много параметров сжатия и нетривиальные алгоритмы. Вы один и тот же ролик можете расжать и сжать по новой, а в результате получите совсем другой объём и даже немного отличающийся контент, ведь сжатие происходит обычно с потерей качества.
    Ответ написан
    Комментировать
  • Как правильно прописать путь к файлу?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Пути могут быть абсолютные и относительные. В вашем случае указан относительный путь. Относительный путь, если его не присоединять к абсолютному, указывает на файл или каталог относительно текущего пути. В каждом процессе операционной системы есть внутреннее состояние того текущего пути. Если текущий путь н еменять, то он обычно наследуется от родительского процесса, или равен пути, по которому запустили скрипт.
    Указывайте путь либо абсолютно, либо относительно текущего пути в вашем приложении.
    Используйте pathlib - это сейчас самый современный и правильный способ работать с путями.
    Абсолютные пути начинаются со слеша (ну или с указания диска, если речь о винде), а относительные нет.
    Надо учить матчасть и азы прежде чем программировать ботов
    Ответ написан
    Комментировать
  • Как скрыть код на питоне на мини-компьютере от пользвователя?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Решение, которое позволит поднять стоимость реверса Вашего приложения до неприличного значения:
    1. Обфусцируем код через https://github.com/dashingsoft/pyarmor .
    2. Перегоняем п1. через https://github.com/Nuitka/Nuitka в сишный код.
    3. Компилим п2. в машинный код.
    4. Запускаем п3. exe-шник на клиенте.

    Получаем:
    1. Увеличение производительности.
    2. Exe-шник из машинного кода.
    Ответ написан
    3 комментария
  • Как запустить скрипт используя subprocess и venv из которого запущен главный скрипт?

    Vindicar
    @Vindicar
    RTFM!
    Найди бинарник python, который лежит в этом venv, и укажи его полный путь вместо просто python.
    Но так как ты дожидаешься завевршения скрипта, может иметь смысл такой хак:
    # my_script.py
    import sys
    
    def main(args: list[str]):
        """Тело скрипта здесь..."""
    
    if __name__ == '__main__':
        # скрипт запущен независимо
        main(sys.argv[1:])

    А в главном скрипте будет просто
    import my_script
    
    my_script.main(['--work-dir', work_dir, '--result-dir', result_dir])


    В этом случае тебе не придётся сильно переделывать my_script. Но зато теряешь в удобстве вызова кода, например, если нужно получить значение из этого скрипта.
    Чем больше ты вынесешь из main() в отдельные подпрограммы - тем больше контроля будет у главного скрипта, но и тем больше работы.
    Ответ написан
    Комментировать
  • Почему не получается расширить модель Django?

    Mi11er
    @Mi11er
    A human...
    Потому что уже создали User и django Хочет ему подпихнуть Profile
    Варианта 2
    1) Для модели Profile , сделать в атрибуте User - Null = True
    2) При таком вопросе, нажать 1 , потом снова 1
    Проставит первого юзера для профайла
    Ответ написан
    3 комментария
  • Почему не получается расширить модель Django?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Значит, что в базе уже есть таблица с таким же именем, но без поля user. И в ней есть какие то данные. А сейчас вы пытаетесь создавать/обновить таблицу, но с этим полем. И, поскольку, данные user не могут быть пустыми, база требует, чтобы вы что-то указали,.
    Ответ написан
    Комментировать
  • Как декодировать символы?

    @humoured
    Вы всё на свете найдёте в коробке с карандашами
    что делать с этим: "" символом, который в виде байта выглядит: "\x08"?
    Нужно обрабатывать, как оно и задумывалось. Символ 0x08Backspace, с помощью него консольные приложения обновляют данные, которые сами же в консоль и отправили.

    В конкретно этом примере мы видим, что процесс работы приложения отображается четырьмя символами: _25% — пробел, две цифры, символ процента. Затем идет четыре символа Backspace ("стирание" предыдущего символа) и четыре символа обновлённого статуса (_26%).
    Ответ написан
    Комментировать
  • Как импортировать класс из файла в той же папке?

    @great_cat
    может быть: from DataBasePythonPickle import Название класса?
    ну если я правильно понял суть проблемы)
    Ответ написан
    5 комментариев
  • Из-за чего возникла ошибка 'TypeError: Bot.send_message() missing 1 required positional argument: 'text''?

    Vindicar
    @Vindicar
    RTFM!
    await Bot.send_message(message.from_user.id, message.text)

    Ты пытаешься вызвать метод класса Bot, а не экземпляра bot.

    Поясню. В питоне методы устроены довольно прямолинейно:
    class Test:
        def test(self, x):
            print(f"Я {self} и я получил {x}")
    
    t = Test()  # создаём экземпляр
    t.test(42)  # Я <__main__.Test object at 0x000001BB195CBC70> и я получил 42
    # это тоже сработает, и это практически эквивалентно вызову выше
    Test.test(t, 42)  # Я <__main__.Test object at 0x000001BB195CBC70> и я получил 42
    # а это - то, что попытался сделать ты:
    Test.test(42)  # TypeError: Test.test() missing 1 required positional argument: 'x'
    # потому что вызван метод класса, а не объекта, и его первый параметр (42) интерпретирован как self
    Ответ написан
    4 комментария
  • Как представить шахматную партию в виде математики/массива чисел?

    LaRN
    @LaRN
    Senior Developer
    Можно так попробовать:
    Пусть нейронная сеть выполняет роль оценочной функции.
    Т.е. на вход сети подается состояние доски, а на выходе получается числовая оценка позиции.
    Дерево возможных ходов формируется не сетью, а внешней функцией.
    По факту строиться дерево ходов из текущей позиции и для каждого хода получается оценка с помощью нейронной сети, а дальше отбирается ход с наилучшей оценкой.
    По такая реализация шахмат с нейронной сетью должна работать быстрее, чем поиск в глубину.

    Для обучения можно попробовать просчитать позицию классическим перебором, а затем отдать ее же нейронной сети и тренировать пока оценки от нейронной сети не станут совпадать с оценками полученными перебором.

    Похожий вопрос вот тут разбирается:
    qaru.site/questions/6525/how-to-program-a-neural-network-for-chess
    Ответ написан
    4 комментария
  • Как вытащить из ссылки присваемое значение?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    from urllib.parse import urlparse, parse_qs
    
    s = 'https://www.google.com/recaptcha/api2/bframe?hl=ru&amp;v=v1555968629716&amp;k=6Lfs-08UAAAAAHYLb31I3BeXJX7KcB8nKWrqWivY&amp;cb=2n6f0pedwhli'
    url = urlparse(s)
    params = parse_qs(url.query)
    value = params['k'][0]
    Ответ написан
    1 комментарий
  • Как в socket проверить, отправил ли сервер/клиент что-то еще?

    создайте свой протокол. к примеру
    сообщение со стороны клиента и сервера должно быть структурированым
    key|length|data|crc
    key - хеш ключ, на основании которого вы валидируете что клиент действительно ваш. длинна всегда к примеру 15 знаков
    length - длинна блока дата, всегда 10 знаков
    data - блок с данными, длинна равна значению length
    crc - контрольная сумма блока data, для проверки целостности пакета, всегда 4 знака
    при таком подходе Вы всегда знаете какой длинны Вам придут данные и что собственно ожидается
    вобщем socket это весело :)
    Ответ написан
    2 комментария
  • Как в socket проверить, отправил ли сервер/клиент что-то еще?

    Вы можете попробовать другие режимы работы с сокетом - установить таймауты или неблокирующий режим. В обоих случаях при невозможности прочитать из сокета вы получите exception, который можно отловить и обработать.
    Ответ написан
    Комментировать