Portál AbcLinuxu, 9. května 2024 21:49


Dotaz: ještě jeden ydl gui program ... problém s QTimerem

18.12.2023 20:07 Milan Uhrák | skóre: 31 | blog: milan_at_ABC
ještě jeden ydl gui program ... problém s QTimerem
Přečteno: 565×
Odpovědět | Admin
Zdravíčko... Protože jsem tady již dostal mnoho cenných rad, s dalším zákysem se obracím znovu sem..

je třída Helper (taková nástavba nad yt-dlp), a v ní volám jednak žádost o info k videosouboru, a pak samotné stažení.

Stahování infa i souboru je v pořádku, a chtěl jsem nasimulovat přerušení stahování. Má to dělat user, ale pro pokusy, jak se to bude chovat jsem použil QTimer takto:
from yt_dlp import YoutubeDL
from PySide2.QtCore import \
    Qt, QTimer

class Helper:
    def __init__(self):
        self.pointer = 0
        self.lines = 0
        self.content = []
        self.videoName = ""
...
...
    def progress(self, p):
        if self.first:
            logging.debug(f" {pprint.pformat(p)}")
        logging.debug(f"Status: {pprint.pformat(p['status'])}, {p['_default_template']}, {type(p).__name__}")
        logging.debug(f"{self.timer.remainingTime()}")
        # print(self.timer.remainingTime())
        self.first = False

...
...
    def downloadFile(self, url):
        ydlOpts = {
            'progress_hooks': [self.progress]
        }
        self.timer = QTimer()
        self.timer.setInterval(3500)
        self.timer.setSingleShot(True)
        self.timer.timeout.connect(self.stopDL)
        self.timer.start()
        self.ydl = YoutubeDL(ydlOpts)
        self.ydl.download(url)

    def stopDL(self):
        logging.debug("stopping")
        self.ydl.close()

No ... ale v logu je vidět jak QTimeru ubývá čas, a ... nic

18 19:11:08 [DEBUG] ytHelper: 84        progress:  Status: 'downloading',   5.1% of   78.59MiB at    4.50MiB/s ETA 00:16, dict 
18 19:11:08 [DEBUG] ytHelper: 85        progress:  1115 


18 19:11:09 [DEBUG] ytHelper: 84        progress:  Status: 'downloading',  10.2% of   78.59MiB at    4.69MiB/s ETA 00:15, dict 
18 19:11:09 [DEBUG] ytHelper: 85        progress:  295 


18 19:11:10 [DEBUG] ytHelper: 84        progress:  Status: 'downloading',  12.3% of   78.59MiB at    4.73MiB/s ETA 00:14, dict 
18 19:11:10 [DEBUG] ytHelper: 85        progress:  0 

18 19:11:10 [DEBUG] ytHelper: 84        progress:  Status: 'downloading',  12.3% of   78.59MiB at  350.34KiB/s ETA 03:22, dict 
18 19:11:10 [DEBUG] ytHelper: 85        progress:  0 

A samozřejmě, stahování se nepřeruší. Nemůžu nijak zjistit, proč QTimer nevolá ukončovací funkci (jak se mi díky logu zdá)

Nemá s tím někdo z vás zkušenosti ? Mně napadá jen to, že QTimer není potomkem QWidgetu, ale nedělá mi to žádné problémové hlášky ( Qt Creator ), raději se zeptám.. jo a je to Qt5..

Děkuji
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

18.12.2023 23:25 Milan Uhrák | skóre: 31 | blog: milan_at_ABC
Rozbalit Rozbalit vše Re: ještě jeden ydl gui program ... problém s QTimerem
Odpovědět | | Sbalit | Link | Blokovat | Admin
Aha, zkusil jsem tedy zastavovat yt-dlp "ručně" přes tlačítko, a nic .. volající okno je úplně zatuhlé až do skončení stahování .. takže stahování asi musím hodit do podprocesu ... no .. uvidíme .. Někdy dám vědět, jak jsem dopadl, protože teď jsem na tom s časem nedobře ...
13.2. 20:50 Franta
Rozbalit Rozbalit vše Re: ještě jeden ydl gui program ... problém s QTimerem
Pro funkcnost QTimeru potrebujes, aby ti bezela nejaka smycka udalosti ve vlakne (QEventLoop/exec, QCoreApplication/exec, apod.), ve kterem si vytvoril timer. Dale pak muze byt download() funkce blokujici, tj vrati az bude dokonceno. To bys mozna mohl pouzit neco jako QEllapsedTimer a testovat uplynuly cas v callbacku stahovaci funkce a zkusit to zrusit tam odtud

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.