Задать вопрос
  • PyQt6. Как сохранить изображение QPixmap в файл?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    import sys
    
    from PyQt6.QtGui import QPixmap
    from PyQt6.QtWidgets import QApplication
    
    app = QApplication(sys.argv)
    
    pixmap = QPixmap(r"path/to/your/image.jpg")
    pixmap.save(r"path/to/your/image.jpg", "JPG")
    Ответ написан
    Комментировать
  • Как решить проблему Expected Expression?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    "LIMIT 5 " & _ - ожидает что строка будет продолжена.

    SQLStr = "SELECT cellName as NSector, SUBSTRING(CAST(cellName as CHAR),1,6) as SiteName " & _
                "FROM LNCEL_begin " & _
                "LIMIT 5"

    Разбиения одной инструкции на несколько строк: https://learn.microsoft.com/ru-ru/dotnet/visual-ba...
    Ответ написан
  • Что за способ представления float через 4 byte и int?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    import struct
    
    float_value = 3.50999999
    
    # Преобразуем float в байты
    byte_value = struct.pack('f', float_value)
    
    # Преобразуем байты в целое число
    int_value = int.from_bytes(byte_value, byteorder='little')
    print(int_value)
    Ответ написан
    1 комментарий
  • Как сделать значок своего сервера в дискорд, который сможет отображаться около других участников?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Если я правильно понял о чём речь, то это устанавливается в настройках роли.
    Нужен буст.
    6727e02fc1c18080760221.png
    Ответ написан
  • Как обнаружить и остановиться на первом переносе строки?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    // Извлекаем текст из <p> с учетом переноса строки
    $content = preg_replace_callback(
        '#<p>(.*?)(?:<br>|</p>)#s',
        function ($matches) {
            return $matches[1]; // Возвращаем текст до первого <br> или </p>
        },
        $content
    );
    Ответ написан
    Комментировать
  • Как создать дропдаун с мультивыбором в google spreadsheets через скрипт?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    А средствами самого Google Sheets не устроит?
    Данные -> Настроить проверку данных -> Добавить правило -> Создать элементы -> Поставить галку "разрешить выбор нескольких объектов".
    67256eccb10ce472968577.png
    Ответ написан
  • Не получается спарсить ссылку с Binance?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Ссылки генерируются динамически: в вашем r.text нет искомых ссылок. Без использования браузера под капотом не получится.

    from playwright.sync_api import sync_playwright
    
    with sync_playwright() as p:
        browser = p.chromium.launch()
        page = browser.new_page()
        page.goto('https://www.binance.com/ru/support/announcement/новые-листинги-криптовалюты?c=48&navId=48&hl=ru')
    
        # Ждем, пока контент загрузится
        page.wait_for_timeout(2000)
    
        # Извлекаем ссылки
        links = page.query_selector_all('a[class="css-1w8j6ia"]')
        for link in links:
            href = link.get_attribute('href')
            if href:
                full_url = f"https://www.binance.com{href}"
                print(full_url)
    
        browser.close()
    Ответ написан
    1 комментарий
  • Как в Гугл таблицах создать кнопку в ячейке, чтобы при нажатии вносилась сегодняшняя дата (или время)?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    0. Через создание своего меню. Будет по нажатию одной кнопки.
    function insertStaticTime() {
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      var currentTime = new Date();
      var formattedTime = Utilities.formatDate(currentTime, Session.getScriptTimeZone(), "dd.MM.YYYY HH:mm");
      
      // Вставляем текущее время в ячейку A1 (можете изменить на нужную ячейку)
      sheet.getRange("A1").setValue(formattedTime);
    }
    
    function onOpen() {
      var ui = SpreadsheetApp.getUi();
      ui.createMenu('Custom Menu')
          .addItem('Insert Current Time', 'insertStaticTime')
          .addToUi();
    }

    1. Если хочется кнопок (не знаю насколько это удобно, есть некоторые сомнения).
    Buttons in Google Sheets: https://spreadsheet.dev/buttons-in-google-sheets
    В качестве скрипта что-нибудь такое:
    function insertCurrentDateTime() {
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Получаем активный лист
      var currentDateTime = new Date(); // Получаем текущую дату и время
      sheet.getRange('A1').setValue(currentDateTime); // Вставляем дату и время в ячейку A1
    }

    67249d315fb41363471663.png
    Ответ написан
    2 комментария
  • Какая ошибка в коде?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    1. Составные конструкции имеет смысл писать так:
    case f of
        1 : begin 
                R1:=(a*sqrt(3)/4);
                writeln('R1=',' ',R1);
                { что-то ещё... }
            end;

    2. Есть большие сомнение что в R1 после этого: a*sqrt(3)/4) будет integer. Подумайте над этим.

    3.
    program case14;
    var f : integer;
    var a, R1, R2, S: Real; 
    begin
        writeln ('Введите цифру от 1 до 4 включительно!');
        Readln(f);
        Writeln('Введите значение стороны равностороннего треугольника');
        Readln(a);
    case f of
        1:  
            begin
                R1:=(a*sqrt(3)/4);
                writeln('R1=',' ',R1);
                R2:=R1*2;
                writeln('R2=',' ',R2);
                S:=sqr(a)*sqrt(3)/4;
                writeln('S=',' ',S);
            end;
    end;
    end.
    Ответ написан
    3 комментария
  • Как при нажатие на клавишу клавиатуры применять функцию обработчик в pyqt5?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    В цикле создания кнопок сразу их инициализировать, используя метод setShortcutкласса QPushButton, чтобы связать функцию с конкретной клавишей?
    for i in range(10):
        number_i = QPushButton(str(i))
        number_i.setShortcut(keys[i])
        number_i.clicked.connect(lambda i=i: text_input(i))
        but_num.append(number_i)


    То же и для операций:
    but_op = []
    operations = ["+", "-", "*", "/"]
    for op in operations:
        button = QPushButton(op)
        button.setShortcut(QKeySequence(Qt.Key_Plus if op == "+" else Qt.Key_Minus if op == "-" else Qt.Key_Asterisk if op == "*" else Qt.Key_Slash))
        button.clicked.connect(lambda op=op: operations_input(op))
        but_op.append(button)
    Ответ написан
    Комментировать
  • Чем можно заменить программу ArtCAM?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Пользуюсь Vectric Aspire. Пробовал многие, на мой взгляд лучшая (для дома, хобби).
    Ответ написан
    Комментировать
  • Почему не работает код python для телеграмм бота?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Если используете telebot, то не логичнее ли его и импортировать?
    import telebot

    Если по какой-то неведомой причине имя таки должно быть telegram, то импортируйте так:
    import telebot as telegram

    З.Ы. Есть ощущение, что вы запутались в библиотеках, пишите о telebot'e (и используете его тег), а синтаксис от python-telegram-bot. И в интерпретаторах: используете venv, а установили пакеты в global (если судить по диалогу с Balavnik).
    Ответ написан
    Комментировать
  • Как запустить одну и ту же функцию с разными параметрами одновременно?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Использовать multiprocessing?

    from multiprocessing import Process
    
    ...
    if __name__ == '__main__':
        while True:
            processes = []
            processes.append(Process(target=main, args=('https://rust.tm/item/5358808098-0-Shipping%20Container%20Garage%20Door/', 'Shipping Container Garage Door', 60)))
            processes.append(Process(target=main, args=('https://rust.tm/item/5518269987-0-Abyss%20Vest/', 'Abyss Vest', 140)))
            processes.append(Process(target=main, args=('https://rust.tm/item/4136069987-0-Weather%20Large%20Wood%20Box/', 'Weather Large Wood Box', 100)))
    
            for process in processes:
                process.start()
    
            for process in processes:
                process.join()
    
            time.sleep(5)  # Задержка перед следующим циклом
    Ответ написан
    Комментировать
  • Обработка ошибки в telebot, как сделать обработку на ошибку 409?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Так?
    Написать класс, где будете обрабатывать ошибку и передать его в exception_handler при инициализации бота.
    import telebot
    
    
    class ExceptionHandler(telebot.ExceptionHandler):
        def handle(self, exception):
            print('Ооооошибка 409!:', exception)
            return True
    
    bot = telebot.TeleBot('YOUR_API_TOKEN', exception_handler=ExceptionHandler())
    bot.polling(none_stop=True)
    Ответ написан
    1 комментарий
  • Почему парсер не собирает данные и записывает пустые значения?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Есть несколько моментов:
    1. Про длинный кусок кода: он и не будет работать так, как вы хотите, потому что вы передаёте аргумент with_extra_data=True в свою самописную функцию, а в parser.get_flats() - нет. Соответственно он и не парсит дополнительные поля, отсюда и: "пробовала вывести ключи: смотрю, а их там тупо нет".
    Должно быть:
    data = parser.get_flats(deal_type=deal_type, rooms=rooms, with_extra_data=True,  additional_settings={"start_page": page, "end_page": page})


    2. Если вы действительно использовали эти прокси (а не просто привели их для примера), то это бессмысленно - они нерабочие. Прокси из свободного доступа редко долго живут, а тут они вообще из примера на pypi.org / github.

    3. Вёрстка сайтов постоянно изменяется, в том числе и для противодействия парсингу. Текущая версия циана не имеет<span> c текстом "Тип жилья", а именно такой селектор использовался в библиотеке парсера, следовательно он всегда будет отдавать -1 для object_type.

    4. Если вы всё-таки хотите парсить сайт, используя cianparser, то вам нужно внести несколько изменений в файл библиотеки: "Путь до вашего проекта\venv\Lib\site-packages\cianparser\flat\page.py".
    В функцию__parse_flat_offer_page_json__(self)после инициализации словаря page_data, добавить:
    ot = self.offer_page_soup.select_one('[data-name="OfferSummaryInfoItem"] p:nth-of-type(2)').get_text()
    page_data["object_type"] = ot

    и закомментировать строчки:
    # if "Тип жилья" == span.text:
    #     page_data["object_type"] = spans[index + 1].text


    Результат:
    671dbfa43dc32277607933.png
    Ответ написан
    3 комментария
  • Как это сделать в Excel?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Так?
    =REGEXREPLACE(A1; CHAR(10); ";" & CHAR(10))

    6719759bea3ea835827449.png
    Ответ написан
    Комментировать
  • Как подтягивать данные из одной ячейки в другую при соблюдении условий?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Так?
    =VLOOKUP(A1;'Лист2'!$A$1:$B$5;2)

    В общем виде: =VLOOKUP(запрос; диапазон; индекс)
    Если не понятно по синтаксису, то здесь максимально наглядно, что-откуда-куда: https://vlookup.com/google-sheets/vlookup-another-sheet
    Ответ написан
    Комментировать
  • Как связать код Python и GUI на wxPython?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    6717cf333e689297739155.png
    Код
    import wx
    
    class MyFrame(wx.Frame):
        def __init__(self, *args, **kwds):
            kwds["style"] = kwds.get("style", 0) | wx.DEFAULT_FRAME_STYLE
            wx.Frame.__init__(self, *args, **kwds)
            self.SetSize((250, 250))
            self.SetTitle("frame")
    
            sizer_1 = wx.WrapSizer(wx.VERTICAL)
    
            fields = [
                ("Ширина (м)", "a"),
                ("Длина (м)", "b"),
                ("Высота (м)", "h"),
                ("Окно ширина (м)", "o1"),
                ("Окно высота (м)", "o2"),
                ("Дверь ширина (м)", "d1"),
                ("Дверь высота (м)", "d2"),
            ]
    
            # Create grid sizers and controls dynamically
            for label_text, attr in fields:
                grid_sizer = wx.GridSizer(1, 2, 0, 0)
                sizer_1.Add(grid_sizer, 1, wx.EXPAND, 0)
    
                label = wx.StaticText(self, wx.ID_ANY, label_text)
                grid_sizer.Add(label, 0, wx.ALL, 1)
    
                text_ctrl = wx.TextCtrl(self, wx.ID_ANY, "")
                setattr(self, attr, text_ctrl)  # Store the text control in the instance
                grid_sizer.Add(text_ctrl, 0, 0, 0)
    
            # Create a horizontal sizer for the result and button
            h_sizer = wx.BoxSizer(wx.HORIZONTAL)
    
            # Result text control
            self.itogo = wx.TextCtrl(self, wx.ID_ANY, "")
            self.itogo.SetBackgroundColour((171, 171, 171))
            h_sizer.Add(self.itogo, 1, wx.EXPAND | wx.ALL, 5)
    
            # Calculate button
            self.button_1 = wx.Button(self, wx.ID_ANY, "Посчитать", size=(110, 21))
            h_sizer.Add(self.button_1, 0, wx.ALL, 5)
            self.button_1.Bind(wx.EVT_BUTTON, self.onclick)
    
            # Add the horizontal sizer to the main sizer
            sizer_1.Add(h_sizer, 0, wx.EXPAND, 0)
    
            self.SetSizer(sizer_1)
            self.Layout()
    
        def onclick(self, event):
            a = float(self.a.GetValue())
            b = float(self.b.GetValue())
            h = float(self.h.GetValue())
            o1 = float(self.o1.GetValue())
            o2 = float(self.o2.GetValue())
            d1 = float(self.d1.GetValue())
            d2 = float(self.d2.GetValue())
    
            result = round(a * 2 * h + b * 2 * h - o1 * o2 - d1 * d2, 2)
            self.itogo.SetValue(str(result))
    
    class MyApp(wx.App):
        def OnInit(self):
            self.frame = MyFrame(None, wx.ID_ANY, "")
            self.SetTopWindow(self.frame)
            self.frame.Show()
            return True
    
    
    if __name__ == "__main__":
        app = MyApp(0)
        app.MainLoop()
    Ответ написан
    1 комментарий
  • Как в tk.Label отобразить содержимое двух списков один над другим?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Речь про Tkinter?
    Если я правильно понял то, что вы хотите:
    l = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    label_text = '\n'.join(' '.join(map(str, sublist)) for sublist in l)
    label = tk.Label(text=label_text)
    Ответ написан
  • Почему pypsexec не выводит приложение на экран?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    1. Используйте r перед ф-строкой во избежание нескольких invalid escape sequence:
    command = rf'C:\PsTools\psexec.exe -i 1 -s \\192.168.11.18 -u user -p password calc.exe'

    У меня код с subprocess отрабатывает корректно:
    import subprocess
    
    
    def f():
        command = rf'C:\Portable\Sysinternal\PsExec.exe -i 1 -s \\192.168.0.3 -u user -p password calc.exe'
        return subprocess.call(command, stdout=subprocess.DEVNULL)


    2. Вариант с pypsexec у меня отрабатывает некорректно - GUI запускается, но с артефактами.
    Помимо interactive=True, надо указать номер сессии (можно узнать через cmd -> query user), например: interactive_session=1. Это аналог -i 1 в psexec.

    c.run_executable (executable: "cmd.exe", arguments=r"/c start calc.exe", interactive=True, interactive_session=1)
    Ответ написан
    Комментировать