Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- import sys
- import os
- import time
- import multiprocessing
- from PyQt4 import QtCore
- from PyQt4 import QtGui
- from test import Ui_MainWindow
- import script
- class StreamWrapper:
- def __init__(self, stream, thread, mutex):
- self.stream = stream
- self.thread = thread
- self.mutex = mutex
- def write(self, msg):
- with QtCore.QMutexLocker(self.mutex):
- self.thread.emit(QtCore.SIGNAL('update_console(QString)'), msg)
- self.stream.write(msg)
- class RunInThread(QtCore.QThread):
- def __init__(self):
- QtCore.QThread.__init__(self)
- self.mutex = QtCore.QMutex()
- self.running = False
- def __del__(self):
- self.wait()
- def clean_exit(self, exit_code):
- self.exit(exit_code)
- def run(self):
- sys.stdout = StreamWrapper(sys.stdout, self, self.mutex)
- sys.stderr = StreamWrapper(sys.stderr, self, self.mutex)
- sys.exit = self.clean_exit
- try:
- self.script = script.Script()
- self.script.run()
- self.running = True
- except SystemExit as e:
- print 'Script terminated'
- self.emit(QtCore.SIGNAL('unlock_button'))
- self.running = False
- return
- class Driver(QtGui.QMainWindow):
- def __init__(self):
- super(Driver, self).__init__()
- self.ui = Ui_MainWindow()
- self.ui.setupUi(self)
- self.ui.pushButton.clicked.connect(self.run_script)
- self.show()
- def run_script(self):
- self.ui.pushButton.setEnabled(False)
- self.thread = RunInThread()
- self.connect(self.thread, QtCore.SIGNAL('update_console(QString)'), self.ui.plainTextEdit.insertPlainText)
- self.connect(self.thread, QtCore.SIGNAL('unlock_button'), lambda: self.ui.pushButton.setEnabled(True))
- self.thread.start()
- def closeEvent(self, event):
- if hasattr(self, 'thread') and self.thread.running and hasattr(self.thread, 'script'):
- self.thread.script.suspend()
- self.thread.wait()
- super(Driver, self).closeEvent(event)
- def main():
- app = QtGui.QApplication(sys.argv)
- ex = Driver()
- sys.exit(app.exec_())
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement