Advertisement
Guest User

Untitled

a guest
Sep 7th, 2013
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.39 KB | None | 0 0
  1. from PySide.QtCore import *
  2. from PySide.QtGui import *
  3. import re
  4.  
  5.  
  6. class Worker(QObject):
  7.     progressSignal = Signal(float)
  8.     progressLogSignal = Signal(str)
  9.  
  10.     def __init__(self, parent=None):
  11.         super(Worker, self).__init__(parent)
  12.         self.progress = 0.0
  13.  
  14.     def runProcess(self):
  15.         cmd = '/Applications/RV64.app/Contents/MacOS/rvio' # MAKE THIS CROSS PLATFORM BY INHERITING ENVIRONMENT
  16.         args = ['-vv', '/var/tmp/test.#.jpg', '-o', '/var/tmp/outtest/test.#.png']
  17.         # SET UP PROCESS AND ENVIRONMENT
  18.         self.process = QProcess(self)
  19.         env = QProcessEnvironment.systemEnvironment()
  20.         self.process.setProcessEnvironment(env)
  21.         # CONNECT STDOUT
  22.         self.process.readyReadStandardOutput.connect(self.__read)
  23.         # RUN THE COMMAND
  24.         self.process.start(cmd, args)
  25.  
  26.  
  27.     def __read(self):
  28.         msg = self.process.readAll()
  29.         self.progressLogSignal.emit(str(msg))
  30.        
  31.         # PARSE FOR PROGRESS INFO
  32.         matchObject = re.search('.+\((\d+\.?\d*)%\sdone\)', msg)
  33.  
  34.         if matchObject:
  35.             # RVIO PROGRESS (-VV FLAG REQUIRED)
  36.             self.progress = matchObject.group(1)
  37.             self.progressSignal.emit(float(self.progress))
  38.  
  39.  
  40. class ProcessWidget(QWidget):
  41.  
  42.     def __init__(self, parent=None):
  43.         '''
  44.        Widget to show both a progress bar and a text widget to display
  45.        an external app's stdout
  46.        '''
  47.         super(ProcessWidget, self).__init__(parent)
  48.         self.initUI()
  49.  
  50.     def initUI(self):
  51.         layout = QVBoxLayout()
  52.         # PROGRESS BAR
  53.         self.progressBar = QProgressBar(self)
  54.         self.progressBar.setMinimum(0)
  55.         self.progressBar.setMaximum(100)
  56.  
  57.         # MESSAGE BOX
  58.         self.textArea = QTextEdit()
  59.  
  60.         # BUTTON
  61.         self.btn = QPushButton('GO')
  62.  
  63.         # LAYOUT
  64.         layout.addWidget(self.progressBar)
  65.         layout.addWidget(self.textArea)
  66.         layout.addWidget(self.btn)
  67.         self.setLayout(layout)
  68.  
  69. def testPrint(msg):
  70.     print str(msg)
  71.  
  72. if __name__ == '__main__':
  73.     import sys
  74.     app = QApplication([])
  75.     w = Worker()
  76.     ui = ProcessWidget()
  77.     ui.btn.clicked.connect(w.runProcess)
  78.     w.progressLogSignal.connect(ui.textArea.append)
  79.     w.progressSignal.connect(testPrint)
  80.     w.progressSignal.connect(ui.progressBar.setValue)
  81.     ui.show()
  82.     sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement