Created
November 27, 2017 19:28
-
-
Save Day0Dreamer/d32f6679c25b66e2696cecd82c5260cc to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from PySide import QtGui | |
from PySide.QtCore import QThread, QProcess, Signal, QObject | |
import sys | |
class MainDialog(QtGui.QDialog): | |
def __init__(self): | |
super(MainDialog, self).__init__() | |
self.proc = QProcess() | |
self.layout = QtGui.QVBoxLayout(self) | |
self.btn1 = QtGui.QPushButton() | |
self.btn1.setText('This Thread') | |
self.btn2 = QtGui.QPushButton() | |
self.btn2.setText('New Thread') | |
self.layout.addWidget(self.btn1) | |
self.layout.addWidget(self.btn2) | |
self.btn1.show() | |
self.btn2.show() | |
self.btn1.clicked.connect(self.run) | |
self.btn2.clicked.connect(self.run_a_job) | |
def run(self): | |
print('Started') | |
self.proc = QProcess() | |
self.proc.start('bin/fake_renderer.exe') | |
self.proc.readyRead.connect(lambda: print(str(self.proc.readAll()).strip())) | |
self.proc.finished.connect(self.run2) | |
print(self.proc.exitCode()) | |
def run2(self): | |
print('Started') | |
self.proc = QProcess() | |
self.proc.start('bin/fake_renderer.exe') | |
self.proc.readyRead.connect(lambda: print(str(self.proc.readAll()).strip())) | |
self.proc.finished.connect(self.run) | |
print(self.proc.exitCode()) | |
def run_a_job(self): | |
self.ffmpeg_instance = FFmpeg() | |
# Создаем объект класса потока | |
self.ffmpeg_thread = QThread() | |
# Помещаем наш объект в этот поток | |
self.ffmpeg_instance.moveToThread(self.ffmpeg_thread) | |
# Сигнал который эмиттится во время старта потока | |
self.ffmpeg_thread.started.connect(self.ffmpeg_instance.start) | |
# По завершению функции start закрываем поток | |
self.ffmpeg_instance.finishSignal.connect(self.ffmpeg_thread.quit) | |
# Забираем значение из сигнала и распечатываем его | |
self.ffmpeg_instance.readSignal.connect(lambda x: print(x)) | |
# Запуск потока | |
self.ffmpeg_thread.start() | |
QtGui.QMessageBox.information(self, 'Beep', 'Job is done') | |
class FFmpeg(QObject): | |
finishSignal = Signal() | |
readSignal = Signal(str) | |
def __init__(self, config=None): | |
super(FFmpeg, self).__init__() | |
self.__config = config | |
self.process = None | |
def start(self): | |
print('FFMPEG HAS STARTED') | |
self.process = QProcess() | |
# Устанавливаем вывод ошибок и сообщений в консоль | |
self.process.setProcessChannelMode(QProcess.MergedChannels) | |
# Когда есть что почитать - вызываем зачитывание | |
self.process.readyRead.connect(self.process_output) | |
# Соединяем окончание вызываемого процесса с распечаткой | |
self.process.finished.connect(lambda: print('ffmpeg is done')) | |
# Запускаем процесс | |
self.process.start('bin/fake_renderer.exe') | |
# По окончанию процесса кричим ФИНИШ | |
self.finishSignal.emit() | |
def process_output(self): | |
# Забираем текст из буфера | |
output = self.process.readAll() | |
# Передаём текст в другой класс | |
self.readSignal.emit(output) | |
app = QtGui.QApplication(sys.argv) | |
app.setStyle("cleanlooks") | |
form = MainDialog() | |
form.show() | |
app.exec_() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment