1

私はPythonを初めて使用し、この強力な言語を学習中です。次のスクリプトを書くことができました。部分的な出力 (2 行のみ) が得られますが、何が問題なのかわかりません。私を助けてください。

#!/usr/bin/env python
#-*- coding: utf-8 -*-

from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import (QProcess,QRect,SIGNAL,SLOT,QString,QStringList,qDebug)
from PyQt4.QtGui import (QMainWindow,QWidget,QPushButton,QTextEdit,QApplication)

class YTDL (QtGui.QMainWindow):
    def __init__ (self,parent=None):
        super(YTDL,self).__init__(parent)

        self.resize(400,300)
        self.setWindowTitle("Youtube-dl output using QProcess")

        self.__init_Components()
        self.__ui_event_handler()

    def __init_Components(self):
        self.proc = QProcess()
        self.cw = QWidget(self)

        self.btn = QPushButton(self.cw)
        self.btn.setText("Run")
        self.btn.setGeometry(QRect(270,10,110,27))

        self.te = QTextEdit(self.cw)
        self.te.setReadOnly(True)
        self.te.setOverwriteMode(False)
        self.te.setGeometry(QRect(10,40,380,170))

        self.setCentralWidget(self.cw)

    def __ui_event_handler(self):
        self.connect(self.btn, SIGNAL('clicked()'),self.Button_Clicked)


    def Button_Clicked(self):
        args = '-ct -f 18 --extract-audio --audio-quality 320k --audio-format mp3 -k http://www.youtube.com/watch?v=OiPO_TAAZPc'
        cmd = 'youtube-dl'
        self.proc.setWorkingDirectory("~/Videos/Folder1")
        self.connect(self.proc, SIGNAL('readyRead()'),self._read)
        self.proc.setOpenMode(self.proc.ReadWrite)
        self.proc.start(cmd ,args)
        if not self.proc.waitForStarted():
            exit(1)

    def _read(self):
        s = self.proc.readAllStandardOutput()
        qDebug (s)
        print (s)
        self.te.append(QString(s)) 



def main():
    import sys
    app = QApplication(sys.argv)
    ytdl = YTDL()
    ytdl.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()
4

1 に答える 1

0

私は自分でそれを理解したと思います。以下はすべて改善されたバージョンです。改善する必要がある場合は、推奨事項を歓迎します。

クラス YTDL (QtGui.QMainWindow): def init (self,parent=None): super(YTDL,self). 初期化(親)

    self.resize(400,350)
    self.setWindowTitle("Youtube-dl output using QProcess")

    self.__init_Components()
    self.__ui_event_handler()

def __init_Components(self):
    self.proc = QProcess()
    self.cw = QWidget(self)

    self.btn = QPushButton(self.cw)
    self.btn.setText("Run")
    self.btn.setGeometry(QRect(270,10,110,27))

    self.te = QTextEdit(self.cw)
    self.te.setReadOnly(True)
    self.te.setOverwriteMode(False)
    self.te.setGeometry(QRect(10,40,380,170))

    self.progbar = QProgressBar(self.cw)
    self.progbar.setGeometry(QRect(10,220,380,18))
    self.progbar.setRange(0,100)
    self.progbar.setValue(0)
    self.progbar.show()

    self.setCentralWidget(self.cw)

def __ui_event_handler(self):
    self.connect(self.btn, SIGNAL('clicked()'),self.Button_Clicked)
    self.connect(self.proc, SIGNAL('readyReadStandardOutput()'),self._read)
    self.connect(self.proc, SIGNAL('readyReadStandardError()'),self._readError)


def Button_Clicked(self):

    args = "-ct -f 18 --extract-audio --audio-quality 320k --audio-format mp3 -k http://www.youtube.com/watch?v=SjUrib_Gh0Y"
    cmd = "youtube-dl"
    cmd = cmd + " " + args 
    print (cmd)
    self.proc.setWorkingDirectory("~/Videos/Folder1")
    self.proc.setOpenMode(self.proc.ReadWrite)
    self.proc.start(cmd)
    self.proc.waitForStarted()


def _read(self):
    s = str(self.proc.readAllStandardOutput())

    download_progress_exp = re.compile(r'.\d+\.\d+\%', re.MULTILINE)
    progbarresult = download_progress_exp.findall(s)
    i = 0
    if progbarresult != []:
        for i in range(0,len(progbarresult)):
            self.progbar.setValue(float(progbarresult[i].strip("%")))
            self.te.append(QString(s))



def _readError(self):
    self.te.append(str(self.proc.readAllStandardError()))    
于 2012-11-03T04:29:53.337 に答える