Задать вопрос
  • Почему Python не импортирует и не видит библиотеки Flask?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    getargspec() удалена из 3.11

    Используйте более старую версию питона (<3.11). Или убедитесь что зависимые модули используют getfullargspec().
    Первое проще.
    Ответ написан
    Комментировать
  • Поддержка Blockquote в pyrogram?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
  • Discord bot не делает что я хочу, как исправить?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Не создали бота (IDE вам подчёркивает).
    intents = disnake.Intents.default()
    intents.message_content = True
    
    bot = disnake.Client(intents=intents)
    
    # или так (про разницу сами прочтите):
    # from discord.ext import commands
    # bot = commands.Bot(command_prefix='!', intents=discord.Intents.all())

    Посмотрите как создаётся минимальный бот:
    https://docs.disnake.dev/en/stable/quickstart.html
    или по-русски: https://ru.guide.disnake.dev/getting-started/initi...

    З.Ы. Ну и сомнительно, что нужно смешивать discord.py и disnake.py.

    И правила: https://qna.habr.com/help/rules#3.8
    Ответ написан
  • Как запустить счëтчик по открытию приложения?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    import asyncio
    import psutil
    
    
    def counter():
        pass
    
    
    async def f():
        while True:
            if any(process.name() == 'notepad++.exe' for process in psutil.process_iter()):
                counter()
                break
            await asyncio.sleep(1)
    
    
    asyncio.run(f())
    Ответ написан
    Комментировать
  • Как в Python удалить текст до определённых символов?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    import re
    
    s = "57-09-71 МегаФонe-mail: ? vy:juf , h 5555y676hr965 silava.a@ttgr :  https://loads.ru"
    
    url_pattern = r'https?://\S+'
    url_match = re.search(url_pattern, s)
    
    if url_match:
        url = url_match.group(0)
        print(url)
    else:
        print("Ссылка не найдена")
    
    >>> https://loads.ru


    Но, если формат строки не меняется, то и обычный сплит сработает:
    print(s.split(' ')[-1])
    Ответ написан
    4 комментария
  • Почему не пингуется Whonix Gateway и Whonix Workstation?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    ICMP can’t go over Tor.
    https://forums.whonix.org/t/ping-operation-permitt...

    Ping commands should not work for external addresses from the Whonix-Workstation. The reason is ICMP traffic is not proxied and it is filtered by Whonix Firewall (/usr/bin/whonix_firewall) because Tor does not support UDP. For example, ping google.com will not work. To make ping functional, see the Allow UDP chapter.
    Ответ написан
    Комментировать
  • Можно ли автоматически подсчитывать количество выбранных значений в выпадающем списке Google Таблиц?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    =IF(A1=""; 0; LEN(A1) - LEN(SUBSTITUTE(A1; ","; "")) + 1)

    67a138ae580a7954455402.png
    Ответ написан
    1 комментарий
  • Как разместить в tkinter окне matplotlib-фигуру, выходящую за границы экрана?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Код
    import tkinter as tk
    
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
    from matplotlib.figure import Figure
    from PIL import Image, ImageTk
    
    
    class ScrollableLabel(tk.Frame):
        def __init__(self, master, **kwargs):
            super().__init__(master, **kwargs)
    
            # Переменная для хранения LaTeX-текста
            self.latex_text = r'$\\sum_{i=0}^5(x_i); $' * 100
    
            # Создаем Canvas и Scrollbar (вертикальный и горизонтальный)
            self.canvas = tk.Canvas(self, bg="white")
            self.v_scrollbar = tk.Scrollbar(self, orient="vertical", command=self.canvas.yview)
            self.h_scrollbar = tk.Scrollbar(self, orient="horizontal", command=self.canvas.xview)
    
            # Настраиваем Canvas для поддержки прокрутки
            self.scrollable_frame = tk.Frame(self.canvas, bg="white")
            self.scrollable_frame.bind(
                "<Configure>",
                lambda e: self.canvas.configure(
                    scrollregion=self.canvas.bbox("all")
                )
            )
            self.canvas.create_window((20, 20), window=self.scrollable_frame, anchor="nw")
            self.canvas.configure(yscrollcommand=self.v_scrollbar.set, xscrollcommand=self.h_scrollbar.set)
    
            # Размещаем Canvas и Scrollbar
            self.v_scrollbar.pack(side="right", fill="y")
            self.h_scrollbar.pack(side="bottom", fill="x")
            self.canvas.pack(side="left", fill="both", expand=True)
    
            # Привязываем прокрутку колесом мыши
            self.bind_mouse_wheel()
    
            # Создаем LaTeX-изображение
            self.create_latex_label()
    
        def bind_mouse_wheel(self):
            """
            Привязывает прокрутку колесом мыши к Canvas.
            """
            # Для вертикальной прокрутки (Windows/Linux)
            self.canvas.bind_all("<MouseWheel>", self._on_mouse_wheel)
            # Для горизонтальной прокрутки (Shift + колесо мыши)
            self.canvas.bind_all("<Shift-MouseWheel>", self._on_shift_mouse_wheel)
    
        def _on_mouse_wheel(self, event):
            """
            Обрабатывает событие вертикальной прокрутки колесом мыши.
            """
            if event.num == 4 or event.delta > 0:  # Прокрутка вверх
                self.canvas.yview_scroll(-1, "units")
            elif event.num == 5 or event.delta < 0:  # Прокрутка вниз
                self.canvas.yview_scroll(1, "units")
    
        def _on_shift_mouse_wheel(self, event):
            """
            Обрабатывает событие горизонтальной прокрутки колесом мыши (Shift + колесо).
            """
            if event.delta > 0:  # Прокрутка влево
                self.canvas.xview_scroll(-1, "units")
            elif event.delta < 0:  # Прокрутка вправо
                self.canvas.xview_scroll(1, "units")
    
        def create_latex_label(self):
            """
            Создает Label с LaTeX-изображением и добавляет его в scrollable_frame.
            """
            # Создаем фигуру matplotlib для рендеринга LaTeX
            fig = Figure(figsize=(20, 20))  # Размер фигуры
            fig.patch.set_alpha(1)  # Прозрачный фон
            ax = fig.add_subplot(111)
            ax.axis("off")  # Отключаем оси
    
            # Рендерим LaTeX-текст
            ax.text(0.0, 1.0, self.latex_text, fontsize=20, ha="left", va="top", usetex=True)
            # Отчекрыживаем поля
            fig.subplots_adjust(left=0, right=1, bottom=0, top=1)
            # Преобразуем фигуру в изображение
            canvas = FigureCanvasTkAgg(fig, master=self.scrollable_frame)
            canvas.draw()
    
            # Получаем изображение из canvas
            width, height = fig.get_size_inches() * fig.get_dpi()  # Размеры в пикселях
            image = Image.frombytes('RGBA', (int(width), int(height)), bytes(canvas.buffer_rgba()))
    
            # Для версий matplotlib <= 3.8:
            # image = Image.frombytes('RGB', (int(width), int(height)), canvas.tostring_rgb())
            # image.save('lol.png')
            # Преобразуем изображение в формат, поддерживаемый Tkinter
            self.image = ImageTk.PhotoImage(image)
    
            # Создаем Label с изображением и добавляем его в scrollable_frame
            self.label = tk.Label(self.scrollable_frame, image=self.image, bg="white")
            self.label.pack(pady=10)
    
            # Сохраняем ссылку на изображение, чтобы оно не удалялось сборщиком мусора
            self.label.image = self.image
    
        def update_latex_text(self, new_text):
            """
            Обновляет LaTeX-текст и перерисовывает Label.
            """
            self.latex_text = new_text
            # Очищаем scrollable_frame и создаем новый Label
            for widget in self.scrollable_frame.winfo_children():
                widget.destroy()
            self.create_latex_label()
    
    
    if __name__ == "__main__":
        root = tk.Tk()
        root.title("LaTeX в Tk.Label с прокруткой")
    
        # Создаем ScrollableLabel
        scrollable_label = ScrollableLabel(root)
        scrollable_label.pack(fill="both", expand=True, padx=10, pady=10)
    
        # Создаем Entry для ввода текста
        entry = tk.Entry(root, font=("Arial", 14))
        entry.pack(fill="x", padx=10, pady=5)
    
    
        # Создаем Button для обновления текста
        def on_button_click():
            new_text = entry.get() 
            scrollable_label.update_latex_text(new_text) 
    
    
        button = tk.Button(root, text="Обновить", command=on_button_click, font=("Arial", 14))
        button.pack(pady=5)
    
        root.mainloop()

    6797dc8ec49ac263327616.png

    З.Ы. Это решение отображает формулы LaTex и латиницу. Если нужна кириллица, то нужно установить XeLaTeX или LuaLaTeX через MiKTeX (если его используете) или, если вы используете стандартный LaTeX (pdfLaTeX), можно добавить пакет babel. И настроить matplotlib на их использование. Ну, и не забыть, чтобы используемый шрифт поддерживал кириллицу.
    Ответ написан
    3 комментария
  • Как решить проблему с таймзонами при нахождении дельты?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    "иногда" - это, видимо, в момент смены даты.
    Так как start_timeзаведомо "меньше", чем server_time, а вы вычитаете из меньшего большее, то и возникает разница в -1 день.
    Используйте absпри подсчёте дельты:

    from datetime import datetime, timezone
    
    start_time  = datetime(2025, 1, 27, 23, 59, 59, tzinfo=timezone.utc)
    server_time = datetime(2025, 1, 28, 0, 0, 0, tzinfo=timezone.utc)
    delta = start_time - server_time
    print("Дельта:", delta)
    >>> Дельта: -1 day, 23:59:59
    
    abs_delta = abs(start_time - server_time)
    print("Дельта:", abs_delta)
    >>> Дельта: 0:00:01
    Ответ написан
    Комментировать
  • Установка через bash не получается, что делать с заданием?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    19chi91, pip3 попробуйте.
    pip3 install cowsay
    Ответ написан
    Комментировать
  • Почему не обрабатываются нажатия кнопок в pygame?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    splliii, у вас два цикла обработки событий: for event in pg.event.get():, из-за этого не обрабатываются корректно нажатия на кнопки.

    Перепишите логику, используя один цикл.
    Код.
    while running:
        clock.tick(60)
        mouse = pg.mouse.get_pos()
    
        for event in pg.event.get():
            if event.type == pg.QUIT:
                running = False
    
            if game_over:
                if event.type == pg.MOUSEBUTTONDOWN:
                    if WIDTH / 3 <= mouse[0] <= WIDTH / 3 + WIDTH_BUTT0N and HEIGHT / 2.5 <= mouse[1] <= HEIGHT / 2.5 + HEIGHT_BUTTON:
                        game_over = False
            else:
                if event.type == pg.KEYDOWN and generation_happen == 1:
                    if event.key == pg.K_LEFT:
                        board = move_left(board)
                    if event.key == pg.K_UP:
                        board = move_up(board)
                    if event.key == pg.K_DOWN:
                        board = move_down(board)
                    if event.key == pg.K_RIGHT:
                        board = move_right(board)
                    time = 0
                    generation_happen = 0
    
        if not game_over:
            if time is not None:
                time += 1
    
            if is_terminal(board):
                game_over = True
            if time is not None and time >= 10:
                generation_2_or_4(board)
                time = None
                generation_happen = 1
    
            screen.fill(BACK)
    
            for row in range(4):
                for column in range(4):
                    COLOR = colors[board[row][column]]
                    x_play_cell = column * size_of_cell + (column + 1) * margin
                    y_play_cell = row * size_of_cell + (row + 1) * margin
                    pg.draw.rect(screen, COLOR, (x_play_cell, y_play_cell, size_of_cell, size_of_cell))
    
                    if board[row][column] != 0:
                        text = font.render(str(board[row][column]), True, BLACK)
                        screen.blit(text, (35 + x_play_cell, y_play_cell + 25))
        else:
            screen.fill(BACK)
    
            pg.draw.rect(screen, WHITE, [WIDTH / 3, HEIGHT / 2.5, WIDTH_BUTT0N, HEIGHT_BUTTON])
            screen.blit(text, (WIDTH / 3, HEIGHT / 2.5))
    
        pg.display.flip()
    
    pg.quit()

    6781aeb328573116593374.png

    З.Ы. очевидно что с трёхзначными и более числами надо что-то делать, они не влезают в клетку.
    Ответ написан
    Комментировать
  • Как воспроизвести .mp3 файл на Python с помощью PyGlet?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    В путях используйте r.
    song = pyglet.media.load(r"C:\Users\Station\Music\padenie-truby.mp3")
    Ответ написан
    1 комментарий
  • Почему возникает ошибка "length mismatch: expected axis has 3 elements, new values have 4 elements"?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    1. Я бы не стал, если этого нет в условиях, которые вы, быть может, не озвучили, менять сущность первого столбца. Прочёл бы без index_col=0: test_df = pd.read_excel(orders_path)
    2. Переименовывание делал бы уже включая первый столбец:
    test_df.columns = ['Weekday', 'Shop_1', 'Shop_2', 'Shop_3', 'Shop_4']

    3.
    test_df = pd.read_excel(orders_path, index_col=0)
    if not os.path.exists(orders_path):
        print(f"Файл {orders_path} не найден.")

    Делать проверку на наличие файла после того, как уже прочли его в датафрейм? Поменяйте последовательность.
    4. Ну и меня смущает почему тестовая система хочет 3. Возникает вопрос о доп. условиях или что пытаетесь скормить результат тесту, не под той задачей, например.
    Ответ написан
    Комментировать
  • Как убрать экспоненциальную запись числа в input type=number?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    <input type="number" step="0.00000001" id="numberInput" />
    
    <script>
      const input = document.getElementById("numberInput");
    
      input.addEventListener("input", () => {
        const value = parseFloat(input.value);
        if (!isNaN(value)) {
          input.value = value.toFixed(8); // Форматируем до 8 знаков после запятой
        }
      });
    </script>
    Ответ написан
    2 комментария
  • Счет сразу прибавляется и отнимается когда я подбираю спрайт. Что делать?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    1. Жёстко прописывать width, height, наверное, не лучшая идея. Надо подстраивать под разрешение монитора, там где её запустили. Я, запустив, например, не увидел счётчик про который вы говорите.
    2. Строка 84: pygame. --> g <-- uit()
    3. Переменная счётчик жизней count_lifes должна быть глобальной. Сейчас вы её обнуляете в цикле, каждый тик.
    675e97cac1322119685536.png
    Ответ написан
    1 комментарий
  • Как в Python заставить tg-бота выполнять команду с определенной вероятностью?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    import random
    
    random_value = random.random()
    if random_value >= 0.5:
        # посылает ответ
    else:
        pass
    Ответ написан
    3 комментария
  • Направления создание клона Minecraft?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Освоить базовый синтаксис русского языка.
    Ответ написан
    1 комментарий
  • Как правильно создать кнопку используя class, для открытия нового окна (без передачи аргументов, если это возможно)?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Решайте последовательно проблемы.
    Посмотрите, например, что у метода pack() нет таких параметров: https://metanit.com/python/tkinter/2.4.php
    Поменяйте на что-нибудь разрешённое: btnSc.pack(anchor=CENTER)
    И будет запускаться ваше окно с кнопкой на ютуб:
    675bcf788d595340062233.png
    Ответ написан
    2 комментария
  • Как написать автоматизированный тест для тестирования сортировки по цене?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    its_southpaw, [тестил на Win10, Edge].
    1. Что-то не так с селекторами, с теми которые у вас мне не удалось отыскать элементы.
    Для того, чтобы хотя бы был клик по выпадающему меню, использовал такой:
    SORT_BUTTON = (By.XPATH, "(//span[@class='select2-selection select2-selection--single select2-selection--buttoned select2-selection--buttoned-dark select select--sorting'])[1]")

    2. Для SORT_ASC использовал такой:
    SORT_ASC_OPTION = (By.ID, 'select2-catalog_sorting_mobile-7h-result-jsvp-price:asc')

    3. Для SORT_DESC вы вообще решили не писать.
    SORT_DESC_OPTION = (By.ID, 'select2-catalog_sorting_mobile-7h-result-jsvp-price:desc')

    4. В def select_sort_option() добавил небольшую задержку (2-3 секунды) после
    WebDriverWait(self.driver, 10).until(EC.staleness_of(option))
    .

    После этих манипуляций стало так:
    675a4852cde6a196859565.png

    Но второй тест не пройдёт, потому что вот это:
    675a46e898655425277103.png
    Что приводит к: [...11900, 11900, 7735, 11900...], что никак не будет равно отсортированному списку цен в assert.

    З.Ы. если вы хотите читаемую кириллицу в выводе, а не вот это вот:
    test_sort_by_price[\u0426\u0435\u043d\u0430 \u043f\u043e \u0432\u043e\u0437\
    ,
    то добавьте файлик pytest.ini с содержимым:
    [pytest]
    disable_test_id_escaping_and_forfeit_all_rights_to_community_support = True
    Ответ написан
    Комментировать