Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 from python_qt_binding.QtGui import QVBoxLayout, QWidget
00034 from qt_gui.plugin import Plugin
00035 from qt_gui_py_common.simple_settings_dialog import SimpleSettingsDialog
00036 from py_console_widget import PyConsoleWidget
00037
00038 try:
00039 from spyder_console_widget import SpyderConsoleWidget
00040 _has_spyderlib = True
00041 except ImportError:
00042 _has_spyderlib = False
00043
00044
00045 class PyConsole(Plugin):
00046 """
00047 Plugin providing an interactive Python console
00048 """
00049 def __init__(self, context):
00050 super(PyConsole, self).__init__(context)
00051 self.setObjectName('PyConsole')
00052
00053 self._context = context
00054 self._use_spyderlib = _has_spyderlib
00055 self._console_widget = None
00056 self._widget = QWidget()
00057 self._widget.setLayout(QVBoxLayout())
00058 self._widget.layout().setContentsMargins(0, 0, 0, 0)
00059 if context.serial_number() > 1:
00060 self._widget.setWindowTitle(self._widget.windowTitle() + (' (%d)' % context.serial_number()))
00061 self._context.add_widget(self._widget)
00062
00063 def _switch_console_widget(self):
00064 self._widget.layout().removeWidget(self._console_widget)
00065 self.shutdown_console_widget()
00066
00067 if _has_spyderlib and self._use_spyderlib:
00068 self._console_widget = SpyderConsoleWidget(self._context)
00069 self._widget.setWindowTitle('SpyderConsole')
00070 else:
00071 self._console_widget = PyConsoleWidget(self._context)
00072 self._widget.setWindowTitle('PyConsole')
00073 if self._context.serial_number() > 1:
00074 self._widget.setWindowTitle(self._widget.windowTitle() + (' (%d)' % self._context.serial_number()))
00075
00076 self._widget.layout().addWidget(self._console_widget)
00077
00078 def save_settings(self, plugin_settings, instance_settings):
00079 instance_settings.set_value('use_spyderlib', self._use_spyderlib)
00080
00081 def restore_settings(self, plugin_settings, instance_settings):
00082 self._use_spyderlib = _has_spyderlib and (instance_settings.value('use_spyderlib', True) in [True, 'true'])
00083 self._switch_console_widget()
00084
00085 def trigger_configuration(self):
00086 options = [
00087 {'title': 'SpyderConsole', 'description': 'Advanced Python console with tab-completion (needs spyderlib to be installed).', 'enabled': _has_spyderlib},
00088 {'title': 'PyConsole', 'description': 'Simple Python console.'},
00089 ]
00090 dialog = SimpleSettingsDialog(title='PyConsole Options')
00091 dialog.add_exclusive_option_group(title='Console Type', options=options, selected_index=int(not self._use_spyderlib))
00092 console_type = dialog.get_settings()[0]
00093 new_use_spyderlib = {0: True, 1: False}.get(console_type['selected_index'], self._use_spyderlib)
00094 if self._use_spyderlib != new_use_spyderlib:
00095 self._use_spyderlib = new_use_spyderlib
00096 self._switch_console_widget()
00097
00098 def shutdown_console_widget(self):
00099 if self._console_widget is not None and hasattr(self._console_widget, 'shutdown'):
00100 self._console_widget.shutdown()
00101
00102 def shutdown_plugin(self):
00103 self.shutdown_console_widget()