2017-02-16 19 views
0

PyQTの経験では、サンプルコードHEREに従っていますが、開始ダウンロード部分をどのように分けることができるかについてはわかりませんGUI部分を起動して、代わりにOK(startBtn)ボタンを押して起動することができます。また、私は何もしないが、あなたにエラーを与えるコマンドを知っているが、私はそれが動作していることを知っている。
ご了承ください。PyQt5:ボタンをクリックして特定のサブプロセスを開始したい

from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QAction, qApp, QDesktopWidget, QPushButton, QHBoxLayout, QVBoxLayout, QTextEdit 
from PyQt5.QtGui import QIcon 
from PyQt5.QtCore import QThread, QProcess 
import sys 


class GUI(QProcess): 
    def __init__(self): 
     super().__init__() 

     # Create an instance variable here (of type QTextEdit) 
     startBtn = QPushButton('OK') 
     stopBtn = QPushButton('Cancel') 

     #startBtn.clicked.connect() 
     stopBtn.clicked.connect(qApp.exit) 

     self.hbox = QHBoxLayout() 
     self.hbox.addStretch(1) 
     self.hbox.addWidget(startBtn) 
     self.hbox.addWidget(stopBtn) 
     self.edit = QTextEdit() 

     self.edit.setWindowTitle("QTextEdit Standard Output Redirection") 

     self.vbox = QVBoxLayout() 
     self.vbox.addStretch(1) 
     self.vbox.addWidget(self.edit) 
     self.vbox.addLayout(self.hbox) 

     #setLayout(self.vbox) 
     self.central=QWidget() 

     #self.vbox.addWidget(self.edit) 
     self.central.setLayout(self.vbox) 
     self.central.show() 

    def readStdOutput(self): 
     self.edit.append(str(self.readAllStandardOutput())) 




def main(): 
    app = QApplication(sys.argv) 
    qProcess = GUI() 

    qProcess.setProcessChannelMode(QProcess.MergedChannels); 
    qProcess.start("youtube-dl") 
    qProcess.readyReadStandardOutput.connect(qProcess.readStdOutput); 

    return app.exec_() 


if __name__ == '__main__': 
    main() 

2ノート:

  1. あなたも、あなたがそれを押したときにプロセスが終了するまで、OKボタンを無効にする方法を知っている場合は、私が知っているのが大好きです。

  2. すべての輸入品が使用されているわけではありませんが、後でクリーニングすることができます。 PyCharmは使用されているかどうかを示します。クリーンアップは後で行います。あなたは、いくつかの考慮事項持っている必要が頼む何をすべきか

答えて

1

  • youtube-dlは、このために、私はQLineEditを配置している、URLのように、パラメータを必要とします。

  • たときに、プロセスが開始および終了を知るために、我々は信号を使用します。stateChanged(newState)

完全なコード:

import sys 

from PyQt5.QtCore import QProcess 
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout, QVBoxLayout, QTextEdit, QLabel, QLineEdit 


class GUI(QProcess): 
    def __init__(self, parent=None): 
     super(GUI, self).__init__(parent=parent) 

     # Create an instance variable here (of type QTextEdit) 
     self.startBtn = QPushButton('OK') 
     self.stopBtn = QPushButton('Cancel') 

     self.hbox = QHBoxLayout() 
     self.hbox.addStretch(1) 
     self.hbox.addWidget(self.startBtn) 
     self.hbox.addWidget(self.stopBtn) 

     self.label = QLabel("Url: ") 
     self.lineEdit = QLineEdit() 

     self.lineEdit.textChanged.connect(self.EnableStart) 

     self.hbox2 = QHBoxLayout() 
     self.hbox2.addWidget(self.label) 
     self.hbox2.addWidget(self.lineEdit) 

     self.edit = QTextEdit() 
     self.edit.setWindowTitle("QTextEdit Standard Output Redirection") 

     self.vbox = QVBoxLayout() 
     self.vbox.addStretch(1) 

     self.vbox.addLayout(self.hbox2) 
     self.vbox.addWidget(self.edit) 
     self.vbox.addLayout(self.hbox) 

     self.central = QWidget() 

     self.central.setLayout(self.vbox) 
     self.central.show() 

     self.startBtn.clicked.connect(self.startDownload) 
     self.stopBtn.clicked.connect(self.kill) 
     self.stateChanged.connect(self.slotChanged) 

     self.EnableStart() 

    def slotChanged(self, newState): 
     if newState == QProcess.NotRunning: 
      self.startBtn.setDisabled(False) 
     elif newState == QProcess.Running: 
      self.startBtn.setDisabled(True) 

    def startDownload(self): 
     self.start("youtube-dl", [self.lineEdit.text()]) 

    def readStdOutput(self): 
     self.edit.append(str(self.readAllStandardOutput())) 

    def EnableStart(self): 
     self.startBtn.setDisabled(self.lineEdit.text() == "") 


def main(): 
    app = QApplication(sys.argv) 
    qProcess = GUI() 

    qProcess.setProcessChannelMode(QProcess.MergedChannels) 
    qProcess.readyReadStandardOutput.connect(qProcess.readStdOutput) 

    return app.exec_() 


if __name__ == '__main__': 
    main() 

スクリーンショット:

enter image description here

+0

ターnks、これはトンを助ける!これは私のための難しい部分でした。私は手動でアップデートする.txtファイルとYoutube-dlを使用していますが、それ以外のいくつかのパラメータが含まれていますが、含まれていません。今度は、GUIを使ってパラメータを変更/追加する方法を学びます。 – Thomasedv

+0

私の答えが正しいとマークするのに役立ちます。 – eyllanesc

+0

はい、もちろんです。ちょうどGoogleに最初にやらなければならなかった... - .-私はサイトを初めて利用しています...それはとても明らかでした... – Thomasedv

関連する問題