Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from PySide.QtCore import *
- from PySide.QtGui import *
- import re
- class Worker(QObject):
- progressSignal = Signal(float)
- progressLogSignal = Signal(str)
- def __init__(self, parent=None):
- super(Worker, self).__init__(parent)
- self.progress = 0.0
- def runProcess(self):
- cmd = '/Applications/RV64.app/Contents/MacOS/rvio' # MAKE THIS CROSS PLATFORM BY INHERITING ENVIRONMENT
- args = ['-vv', '/var/tmp/test.#.jpg', '-o', '/var/tmp/outtest/test.#.png']
- # SET UP PROCESS AND ENVIRONMENT
- self.process = QProcess(self)
- env = QProcessEnvironment.systemEnvironment()
- self.process.setProcessEnvironment(env)
- # CONNECT STDOUT
- self.process.readyReadStandardOutput.connect(self.__read)
- # RUN THE COMMAND
- self.process.start(cmd, args)
- def __read(self):
- msg = self.process.readAll()
- self.progressLogSignal.emit(str(msg))
- # PARSE FOR PROGRESS INFO
- matchObject = re.search('.+\((\d+\.?\d*)%\sdone\)', msg)
- if matchObject:
- # RVIO PROGRESS (-VV FLAG REQUIRED)
- self.progress = matchObject.group(1)
- self.progressSignal.emit(float(self.progress))
- class ProcessWidget(QWidget):
- def __init__(self, parent=None):
- '''
- Widget to show both a progress bar and a text widget to display
- an external app's stdout
- '''
- super(ProcessWidget, self).__init__(parent)
- self.initUI()
- def initUI(self):
- layout = QVBoxLayout()
- # PROGRESS BAR
- self.progressBar = QProgressBar(self)
- self.progressBar.setMinimum(0)
- self.progressBar.setMaximum(100)
- # MESSAGE BOX
- self.textArea = QTextEdit()
- # BUTTON
- self.btn = QPushButton('GO')
- # LAYOUT
- layout.addWidget(self.progressBar)
- layout.addWidget(self.textArea)
- layout.addWidget(self.btn)
- self.setLayout(layout)
- def testPrint(msg):
- print str(msg)
- if __name__ == '__main__':
- import sys
- app = QApplication([])
- w = Worker()
- ui = ProcessWidget()
- ui.btn.clicked.connect(w.runProcess)
- w.progressLogSignal.connect(ui.textArea.append)
- w.progressSignal.connect(testPrint)
- w.progressSignal.connect(ui.progressBar.setValue)
- ui.show()
- sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement