Ответы пользователя по тегу Python
  • Множественное наследований Python?

    @Sergey6661313
    в python и в qt наследованием обозначаются разные вещи...
    в python имеется в виду что потомки порождаются с такими же методами что и родители, а в qt имеется в виду просто ссылка у потомков о том кто их породил. и у родителей просто список их детей..
    В связи с тем что я не вижу в вашем случае смысла объекту ConnectionClass иметь методы ProfilerAppClass то предположу что вам нужны просто ссылки на детей и родителей.

    class MainWindowClass(QMainWindow):
        def __init__(self, parent)
        super().__init__(parent)
        self.parent = parent  # - просто создаём себе переменную где указываем родителя. Который передаётся при создании экземпляра. 
    
    
    class LoginWindowClass(QWidget):
        def __init__(self, parent)
            super().__init__(parent)
            self.parent = parent
    
    class ConnectionClass(QTcpServer):
        def __init__(self, parent)
            super().__init__(parent)
            self.parent = parent
    
    class ProfilerAppClass():
        def __init__():
            self.childs = {  # и список чайлдов...  хотя QT по идее сам должен был составить подобный список, и вообще не понятно зачем отдельный клас, можно сразу использовать словарь...
                "MainWindow": MainWindowClass(self)
                "LoginWindow": LoginWindowClass(self)
                "Connection": ConnectionClass(self)
            }
            
    ProfilerApp = ProfilerAppClass()
    ProfilerApp.childs.get("MainWindow").show()
    Ответ написан
  • Как правильно пользоваться таймером в PyQt?

    @Sergey6661313
    Ваш код делает именно то что вы и написали.
    timer.start(1000) - запускает таймер
    timer.stop() - останавливает таймер. При чём в нашем случае ещё до реального запуска таймера т.к. app.exec() ещё даже не запущен.
    Каких действий вы от него ожидаете если вы его остановили???
    Ответ написан
  • Как прикрутить GUI к скрипту Python?

    @Sergey6661313
    В общем в крастце
    Вам надо создать обьект класса QApplication
    и в конце кода заместо app.start выполнять QApplication.exec([])
    естественно вам придётся так же создать qwidget и назначить eму setupUi из Ui_Dialog

    и конечно привязать кнопочку к вашей комманде start
    можно так:
    pbStart.clicked.connect(app.start)
    или как написал товарищ tsarevfs

    значения ptt_key присваиваются так:
    hex_str = uidialog.leButtonCode.text() # получаем текст из окошка
    hex_int = int(hex_str, 16) # превращяем в число
    hex_key = hex(hex_int) # обратно в hex
    self.set_ptt_key(hex_int) # И... получите распишитесь.

    Я немного пописал код вы можете глянуть на github

    Ответ написан
  • Зачем люди используют pygame и подобные вещя для создания игр?

    @Sergey6661313
    Я познакомился с Pygame потому что аналога для C просто нет. Есть примеры, и доки. Для C - даже создание окошка является тайной за семью печатями (конечно не для тех кто "в этом варится") для новичков. Просто запустил и работает. Конечно не без неоднозначностей, но их гораздо меньше чем на С.
    Ответ написан
  • Почему кнопка не срабатывает?

    @Sergey6661313
    Ну про глобальную - это я погорячился.... потому что вы её уже сделали дочкой root при создании. (и этого типо хватает)

    Как временное решение могу лишь предложить вызывать show() после создания и указания координат.
    newLabel.show() - это заставит его в любом случае появиться.... но я не знаю является ли это "совсем точно "правильным решением...
    Ответ написан
  • Почему buildozer не работает?

    @Sergey6661313
    Ну вам же ясно написали "If the error is not obvious, please raise the log_level to 2". Попробывали чтоли загуглитьв переводчике что ли... Если ошибка не ясна надо указать "log_level 2" в настроечном фаиле.
    Откройте фаил конфига найдите стройчку log_level раскоментируйте его и поставте двойку. И заного запустите. А полный листинг суда.
    Ответ написан
  • Что написать на Python новичку, чтобы удостовериться в своих знаниях?

    @Sergey6661313
    checkio.org пробовали? да задачки простые, но там есть функция "посмотреть другие варианты решений". И вот там самый смак...
    Ответ написан
  • PyQT браузер и встроенный внутри yandex iframe. Как "починить" кнопку внутри iframe для принятия платежей?

    @Sergey6661313
    Этот вариант на pyqt5 работает. Проверено.

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    import webbrowser
    from PyQt5.QtWidgets import *
    from PyQt5.QtWebEngineWidgets import *
    
    s = str("""<!DOCTYPE html>
             <html>
            <head></head>
             <div style="text-align: center;">
             <iframe frameborder="0" allowtransparency="true" scrolling="no" src="https://money.yandex.ru/quickpay/shop-widget?account=410013878567203&quickpay=shop&payment-type-choice=on&mobile-payment-type-choice=on&writer=seller&targets=asdf&targets-hint=&default-sum=&button-text=01&successURL="" width="450" height="200"></iframe>
             </div>
              <div>
            <a href="http://google.com">TEST LINK</a>
             </div>
             </body>
             </html>""")
    
    
    class MainWindow(QWidget):
        def __init__(self, parent=None):
            QWidget.__init__(self, parent)
            self.resize(700, 400)
            self.view = QWebEngineView(self)
    
            mypage = MyPage(self.view)
            self.view.setPage(mypage)
            mypage.setHtml(s)
    
            grid = QGridLayout()
            grid.addWidget(self.view, 0, 0)
            self.setLayout(grid)
            self.show()
    
    class MyPage(QWebEnginePage):
        def __init__(self, parent):
            super().__init__(parent)
            self.in_window = False      # придумал переменную
    
        def createWindow(self, type):   # которую мы
            self.in_window = True       # тутже изменяем если просится
            return self                 # открытие в новом окне
    
        def acceptNavigationRequest(self, QUrl, type, isMainFrame):
            url_string = QUrl.toString()
            print(type, isMainFrame, QUrl)
            if  self.in_window and type==2 and url_string != "https://money.yandex.ru/quickpay/confirm.xml":
                webbrowser.open(url_string)
                self.in_window = False
                self.setHtml(s)
            return True
    
    
    
    
    if __name__ == '__main__':
        app = None
        if not QApplication.instance():
            app = QApplication([])
        dlg = MainWindow()
        if app: app.exec_()
    Ответ написан
  • PyQt5 - почему не определяет размер шрифта?

    @Sergey6661313
    в pyqt5 Qstring выпилили и считают что str лучше подходит для этого дела.... toPlainText() возвращает str да ещё и без формата (т.е. просто выводит то что видно на экране):
    print (type(text))
    <class 'str'>.

    из которого узнавать шрифт бессмысленно.

    Я вижу выход только - использовать toHtml()
    как то так:

    from PyQt5 import Qt
    app = Qt.QApplication([])
    
    textEdit = Qt.QTextEdit()
    textEdit.show()
    
    secret = "<H4>test<H2>L, <H3>L"
    textEdit.setText(secret)
    
    html = textEdit.toHtml()
    td = Qt.QTextDocument()
    td.setHtml(html)
    
    formats = td.allFormats()
    print(formats)
    
    app.exec_()
    Ответ написан
  • Почему QKeyEvent не работает без окна?

    @Sergey6661313
    События в pyqt могут получать только унаследованные от QObject обьекты. Потому что внутри их кода и кода в библиотеках qt есть код который "посылает" сообщения и вызывает в объектах метод keyPressEvent . Вы же создаёте новый класс Frame и не унаследуете для него никакие Qt-шные функции. Поэтому функция keyPressEvent не будет в нём вызвана никогда.
    Это ответ на вопрос "почему"... а вот ответить как сделать правильно на Qt я не могу...

    Однако могу посоветовать копать в сторону сторонней библиотеке keyboard которая в принципе может и без Qt:
    import keyboard
    
    while True:
        print(keyboard.is_pressed("space"))   # printed True or False
    Ответ написан
  • Как исправить ошибку с PyQT5?

    @Sergey6661313
    там на семёрке случаем не 32-битная система?
    Я везде таскаю с собой только 32-битную сборку python-а с предустановленным в него pyqt и
    библиотеку Microsoft Visual C++ 2010 x86 (он маленький 5 мб всего).

    Ещё возможно проблема в правах к самой папки... Если вы не являетесь владельцем папки, то винда может устраивать такие подлянки...
    Ответ написан
  • Как передать Python проект?

    @Sergey6661313
    Как говорится - не попробуешь не узнаешь.
    сам лично пользуюсь вторым вариантом, но с оговоркой: я переношу 32-битную версию python-а с библиотеками...
    А для запуска использую хитрый ярлык. (skesov.ru/kak-sdelat-yarlyik-s-otnositelnyim-putem...
    Ответ написан
  • Как переменной присвоить значения введённые в QLineEdit?

    @Sergey6661313
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    
    # вообще достаточно просто преобразовывать текст в число и работать с ним:
    def prostoe_preobrazovanie_texta_v_chislo(text):
        try:                    # а вдруг там не число, а хрен пойми что?
            chislo = int(text)  # собственно вот нужная нам строчка...
            return chislo
        except Exception:
            return False
    
    # но иногда приходится выковыривать число из текста:
    def slojnoe_raspoznovanie_chisla(text):
        try:                    # а вдруг там число всё же где то есть?
            import re
            chislo = int(re.findall('(\d+)', text)[0])  # магия!
            return chislo
        except Exception:
            return False
    
    # ну и конечно обратное действие:
    def preobrazovanie_chisla_v_text(i):
        return str(i)
    
    
    
    # вообще для чисел был специально придуман QSpinBox и QDoubleSpinBox
    
    # но отвечая на Ваш вопрос мы всё же сделаем и вариант с QLineEdit
    from PyQt5.QtWidgets import (QWidget, QLabel, QLineEdit, QApplication, QPushButton, QBoxLayout, QDoubleSpinBox)
    from PyQt5.Qt import Qt
    
    class Example(QWidget):
        def __init__(self):
            super().__init__()
            self.initUI()
    
        def initUI(self):
            layout = QBoxLayout(QBoxLayout.Down, self)  # - это для компоновки
    
            self.qle = QLineEdit("", self)              # почему lbl в локальной видимости а qle нет?
            # self - тут очень важно иначе как вы будете обращятся к своему qle?
    
            self.qle.setPlaceholderText("Например: 56") #  - самая крутая killer фича...
            layout.addWidget(self.qle)                  #  - ну и отдаём его компоновщику...
    
            button = QPushButton("математика!")         #  - вы же хотели ещё и кнопку да?
            button.pressed.connect(self.my_super_puper_function)  # вот так соединяем нажатие с методом
            layout.addWidget(button)                    #  - уж попроще всяких button.move(60, 40)
    
            self.spinbox = QDoubleSpinBox()             #  - пример виджета который изначально под это заточен
            self.spinbox.setRange(0, 99999999)          # к сожелению по умолчанию там стоят жёсткие ограничения
            layout.addWidget(self.spinbox)
    
            self.lbl = QLabel("\n\n\n")                 #  - это ведь label - я угадал?
            layout.addWidget(self.lbl)
    
            self.setWindowTitle('Простой пример')
            self.show()
    
        def keyPressEvent(self, e):
            if e.key() == Qt.Key_Enter:
                self.my_super_puper_function()          # а что мешало прямо тут реализовывать математику?
                                                        # ну мы же ещё и кнопку хотим подключить на то же самое...
    
        def my_super_puper_function(self):              # та самя функция...
            # в большинстве случаев математика не работает потому что в qlineedit изначально распологаются не числа,
            # а текст. Ну и как вы к "абвгд" прибавите 10 ?
            # никак... сначало нам нужно убедится что там действительно число:
            i = self.proverki_na_chislo()               # вообщемто просто: я вынес всю магию в отдельный метод...
            # и этот метод возвращяет число именно числом а не текстом.
    
            if i:                                       # если там вообще число, тогда:
                self.matematika(i)                      #   математику в студию!
    
    
        def matematika(self, a):  #  я думаю в комментариях не нуждается...
            b = a * 7 * 1443      #  моя любимая математика: она утраивает двухзначное число :)
    
            # со spinbox-м просто:
            self.spinbox.setValue(b / 11111 * 12345 / 54321 * 5)  # будет работать, я гарантирую...
    
            # а вот для qlineedit тяжелее:
            b_text = preobrazovanie_chisla_v_text(b) # число нужно сначало сделать текстом.
            self.qle.setText(b_text)                 # и лишь потом выводить.
    
    
            #  ну и всякие смехуёчки..., куда же без них?
            if b < 10**10:
                self.lbl.setText("Конкретная математика - для реальныйх пацанов!")
            else:
                self.lbl.setText("ОЛОЛОЛО!!!!")
    
    
        # а этом вообщем то следовало бы остановится...
        # но мой qt вылетает без предупреждений если в lineEdit вписать хоть одну букву...
        # и тут меня понесло:
        def proverki_na_chislo(self):
            text = self.qle.text()
            if text != "":                                      # если наше поле не пустое
                i = prostoe_preobrazovanie_texta_v_chislo(text) #   пробуем простое преобразование
                if i:                                           #   ну и если удечно:
                    return i                                    #       выходим из этой функции уже с числом.
    
                i = slojnoe_raspoznovanie_chisla(text)          #   а если так и не вышли то пробуем более сложное.
                if i:
                    self.lbl.setText(text + " - разве это число?\n" + "тут конечно есть число: " + str(i) + "\nно я с ним ничего решать не буду!")
                    return i
    
                self.lbl.setText("Пожалуйста не материтесь...") # в противном случае скорее всего число вообще не написано:
                return False
            else:
                self.lbl.setText("нужно вписать число!")
                return False
    
    if __name__ == '__main__':
        import sys
        app = QApplication(sys.argv)
        ex = Example()
        ex.show()
        sys.exit(app.exec_())  # без этого ничего не запустится...
    
    
    # как то-так... ну вы держитесь там. Всего вам доброго!
    Ответ написан
  • PyQt4. Как свернуть окно при нажатии на кнопку?

    @Sergey6661313
    # кнопка: http://pyqt.sourceforge.net/Docs/PyQt4/qpushbutton.html
    min = QPushButton()
    
    # минимизация:  http://pyqt.sourceforge.net/Docs/PyQt4/qwidget.html#showMinimized
    def minimization():
        min.showMinimized()
    
    # связывание с нажатием: http://pyqt.sourceforge.net/Docs/PyQt4/new_style_signals_slots.html
    min.pressed.connect(minimization)
    Ответ написан
  • Если изучаешь Python стоит ли для общего понимания изучать С++, или не грузить разум и конкретно изучить Python?

    @Sergey6661313
    я рекомендую java для чайников. Хотя язык и другой, зато придёт понимание ООП и других вещей... , потом диагональным чтением ассемблер, потом пол годика покодить на питоне и уже потом мучить C...
    Ответ написан
  • Python - как реализовать ООП с PyQt (connect)?

    @Sergey6661313
    # у меня python версии 3.5
    # pyqt - 5-ой версии.
    
    ## Минимальная затравка для запуска кода  :
    # coding=UTF8
    # это чтобы можно было переменные по русски называть.
    #  обязательно при этом сохранять py фаил в UTF
    
    # импорты:
    import sys
    from PyQt5.Qt import QApplication, QPushButton, QFileDialog,\
        QTableWidget, QTableWidgetItem, QGridLayout, QWidget, pyqtSignal
    app = QApplication([])
    
    # ну а теперь будем мудрить. Честно говоря ваш уровень
    #  владения python-м совсем не ясен. Потому начнём с супер нуля.
    # None и pass - обозначают пустату (т.е. ничто).
    #  Она нам понадобится в дальнейшем :).
    
    кнопка = None       # надеюсь понятия переменные
    #  обьяснять не надо. Кнопку назовём кнопка.
    # КЭП уплывёт, а кнопка останется в памяти интерпретатора.
    
    # для начало нам нужно знать что всё что отображается
    #  на экране это какие то объекты, а не их описание.
    class open_kn(QPushButton): pass    # - это описание.
    #  Оно как ДНК для будущего ребёнка,
    #  но при этом само ребёнком не является.
    
    # детки создаются как-то так:
    open_kn()           # - это создание экземпляра класса.
    # Мы как бы говорим интерпретатору что хотим "породить"
    #  один экземпляр всего того что описано в "ДНК" open_kn.
    # при этом обычно выполняются все инструкции в нутри
    #  конструктора класса (это тот который def __init__)
    # но у нас пока что такой метод не назначен поэтому
    #  "ребёнок" просто унаследует всё что есть в QPushButton
    
    # но созданный экземпляр как и КЭП появившись и
    # пояснив компьютеру что мы от него хотим сразу самовыпиливается.
    # поэтому нам нужна переменная для его хранения:
    кнопка = open_kn()      # кнопка - наш ребёнок, а  open_kn - наше ДНК.
    
    # так нам надо ещё сделать на ней текст и заставить отрисовыватся на экране:
    # вообще эти два метода могли быть и в конструкторе :
    class open_kn(QPushButton):
        def __init__(self):
            # а кстати да - методы создаются именно через
            #  def %название_метода%(аргументы):
            self.setText('Open')    # устанавливаем текст на кнопке
    
    # но всё это нафиг не нужно если в вашем классе всего
    #  один метод, и тот конструктор -
    # тогда зачем вам вообще такой класс?
    кнопка = QPushButton()
    кнопка.setText('Open')
    
    def всё_что_будет_происходить_при_нажатии_на_кнопку():
        # аналогично не обязательно переопределять целый класс FileDialog всего для одного метода...
        # так с кнопкой разобрались. Теперь нам нужен диалог и таблица.
        fileName = QFileDialog.getOpenFileName \
            (кнопка, 'Простой пример', 'd:\\',"Текст (*.txt)")[0] # ваш код, не буду его коментировать.
        f = open(fileName, 'r', encoding="utf8")
        # я добавил encoding="utf8" потому что мои txt именно в таком формате
        # кстати говоря именно ваши "try, except" и скрывают от вас настоящию ошибку.
        # "Неожиданная ошибка:" - очень информативно...
    
        # тут пока без изменеинй.
        data = []
        with f as f:
            for i in f.readlines():
                data.append(i)
    
        # TableWidget.data = data # ага какой нафиг TableWidget когда мы его ещё не определили?
        #  впрочем х*@ с ним...
        # вы же сами сказали что ваш table в HBox4 ? значит путь бедет примерно такой:
        экземпляр_класса_HBox4.table.update(data) # мы просто напрямую вызываем нужный нам метод
    
    # РИСУЕМ!
    
    class TableWidget(QTableWidget):
        #  я немного переделал: сразу перенёс всю настройку таблици в метод update
    
        def __init__(self, parent=None, data=[]):
            super(TableWidget, self).__init__(parent)
            self.update() # ну и чтобы не повторятся просто вызываю этот метод
    
        def update(self, data=[]):
            self.setColumnCount(1)
            self.setRowCount(len(data))
            for i, entry in enumerate(data, start=1): # у вас "нулевая" строка в txt
                #  - комментарий?
                self.setRowCount(i)
                item = QTableWidgetItem()
                item.setText(str(entry))
                self.setItem(i-1, 0, item) #  - либо тут "-1" либо начинать с нулевого элемента,
                #  либо в setRowCount делать +1...
            print(data) # - для отладки посмотрим: а вдруг данные всё таки передаются,
            #  а в таблицу не пишутся?
    
    class HBox4(QGridLayout):
        def __init__(self, parent=None):
            super(HBox4, self).__init__(parent)
            table = TableWidget()       # - так не правильно.
            # поясню: Вы  только что создали переменную внутри метода.
            #  фишка в том что python по окончании метода
            #  забывает напроч обо всех созданных внутри него переменных. так-то.
            self.table = TableWidget()  # - так правильно. + мы сможем к нему обращятся.
            self.addWidget(кнопка, 0, 0)
            self.addWidget(self.table, 1, 0)
    
    экземпляр_класса_HBox4 = HBox4()
    
    # сам QGridLayout отображатся не умеет вне виджета
    #  я создам для него виджет.
    widget = QWidget()
    widget.setLayout(экземпляр_класса_HBox4)
    widget.show()       # пуф!..
    
    # да мы забыли связать события нажатия на кнопку и наш метод:
    кнопка.pressed.connect(всё_что_будет_происходить_при_нажатии_на_кнопку)
    
    
    
    
    #В принципе на этом можно было бы и остановится,
    #  но в идеале было бы пользоватся сигналами и слотами:
    #  они вам понадобятся позже когда вы начнёте вызывать методы одновременно
    #  или например из потоков.
    class TableWidget(QTableWidget):
        my_signal_update = pyqtSignal(list) # придумываем сигнал my_signal_update
        # (в качесте параметров он принимать будет list (там могло быть что угодно: int, str)
    
        def __init__(self, parent=None, data=[]):
            super(TableWidget, self).__init__(parent)
            self.update()
            self.my_signal_update.connect(self.update) # добавлено
    
        def my_slot_update(self, data):     # добавлено
            print(data, flush=True)         # добавлено
            self.update()                   # добавлено
    
        # ну а дальше без изменений.
        def update(self, data=[]):
            self.setColumnCount(1)
            self.setRowCount(len(data))
            for i, entry in enumerate(data, start=1):
                self.setRowCount(i)
                item = QTableWidgetItem()
                item.setText(str(entry))
                self.setItem(i-1, 0, item)
    
    def всё_что_будет_происходить_при_нажатии_на_кнопку():
        fileName = QFileDialog.getOpenFileName \
            (кнопка, 'Пример с сигналом и слотом', 'd:\\', "Текст (*.txt)")[0]
        f = open(fileName, 'r',  encoding="utf8")
        data = []
        with f as f:
            for i in f.readlines():
                data.append(i)
        table.my_signal_update.emit(data)  # мы просто НЕ напрямую вызываем нужный нам метод...
    
    кнопка.pressed.connect(всё_что_будет_происходить_при_нажатии_на_кнопку)
    
    table = TableWidget()
    экземпляр_класса_HBox4.addWidget(table, 2, 0)
    
    
    
    
    # ну и последний кусочек для минимальнно рабочего приложения на pyqt
    app.exec_() # без этого ничего не запустится...
    Ответ написан
  • Почему при компиляции и запуска кода ничего не выводит на экран?

    @Sergey6661313
    Вообще как вы используете uic?
    чтобы создать запускаемый фаил надо использовать ключ "-x"
    например так:
    pyuic4.bat -x other.ui -o other.py

    и тогда к вашему коду будет добавлено что-то вроде:
    if __name__ == "__main__":
        import sys
        app = QtGui.QApplication(sys.argv)
        Form = QtGui.QWidget()
        ui = Ui_Form()
        ui.setupUi(Form)
        Form.show()
        sys.exit(app.exec_())


    Посмотрите на ваш код без куска выше - глазами транслятора:
    1) импортируем что-то...
    2) пробуем назначить переменную _fromUtf8 и метод для неё. Выделяем под них память
    3) пробуем назначить переменную _encoding и метод для неё. Выделяем под них память
    4) какой то непонятный класс Ui_Form - выделяем под него память
    4.5) ага там ещё и 2 метода. Мы под них в памяти место выделим, а использовать потом будет если его конечно вызовут...
    5) код кончился.
    Эй программист! Код кончился, что мне делать дальше !?. А завершусь ка я...
    Process finished...

    Как ответил abcd0x00 вам необходимо либо наследовать эту форму, либо вызвать её.
    Почитайте вводные курсы по pyqt например от Прохоренока Н.А. - самое начало:
    для запуска pyqt приложений должно быть инициализировано PyQt4.QtGui.QApplication
    затем инициировать все ваши формы и потом чтобы приложение вдруг не завершилось (потому что на этом код и кончится) выполнить QApplication.exec(), который заставить python интерпретатор бесконечно перерисовывать и обновлять состояние ваших форм.
    Да-да именно так и работают все программы (не только на pyqt).
    Ответ написан
  • Как заполнить таблицу в PyQt5? Почему не работает так?

    @Sergey6661313
    Супер просто: строка table.setRowCount(i) обозначает дословно: установить количество строчек. Дальше сами догадаетесь?

    Если всё ещё не догадались:
    Если в цикле указкать print(i) станет понятно почему не получается.

    Всё ещё нет? enumerate начинает итерации с нуля. т.е. в первой итерации получится так: "установить количество строк равное нулю, и поставить в первую строку entry."
    во второй итерации: "установить колличество строк равное 1, и пытаться поставить во вторую из них entry".
    и т.д.

    Короче ответ надо заместо table.setRowCount(i) установить table.setRowCount(i+1)

    и я бы на вашем месте делал не:
    entry = str(entry)
    item = QTableWidgetItem(entry)

    а:
    item = QTableWidgetItem()
    item.setText(str(entry))

    Потому что явное лучше не явного. Ну это так мелочи.....................................................ж
    Ответ написан
  • Как правильно остановить поток QThread?

    @Sergey6661313
    *учительским тоном:
    Ежели check_docs выполняется один раз, и функции в нём работают исключительно с глобальными переменными, и содержит он всего лишь одну функцию, и вы запускаете в нём другой поток (sched.scheduler) нафига вам тогда вообще QThread??? да и вообще зачем в нутри get_docs пытаться перезапустить таймер который его вызвал? ведь ваш get_docs так и останется в стеке памяти а через ебалион циклов он просто выведет ошибка рекурсии, потому что будет бесконечно ожидать когда же комманды в цикле комманд (s.enter -> s.enter -> s.enter -> s.enter и т.д.) вдруг закончатся... И почему бы вам не написать нам вывод вашей ошибки в консоль?

    *обычным голосом:
    ладно теперь серьёзно - раз уж используете pyqt то используйте на всю катушку!:
    class МойПервыйТаймерНаQt(QtCore.QObject):
        def __init__(self):
            super().__init__()
            self.basictimer = QtCore.QBasicTimer()
            self.basictimer.start(2000, self) # задержка в миллисекундах. 2000 для примера потому что 10 сек мне долго.
    
        def timerEvent(self, QTimerEvent):
            get_docs(self)  # вы конечно можете создать обьект sched.scheduler и передавать его, но зачем?
    
    
    if __name__ == "__main__":
        app = QtGui.QApplication(sys.argv)
        main_window = main_cl()
        мой_первый_таймер_на_Qt = МойПервыйТаймерНаQt()
        sys.exit(app.exec_())


    и уберите строчку "s.enter(600, 1, get_docs, (sc,))" из get_docs
    Ответ написан
  • Управления временем в Python?

    @Sergey6661313
    в __init__:
    self.timer = QtCore.QBasicTimer()
    self.timer.start(1000, self) # 1000 - наша задержка (должна быть в миллисекундах помоему)

    и определите метод:
    def timerEvent(self, event)
    self.follow.setValue(self.follow.value() - 1)

    и да переменная hp не нужна. follow уже содержит переменную доступ к которой осуществляется через value() и setValue(), поэтому плодить сущности незачем.

    В кратце QBasicTimer это что-то вроде Qthread котороый каждые обозначенные миллисекунды вызывает событие timerEvent обозначенного обьекта.
    Ответ написан