Advertisement
Nobilis

GUI Problem: main.py

May 29th, 2014
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.30 KB | None | 0 0
  1. #!/usr/bin/python
  2.  
  3. import sys
  4. import os
  5. import time
  6. import multiprocessing
  7.  
  8. from PyQt4 import QtCore
  9. from PyQt4 import QtGui
  10. from test import Ui_MainWindow
  11.  
  12. import script
  13.  
  14. class StreamWrapper:
  15.     def __init__(self, stream, thread, mutex):
  16.         self.stream = stream
  17.         self.thread = thread
  18.         self.mutex  = mutex
  19.  
  20.     def write(self, msg):
  21.         with QtCore.QMutexLocker(self.mutex):
  22.             self.thread.emit(QtCore.SIGNAL('update_console(QString)'), msg)
  23.             self.stream.write(msg)
  24.  
  25. class RunInThread(QtCore.QThread):
  26.     def __init__(self):
  27.         QtCore.QThread.__init__(self)
  28.         self.mutex = QtCore.QMutex()
  29.         self.running = False
  30.  
  31.     def __del__(self):
  32.         self.wait()
  33.  
  34.     def clean_exit(self, exit_code):
  35.         self.exit(exit_code)
  36.  
  37.     def run(self):
  38.         sys.stdout = StreamWrapper(sys.stdout, self, self.mutex)
  39.         sys.stderr = StreamWrapper(sys.stderr, self, self.mutex)
  40.         sys.exit = self.clean_exit
  41.  
  42.         try:
  43.             self.script = script.Script()
  44.  
  45.             self.script.run()
  46.  
  47.             self.running = True
  48.         except SystemExit as e:
  49.             print 'Script terminated'
  50.  
  51.        
  52.         self.emit(QtCore.SIGNAL('unlock_button'))
  53.         self.running = False
  54.  
  55.         return
  56.  
  57.  
  58. class Driver(QtGui.QMainWindow):
  59.     def __init__(self):
  60.         super(Driver, self).__init__()
  61.         self.ui = Ui_MainWindow()
  62.         self.ui.setupUi(self)
  63.  
  64.         self.ui.pushButton.clicked.connect(self.run_script)
  65.  
  66.         self.show()
  67.  
  68.  
  69.     def run_script(self):
  70.         self.ui.pushButton.setEnabled(False)
  71.         self.thread = RunInThread()
  72.         self.connect(self.thread, QtCore.SIGNAL('update_console(QString)'), self.ui.plainTextEdit.insertPlainText)
  73.         self.connect(self.thread, QtCore.SIGNAL('unlock_button'), lambda: self.ui.pushButton.setEnabled(True))
  74.         self.thread.start()
  75.  
  76.     def closeEvent(self, event):
  77.         if hasattr(self, 'thread') and self.thread.running and hasattr(self.thread, 'script'):
  78.             self.thread.script.suspend()
  79.             self.thread.wait()
  80.         super(Driver, self).closeEvent(event)
  81.        
  82. def main():
  83.     app = QtGui.QApplication(sys.argv)
  84.     ex  = Driver()
  85.     sys.exit(app.exec_())
  86.  
  87. if __name__ == '__main__':
  88.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement