• Запросы к API с помощью скрипта на python?

    @bbkmzzzz
    Это почти обычная пагинация
    По доке afterIndexKey, для получения следующей пачки документов, нужно передать id последнего документа в предыдущем списке, в параметре afterindexkey
    afterIndexKey = None 
    while True:
        response = request_data(afterIndexKey )
        afterIndexKey = process_documents(response) # возвращаем последний IndexKey, если это не последняя запись (номер совпадает со значением в поле total)
        if afterIndexKey is None: # если None - прерываем цикл
            break
    Ответ написан
    Комментировать
  • Как правильно обращаться к переменной класса из другого класса?

    @bbkmzzzz
    def game_won(self):
           # if roulette.choice_num == roulette.twist_num: # а что такое roulette? такого имени в текущем пространстве имен нет
             if self.roulette.choice_num == self.roulette.twist_num: # обращаемся к именам в пространстве экземпляра.
                print('You won!')


    Так как Roulette.twist_num не определен в __init__, то пока не выполнится метод, в котором определяется это имя - будут ошибки. -> все поля класса экземпляра инициализируем в __init__ хотя бы тем же None.

    ---------

    except Exception:
                    print('Опаньки...Что-то ты сделал не так...\n')


    Перехват всего без остановки - не надо так. Ловим только определенные исключения, даем остальным даем свалить программу, проще будет в отладке и понимании, что же именно пошло не так. Смотрим на конструкцию
    except Exception as variable_name_here:
        ...
        raise variable_name_here


    ----

    def input_bet(self): # можно сильно упростить
                try:
                    self.input_bet = int(input('Ваша ставка: \n'))
                except Exception:
                    print('Не число')
                    self.input_bet = None # в случае проблемы - устанавливаем дефолтное значение. Как только появится основной цикл - проблема вылезет.
    Ответ написан
    1 комментарий
  • Алгоритм Евклида?

    @bbkmzzzz
    Def gcd(a, b) :
        return a If b==0 else gcd(b, a%b)
    # эквивалентно
    def gcd(a,b):
        if b == 0:
            return a
        else:
            #вызываем сами себя (рекурсия)
            gcd(b, a % b)
    Ответ написан
    2 комментария
  • Скрытие виджета в PyQt5, как скрывать картинку?

    @bbkmzzzz
    619953cc750c5692669410.jpeg
    1) имена. pix != pix1
    2) В Вашем случае, QPixmap отображается на QLabel, скрывайте QLabel
    QWidget.hide()
    Ответ написан
    Комментировать
  • Ввожу 8 9 10 min() выбирает 9 max() 10. max - min = -1. Как так?

    @bbkmzzzz
    Потому что нужно почитать документацию на функцию max
    Если max\min передать строки - он найдет строку(!) подходящую лексиграфически, то есть в алфавитном порядке.
    Строка '10' < '9', так как 1 идет раньше 9.

    Не надо переопределять встроенные имена. Считайте их зарезервированными и недоступными для именования переменных
    max = max(s)
    min = min(s)
    Ответ написан
    Комментировать
  • Выделение экрана зажатием мыши как в lightshot на Pyqt5?

    @bbkmzzzz
    На весь экран окно, прозрачное, запоминаем координаты мыши нажатия - координаты мыши окончания - делаем скриншот, вырезаем кусок по координатам начала и конца
    Ответ написан
  • Как правильно реализовать добавление данных в таблицу PyQt5?

    @bbkmzzzz
    Qt устроен так, что дергать методы интерфейса можно только из того потока, в котором этот интерфейс работает. Таков путь.

    При наследовании от QThread - нужно переопределять метод run, он будет вызван при старте потока, либо его не реализовывать, и тогда срабатывать по сигналам.
    Где запуск потока?
    self.worker.start()

    Есть еще вариант.
    Использовать moveToThread, тогда ВСЕ СЛОТЫ класса, наследованного от QObject (нужно пометить декоратором слотов) будут выполняться в отдельном потоке
    self.worker = QThread()
    self.worker.start()
    
    self.some_class.moveToThread(self.worker)


    И еще вариант.
    QThreadPool + QRunnable

    P.S.
    Классы ВСЕГДА называйте с заглавной буквы
    Все атрибуты класса инициализируйте в __init__
    Ответ написан
    Комментировать
  • Почему закрывается второе окно PyQT?

    @bbkmzzzz
    def onClicked(self):    # сама функция для показа
            about = Information()
            about.show()

    После завершения функции все локальные переменные уничтожаются. Сохраните ссылку на новое окно в основной класс

    class Information(QtWidgets.QMainWindow):  # не надо наследоваться от двух классов сразу
        """Класс со вторым окном"""
    
        def __init__(self):
            super().__init__()
            self.ui = Ui_About()
            self.ui.setupUi(self)
    
            self.information_window = Information() # если передать родителя, и установить Modality = True, окно будет модальным
    
        def onClicked(self):    # сама функция для показа
            self.information_window.show()
    Ответ написан
  • Как лучше делать return?

    @bbkmzzzz
    В данном конкретном случае - лучше второй вариант
    def test(a):
        if a == "abc":
            result = True
        elif a == "123":
            result = False
        # если a !=  "abc" и a != "123" будет выброшено исключение, UnboundLocalError, так как result не определен
        return result

    def test(a):
        if a == "abc":
            return True
        elif a == "123":
            return False
        # если a !=  "abc" и a != "123" будет возвращено None, как значение при отсутствии или пустом return

    Если функция сложная, return - один, значение по умолчанию инициализировано в начале функции, если что-то простое и наглядное, можно и несколько сделать, на мой взгляд
    Ответ написан
    Комментировать
  • Как поменять стиль панели задач в Pyqt5?

    @bbkmzzzz
    Никак, это системное оформление окна операционной системы

    Можно скрыть ее полностью, и реализовать свою заново (рамки вокруг приложения тоже придется делать самостоятельно).
    Ответ написан
    Комментировать
  • Как обновить PyQt приложение?

    @bbkmzzzz
    QTimer в помощь
    Ответ написан
    Комментировать
  • PyQt5 как писать логику в отдельном файле?

    @bbkmzzzz
    На первых порах - достаточно вынести интерфейс в отдельный модуль
    тык
    Ответ написан
    Комментировать
  • Как получить текст из QListWidget?

    @bbkmzzzz
    QListWidget содержит в себе QListWidgetItem, в котором уже и есть текст (если не добавлено своих виджетов)
    Для получения текста нужно:
    • Получить индекс QListWidgetItem`а, который выбран
    • Получить QListWidgetItem по индексу
    • Получить текст методом text

    Код покажите, без кода только такие ответы будут
    Ответ написан
    Комментировать
  • Как добавить текст в QScrollArea в процессе выполнения программы?

    @bbkmzzzz
    Добавить компоновщик в виджет, который будет добавлен в QScrollArea, а ему уже кормить новые виджеты.
    QTDesigner не сильно поможет, он только формочки рисовать позволит, все остальное в коде.
    Ответ написан
  • Текст QLabel выходит из рамок?

    @bbkmzzzz
    А где вызов setWidget?
    import sys
    
    from PySide2.QtWidgets import QApplication, QScrollArea, QLabel
    
    
    class Main(QScrollArea):
        def __init__(self):
            super(Main, self).__init__()
            self.resize(300, 300)
    
            # вариант 1, не работает
            # self.label = QLabel('some text', self)
    
            # вариант 2, работает
            self.label = QLabel("some text")
            self.setWidget(self.label)
    
            self.label.setStyleSheet("background-color: rgba(255,0,255)")
            self.label.resize(500, 100)
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        ex = Main()
        ex.show()
        sys.exit(app.exec_())


    Дока
    Ответ написан
    Комментировать
  • PyQt5 QButtonGroup() как передать имя нажатой кнопки в функцию?

    @bbkmzzzz
    Ответ написан
    Комментировать
  • Многопоточность в Python (PyQt5)?

    @bbkmzzzz
    Все взаимодействие потоков и графики - выносить в сигналы.
    You must pass to it all the data it needs to work with
    - загружайте перед стартом все необходимые данные, если данные изменились, и воркеру надо их получить, отсылайте воркеру с помощью сигнала. Когда воркер сделал часть, результат он отсылает в сигнале.
    Весь Qt работает на сигналах, в многопоточном режиме разници не сильно много, только в том, что для взаимодействия с графикой нужно использовать только сигналы.

    UPD, у moveToThread есть особенность, все слоты класса будут выполнятьсяв отдельном потоке.
    В таком виде, как есть сейчас, вам будет очень сложно в многопоток у Qt. Классы, поля, экземпляры, общая структура приложения, система сигналов\слотов Qt, события, варианты потоков (QThread, QRunnable, QThreadPool) - про все про это надо читать и учить питон.
    Ответ написан
  • PyQT5 не отвечает, как исправить?

    @bbkmzzzz
    Бесконечный цикл в один поток, все работает так, как и должно.
    while True:
            time.sleep(0.1)
            pyautogui.doubleClick()
            time.time() # зачем это?


    Учить питон, разбираться с Qt, добавлять поток, в котором будет выполняться код кликера.
    Ответ написан
    Комментировать
  • Как найти None в списке и заменить его?

    @bbkmzzzz
    заменит все, что не отвечает условию
    if something
    (пустые строки, например)
    example = ['1', '2', None]
    for pos, val in enumerate(example):
        if not val:
            example[pos] = 'None'
    Ответ написан
    Комментировать