Задать вопрос
  • На сайте появились реклама, которая не должна быть?

    vpetrov
    @vpetrov
    частный SEO-специалист
    "Битва экстрасенсов", 666 сезон.
    Я принёс виру Вотану и бросил руны. Судя по всему, дело может быть вот в чём:
    а) У вас сайт взломан. Ищите шеллы и айфреймы, через которые реклама и вставляется.
    б) Вы используете незащищенные протоколы, которые позволяют некоторым провайдерам пихать пользователю рекламу. Сайт чист, но надо хоть SSL использовать.
    в) Поговорите с вебмастером. Видывал я таких, которые по тихому от владельца и майнеры втыкали на сайт, и целые доры. Формально - сайт госконторы, а на самом деле - микрокредитные организации.
    Ответ написан
    Комментировать
  • Как получить цвет приложения на котором находится моё приложение?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Код:
    spoiler
    import sys
    from PyQt5 import QtWidgets, QtCore, QtGui
    
    
    class ClockWidget(QtWidgets.QWidget):
        def __init__(self):
            super().__init__()
    
            # Устанавливаем параметры окна
            self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint | QtCore.Qt.FramelessWindowHint)
            self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
    
            # Устанавливаем таймер для обновления времени
            self.timer = QtCore.QTimer(self)
            self.timer.timeout.connect(self.update_time)
            self.timer.start(1000)  # Обновляем каждую секунду
    
            # Создаем метку для отображения времени
            self.label = QtWidgets.QLabel(self)
            self.label.setAlignment(QtCore.Qt.AlignCenter)
            self.label.setStyleSheet("font-size: 48px;")  # Размер шрифта
    
            # Устанавливаем начальное время
            self.update_time()
    
            # Устанавливаем размер окна
            self.resize(200, 60)
    
            # Переменные для перемещения окна
            self.dragging = False
            self.drag_position = None
    
        def update_time(self):
            current_time = QtCore.QTime.currentTime()
            self.label.setText(current_time.toString("HH:mm:ss"))
            self.check_color_below_widget()
    
        def check_color_below_widget(self):
            # Получаем глобальные координаты нижней границы виджета
            global_pos = self.mapToGlobal(self.rect().bottomLeft())
    
            # Определяем координаты точки на 10 пикселей ниже
            point_below = global_pos + QtCore.QPoint(0, 10)
    
            # Получаем цвет пикселя в этой точке
            screen = QtWidgets.QApplication.primaryScreen()
            pixel_color = screen.grabWindow(0).toImage().pixel(point_below.x(), point_below.y())
            color = QtGui.QColor(pixel_color)
    
            # Выводим значения RGB для отладки
            print(f"Color below widget: R={color.red()}, G={color.green()}, B={color.blue()}")
    
            # Вычисляем яркость цвета
            brightness = (color.red() * 299 + color.green() * 587 + color.blue() * 114) / 1000
    
            # Устанавливаем цвет текста в зависимости от яркости
            if brightness < 128:  # Темный фон
                self.label.setStyleSheet("color: white; font-size: 48px;")
            else:  # Светлый фон
                self.label.setStyleSheet("color: black; font-size: 48px;")
    
        def paintEvent(self, event):
            # Рисуем прозрачный фон
            painter = QtGui.QPainter(self)
            painter.setRenderHint(QtGui.QPainter.Antialiasing)
            painter.setBrush(QtGui.QColor(0, 0, 0, 0))
    
        def mousePressEvent(self, event):
            if event.button() == QtCore.Qt.LeftButton:
                self.dragging = True
                self.drag_position = event.globalPos() - self.frameGeometry().topLeft()
    
        def mouseMoveEvent(self, event):
            if self.dragging:
                self.move(event.globalPos() - self.drag_position)
    
        def mouseReleaseEvent(self, event):
            if event.button() == QtCore.Qt.LeftButton:
                self.dragging = False
    
    
    if __name__ == '__main__':
        app = QtWidgets.QApplication(sys.argv)
        clock = ClockWidget()
        clock.show()
        sys.exit(app.exec_())


    673d462f556b5211575721.png
    Ответ написан
    2 комментария
  • Почему после нескольких запросов выдает Remote end closed connection?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Для Ютуба некоторые, м-м-м, трудности - это вы, качки пачек видео. Вот он и борется, как может.
    Ответ написан
    1 комментарий
  • Почему Python закрывается сразу после открытия?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Появляется окошко на долисекунды и сразу же изчезает, из-за этого, я не могу открыть ни один файл, в чем дело?

    Варианта тут 2:
    1.Код написан с ошибками и на каком-то этапе ломается и выполнение скрипта завершается досрочно;
    2.Код работает как надо но, поскольку в нем нет пауз/сложных действий, требующих времени, то скрипт завершает работу;
    В каждом из случаев по завершению скрипта консоль закроется. Для того, чтобы не происходило этого, нужно запускать скрипт через командную строку, а не проводник
    Ответ написан
    Комментировать
  • Почему тут ошибка?

    @Everything_is_bad
    1. for i in range(1)для какой цели ты написал этот треш?
    2. Где у тебя тут список, чтобы можно было обращаться по индексу?
    открывай учебник и читай про тип данных dict
    Ответ написан
    Комментировать
  • Статья закончена, а ответ на вопросы нет?

    @Everything_is_bad
    причина - тупое копирования без понимания смысла
    Ответ написан
    3 комментария
  • Как обработать ошибку UnicodeDecodeError и при этом продолжить чтение файла?

    drygdryg
    @drygdryg
    Python-разработчик
    Откройте файл в двоичном режиме, читайте его построчно в цикле и пытайтесь отдельно декодировать каждую байтовую строку в строку с помощью .decode(), в одночасье обрабатывая ошибку UnicodeDecodeError:
    with open('1.txt', 'rb') as file:
        for n, binary_line in enumerate(file, start=1):
            try:
                line = binary_line.decode('utf-8')
            except UnicodeDecodeError:
                print(f'Ошибка декодирования строки {n}')
                continue
            ...
    Ответ написан
    2 комментария
  • Как отсортировать многоуровневый словарь с помощью sorted()?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    # j = {...}
    {
      k: {
         **v, 
         'protocols': {
           kk:vv
           for kk, vv in 
           sorted(
             v['protocols'].items(),
             key=lambda kv2: kv2[1],
             reverse=True
           )
         }
      } 
      for k, v in 
      sorted(
        j['10.10.100.100'].items(), 
        key=lambda kv: kv[1]['count'], 
        reverse=True
      )
    }

    Но вы лучше не делайте таким нечитабельным однострочником. Соберите заново нужные словари в обычных классических циклах, иначе такой код нельзя будет поддерживать норамльно.
    Тут смысл в том, что у sorted есть необязательный аргумент, куда можно передать функцию извлечения ключа сортировки. Перебираете сортируемые словари парами (ключ-значение) в нужном порядке и собираете в новые словари.
    Ответ написан
    Комментировать
  • Почему все говорят что писать ботов это сложно?

    Dr_Elvis
    @Dr_Elvis
    В гугле забанен
    Если нужно сделать Эхо-бот, то этого достаточно.
    Если чуть более интереснее, то тут нужно много логики, знание языка, библиотек. На этом как раз таки начинающие программисты и запинаются. Более-менее опытному программисту написать бота не сложно и везде в уроках пишут что это легко, но не упоминают о том что легко только если программист знает хотя бы основы или хотя бы есть желание их изучить.
    Ответ написан
    Комментировать
  • Почему все говорят что писать ботов это сложно?

    Vindicar
    @Vindicar
    RTFM!
    А сложность начинается, как только задачи, стоящие перед ботом, перерастают уровень примера в документации видеотуториале пятилетней давности.

    Нужно сделать несколько под-команд у команды. Напишу цепочку if-elif-else, делов то. Ой, а теперь простыня кода на пять экранов, в которой фиг чего найдёшь. Потому что нет привычки структурировать код.

    Нужно, чтобы несколько команд/событий формировали цепочку (сценарий). Например, пользователь отправил тре сообщения, первое с именем, второе с возрастом, третье с адресом. Ой, а как это сделать вообще? Не зная понятия "конечный автомат" (finite state machine, FSM), очень трудно догадаться, как тут поступить.

    Нужно, чтобы ботом могли пользоваться несколько человек. Ой, их данные перепутались! Потому что бот использует глобальные переменные.

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

    Нужно добавить боту графический интерфейс - админку. Ой, а работает или интерфейс, или сам бот! Потому что нужно представлять, как устроено большинство GUI-фреймворков, и как устроена асинхронное приложение. А заодно понимать многопоточность, вопросы синхронизации действий между двумя потоками, и особенности работы с asyncio в многопоточных приложениях. Потому что одним потоком тут обойтись будет очень непросто.

    Нужно хранить данные в БД. Ой, а почему у меня проблемы при записи в БД имени пользователя? А потому что погромист собирает SQL-запрос через форматирование строк. Надо было почитать доки, чтобы наткнуться на prepared statements, они же parameterized queries.

    Нужно хранить данные в БД. Вот только данные имеют связи многие-ко-многим. Я знаю! Я буду просто добавлять или удалять столбцы в таблицу! Потому что не освоены даже азы проектирования БД. Тут уже nuff said. И да, я такое видел на этом сайте.

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

    Vindicar
    @Vindicar
    RTFM!
    1. Включи логику.
    2. Рукалицо.
    3. Поменяй эти две строки местами.

    Рукалицо, потому что достаточно немного подумать, чтобы понять в чём дело.
    Ты сначала присваиваешь значение в w3x3, а потом это уже изменённое значение присваиваешь в temp.
    Потому у тебя все три переменные и имеют одно и то же значение.
    Если сначала присвоить temp = w3x3, а потом уже обновлять w3x3, то тогда в temp будет лежать значение до изменения... но только при условии что это какой-то из неизменяемых типов, вроде чисел, строк или кортежей из них. Если это изменяемый объект, вроде списка, словаря или обычного класса, то не прокатит.
    Ответ написан
    Комментировать
  • Как написать свой компилятор?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Трансляторы
    Седой и строгий
    Содержимое этой книги в ответ не вместится.
    60b76e70c748b529799442.jpeg
    А ваш вопрос на столько общий, что короче не получится.
    Ответ написан
    3 комментария
  • Как сделать относительный импорт без родительского пакета?

    Maxsior
    @Maxsior
    loading...
    Если скрипт запускается из корневой папки (`python dir/module2.py`), то вам не нужен относительный импорт, используйте абсолютный `from module1 import *`, пути будут вычисляться от корня проекта.

    Но стоит всё-таки посмотреть на реорганизацию файловой структуры проекта, ради интереса хотя бы)
    Посмотрите, как сделано у крупных библиотек.
    Ответ написан
    Комментировать
  • Как сделать относительный импорт без родительского пакета?

    @Khamzabek
    Один из способов решения этой проблемы состоит в добавлении директории проекта в sys.path. Это можно сделать в самом начале module2, например так:

    import os
    import sys

    # Добавляем путь к директории проекта в sys.path
    project_directory = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
    sys.path.append(project_directory)

    # Теперь можно импортировать module1
    from module1 import *
    Ответ написан
    1 комментарий
  • Как сделать относительный импорт без родительского пакета?

    Vindicar
    @Vindicar
    RTFM!
    Никак. Пакеты могут импортировать другие пакеты на одном с ними уровне или уровнем ниже, но не могут импортировать файлы из пакетов уровнем выше.

    Если, конечно, не манипулировать механизмом импорта. Он это позволяет, но обычно овчинка выделки не стоит.
    Так что проще закинуть module1 в каталог(пакет) и импортировать его как package1.module1.

    А вообще очень странное решение - почему скрипт верхнего уровня в каталоге, а импортируемые модули - нет?
    Ответ написан
    Комментировать
  • Какая технология актуальна для создания приложения на python под android?

    @dima20155
    you don't choose c++. It chooses you
    Kivy, Qt (для питона он представлен библиотеками PyQt6, PySide2 или их более старые версии) так позволяет собирать приложение под android, но там все не так тривиально как с Kivy.
    Также вот что предлагает google, но лично мною оные опробованы не были, поэтому советовать не берусь.
    Но лучше выбирать специально созданные для android платформы языки.
    Ответ написан
    3 комментария
  • Random в питоне не выполняет свою функцию, используясь через def,как исправить?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Все он меняет...
    >>> import random
    >>> def test():
    ...     return random.randint(0, 10)
    ...
    >>> test()
    9
    >>> test()
    0
    >>> test()
    0
    >>> test()
    1
    >>> test()
    3
    >>> test()
    9
    >>> test()
    7
    >>>
    Ответ написан
    1 комментарий
  • Вредна ли быстрая зарядка для аккамуляторов ПК/смартфонов?

    вредно в долговечном периоде. заметно будет через года 3 или более. моему телефону 2 года, заряжаю 90%-95% быстрой зарядкой. и редко когда в дороге от повербанка без быстрой зарядки, и все хорошо,
    Ответ написан
    Комментировать
  • Как выводить людей списком в 1 сообщение?

    Vindicar
    @Vindicar
    RTFM!
    str.join()

    Сначала учи язык, потом бросайся писать ботов.
    Ответ написан
    2 комментария