Skip to content

Instantly share code, notes, and snippets.

@Day0Dreamer
Created November 27, 2017 19:28
Show Gist options
  • Save Day0Dreamer/d32f6679c25b66e2696cecd82c5260cc to your computer and use it in GitHub Desktop.
Save Day0Dreamer/d32f6679c25b66e2696cecd82c5260cc to your computer and use it in GitHub Desktop.
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